feat(aur): add subcommand to drop a package from the repos to the AUR
Add an aur command to interact with the Arch User Repository including the drop-from-repo subommand which allows to drop packages from the official repository to the Arch User Repository in one go. Related to #143 Component: pkgctl aur drop-from-repo Co-authored-by: Levente Polyak <anthraxx@archlinux.org> Signed-off-by: Christian Heusel <christian@heusel.eu>
This commit is contained in:
parent
8f45c65830
commit
2b8033b911
|
@ -135,6 +135,7 @@ complete -F _offload_build offload-build
|
||||||
|
|
||||||
|
|
||||||
_pkgctl_cmds=(
|
_pkgctl_cmds=(
|
||||||
|
aur
|
||||||
auth
|
auth
|
||||||
build
|
build
|
||||||
db
|
db
|
||||||
|
@ -264,6 +265,17 @@ _pkgctl_release_args__repo_opts() { _devtools_completions_repo; }
|
||||||
_pkgctl_release_args_r_opts() { _pkgctl_release_args__repo_opts; }
|
_pkgctl_release_args_r_opts() { _pkgctl_release_args__repo_opts; }
|
||||||
_pkgctl_release_opts() { _filedir -d; }
|
_pkgctl_release_opts() { _filedir -d; }
|
||||||
|
|
||||||
|
_pkgctl_aur_cmds=(
|
||||||
|
drop-from-repo
|
||||||
|
)
|
||||||
|
|
||||||
|
_pkgctl_aur_drop_from_repo_args=(
|
||||||
|
--no-disown
|
||||||
|
-f --force
|
||||||
|
-h --help
|
||||||
|
)
|
||||||
|
_pkgctl_aur_drop_from_repo_opts() { _filedir -d; }
|
||||||
|
|
||||||
|
|
||||||
_pkgctl_repo_cmds=(
|
_pkgctl_repo_cmds=(
|
||||||
clone
|
clone
|
||||||
|
@ -308,7 +320,6 @@ _pkgctl_repo_create_args=(
|
||||||
-h --help
|
-h --help
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
_pkgctl_repo_switch_args=(
|
_pkgctl_repo_switch_args=(
|
||||||
--discard-changes
|
--discard-changes
|
||||||
-f --force
|
-f --force
|
||||||
|
|
|
@ -96,6 +96,18 @@ _pkgctl_release_args=(
|
||||||
'*:git_dir:_files -/'
|
'*:git_dir:_files -/'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_pkgctl_aur_cmds=(
|
||||||
|
"pkgctl aur command"
|
||||||
|
"drop-from-repo[Drop a package from the official repository to the AUR]"
|
||||||
|
)
|
||||||
|
|
||||||
|
_pkgctl_aur_drop_from_repo_args=(
|
||||||
|
'(-f --force)'{-f,--force}'[Force push to the AUR overwriting the remote repository]'
|
||||||
|
'--no-disown[Do not disown the package on the AUR]'
|
||||||
|
'(-h --help)'{-h,--help}'[Display usage]'
|
||||||
|
'*:git_dir:_files -/'
|
||||||
|
)
|
||||||
|
|
||||||
_pkgctl_repo_cmds=(
|
_pkgctl_repo_cmds=(
|
||||||
"pkgctl repo command"
|
"pkgctl repo command"
|
||||||
"clone[Clone a package repository]"
|
"clone[Clone a package repository]"
|
||||||
|
@ -257,6 +269,7 @@ _devtools_completions_all_packages() {
|
||||||
|
|
||||||
_pkgctl_cmds=(
|
_pkgctl_cmds=(
|
||||||
"pkgctl command"
|
"pkgctl command"
|
||||||
|
"aur[Interact with the Arch User Repository (AUR)]"
|
||||||
"auth[Authenticate with services like GitLab]"
|
"auth[Authenticate with services like GitLab]"
|
||||||
"build[Build packages inside a clean chroot]"
|
"build[Build packages inside a clean chroot]"
|
||||||
"db[Pacman database modification for package update, move etc]"
|
"db[Pacman database modification for package update, move etc]"
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
pkgctl-aur-drop-from-repo(1)
|
||||||
|
============================
|
||||||
|
|
||||||
|
Name
|
||||||
|
----
|
||||||
|
pkgctl-aur-drop-from-repo - Drop a package from the official repository to the AUR
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
pkgctl aur drop-from-repo [OPTIONS] [PATH]...
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Drops a specified package from the official repositories to the Arch User
|
||||||
|
Repository.
|
||||||
|
|
||||||
|
This command requires a local Git clone of the package repository. It
|
||||||
|
reconfigures the repository for AUR compatibility and pushes it to the
|
||||||
|
AUR. Afterwards, the package is removed from the official repository.
|
||||||
|
|
||||||
|
By default, the package is automatically disowned in the AUR.
|
||||||
|
|
||||||
|
Options
|
||||||
|
-------
|
||||||
|
|
||||||
|
*--no-disown*::
|
||||||
|
Do not disown the package on the AUR
|
||||||
|
|
||||||
|
*-f, --force*::
|
||||||
|
Force push to the AUR overwriting the remote repository
|
||||||
|
|
||||||
|
*-h, --help*::
|
||||||
|
Show a help text
|
||||||
|
|
||||||
|
See Also
|
||||||
|
--------
|
||||||
|
|
||||||
|
linkman:pkgctl-db-remove[1]
|
||||||
|
|
||||||
|
include::include/footer.asciidoc[]
|
|
@ -0,0 +1,37 @@
|
||||||
|
pkgctl-aur(1)
|
||||||
|
=============
|
||||||
|
|
||||||
|
Name
|
||||||
|
----
|
||||||
|
pkgctl-aur - Interact with the Arch User Repository (AUR)
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
pkgctl aur [OPTIONS] [SUBCOMMAND]
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Provides a suite of tools designed for managing and interacting with the Arch
|
||||||
|
User Repository (AUR). It simplifies various tasks related to AUR, including
|
||||||
|
importing repositories, managing packages, and transitioning packages between
|
||||||
|
the official repositories and the AUR.
|
||||||
|
|
||||||
|
Options
|
||||||
|
-------
|
||||||
|
|
||||||
|
*-h, --help*::
|
||||||
|
Show a help text
|
||||||
|
|
||||||
|
Subcommands
|
||||||
|
-----------
|
||||||
|
|
||||||
|
pkgctl aur drop-from-repo::
|
||||||
|
Drop a package from the official repository to the AUR
|
||||||
|
|
||||||
|
See Also
|
||||||
|
--------
|
||||||
|
|
||||||
|
linkman:pkgctl-aur-drop-from-repo[1]
|
||||||
|
|
||||||
|
include::include/footer.asciidoc[]
|
|
@ -26,6 +26,9 @@ Options
|
||||||
Subcommands
|
Subcommands
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
pkgctl aur::
|
||||||
|
Interact with the Arch User Repository
|
||||||
|
|
||||||
pkgctl auth::
|
pkgctl auth::
|
||||||
Authenticate with services like GitLab
|
Authenticate with services like GitLab
|
||||||
|
|
||||||
|
@ -53,6 +56,7 @@ pkgctl version::
|
||||||
See Also
|
See Also
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
linkman:pkgctl-aur[1]
|
||||||
linkman:pkgctl-auth[1]
|
linkman:pkgctl-auth[1]
|
||||||
linkman:pkgctl-build[1]
|
linkman:pkgctl-build[1]
|
||||||
linkman:pkgctl-db[1]
|
linkman:pkgctl-db[1]
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
#!/hint/bash
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
[[ -z ${DEVTOOLS_INCLUDE_AUR_SH:-} ]] || return 0
|
||||||
|
DEVTOOLS_INCLUDE_AUR_SH=1
|
||||||
|
|
||||||
|
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
|
||||||
|
pkgctl_aur_usage() {
|
||||||
|
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
|
||||||
|
cat <<- _EOF_
|
||||||
|
Usage: ${COMMAND} [COMMAND] [OPTIONS]
|
||||||
|
|
||||||
|
Interact with the Arch User Repository (AUR).
|
||||||
|
|
||||||
|
Provides a suite of tools designed for managing and interacting with the Arch
|
||||||
|
User Repository (AUR). It simplifies various tasks related to AUR, including
|
||||||
|
importing repositories, managing packages, and transitioning packages between
|
||||||
|
the official repositories and the AUR.
|
||||||
|
|
||||||
|
COMMANDS
|
||||||
|
drop-from-repo Drop a package from the official repository to the AUR
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-h, --help Show this help text
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
$ ${COMMAND} drop-from-repo libfoo
|
||||||
|
_EOF_
|
||||||
|
}
|
||||||
|
|
||||||
|
pkgctl_aur() {
|
||||||
|
if (( $# < 1 )); then
|
||||||
|
pkgctl_aur_usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# option checking
|
||||||
|
while (( $# )); do
|
||||||
|
case $1 in
|
||||||
|
-h|--help)
|
||||||
|
pkgctl_aur_usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
drop-from-repo)
|
||||||
|
_DEVTOOLS_COMMAND+=" $1"
|
||||||
|
shift
|
||||||
|
# shellcheck source=src/lib/aur/drop-from-repo.sh
|
||||||
|
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/aur/drop-from-repo.sh
|
||||||
|
pkgctl_aur_drop_from_repo "$@"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
die "invalid argument: %s" "$1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
die "invalid command: %s" "$1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
|
@ -0,0 +1,166 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
[[ -z ${DEVTOOLS_INCLUDE_AUR_DROP_FROM_REPO_SH:-} ]] || return 0
|
||||||
|
DEVTOOLS_INCLUDE_AUR_DROP_FROM_REPO_SH=1
|
||||||
|
|
||||||
|
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
|
||||||
|
|
||||||
|
# shellcheck source=src/lib/common.sh
|
||||||
|
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
|
||||||
|
# shellcheck source=src/lib/db/remove.sh
|
||||||
|
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/db/remove.sh
|
||||||
|
# shellcheck source=src//lib/util/pacman.sh
|
||||||
|
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/pacman.sh
|
||||||
|
|
||||||
|
source /usr/share/makepkg/util/message.sh
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
|
||||||
|
pkgctl_aur_drop_from_repo_usage() {
|
||||||
|
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
|
||||||
|
cat <<- _EOF_
|
||||||
|
Usage: ${COMMAND} [OPTIONS] [PATH]...
|
||||||
|
|
||||||
|
Drops a specified package from the official repositories to the Arch
|
||||||
|
User Repository.
|
||||||
|
|
||||||
|
This command requires a local Git clone of the package repository. It
|
||||||
|
reconfigures the repository for AUR compatibility and pushes it to the
|
||||||
|
AUR. Afterwards, the package is removed from the official repository.
|
||||||
|
|
||||||
|
By default, the package is automatically disowned in the AUR.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
--no-disown Do not disown the package on the AUR
|
||||||
|
-f, --force Force push to the AUR overwriting the remote repository
|
||||||
|
-h, --help Show this help text
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
$ ${COMMAND} foo
|
||||||
|
$ ${COMMAND} --no-disown --force
|
||||||
|
_EOF_
|
||||||
|
}
|
||||||
|
|
||||||
|
pkgctl_aur_drop_from_repo() {
|
||||||
|
# options
|
||||||
|
local paths=()
|
||||||
|
local DISOWN=1
|
||||||
|
local FORCE=0
|
||||||
|
|
||||||
|
# variables
|
||||||
|
local path realpath pkgbase pkgrepo remote_url
|
||||||
|
|
||||||
|
while (( $# )); do
|
||||||
|
case $1 in
|
||||||
|
-h|--help)
|
||||||
|
pkgctl_aur_drop_from_repo_usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--no-disown)
|
||||||
|
DISOWN=0
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f|--force)
|
||||||
|
FORCE=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
die "Invalid argument: %s" "$1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
paths=("$@")
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# check if invoked without any path from within a packaging repo
|
||||||
|
if (( ${#paths[@]} == 0 )); then
|
||||||
|
if [[ -f PKGBUILD ]]; then
|
||||||
|
paths=(".")
|
||||||
|
else
|
||||||
|
pkgctl_aur_drop_from_repo_usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
for path in "${paths[@]}"; do
|
||||||
|
if ! realpath=$(realpath -e "${path}"); then
|
||||||
|
die "No such directory: ${path}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkgbase=$(basename "${realpath}")
|
||||||
|
pkgbase=${pkgbase%.git}
|
||||||
|
|
||||||
|
if [[ ! -d "${path}/.git" ]]; then
|
||||||
|
die "Not a Git repository: ${path}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pushd "${path}" >/dev/null
|
||||||
|
|
||||||
|
if [[ ! -f PKGBUILD ]]; then
|
||||||
|
die 'PKGBUILD not found in %s' "${path}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg "Dropping ${pkgbase} to the AUR"
|
||||||
|
|
||||||
|
remote_url="${AUR_URL_SSH}:${pkgbase}.git"
|
||||||
|
if ! git remote add origin "${remote_url}" &>/dev/null; then
|
||||||
|
git remote set-url origin "${remote_url}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# move the main branch to master
|
||||||
|
if [[ $(git symbolic-ref --quiet --short HEAD) == main ]]; then
|
||||||
|
git branch --move master
|
||||||
|
git config branch.master.merge refs/heads/master
|
||||||
|
git remote set-head origin master
|
||||||
|
fi
|
||||||
|
|
||||||
|
# auto generate .SRCINFO if not already present
|
||||||
|
if [[ -z "$(git ls-tree -r HEAD --name-only .SRCINFO)" ]]; then
|
||||||
|
stat_busy 'Generating .SRCINFO'
|
||||||
|
makepkg --printsrcinfo > .SRCINFO
|
||||||
|
stat_done
|
||||||
|
|
||||||
|
git add --force -- .SRCINFO
|
||||||
|
git commit --quiet --message "Adding .SRCINFO" -- .SRCINFO
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg "Pushing ${pkgbase} to the AUR"
|
||||||
|
if (( FORCE )); then
|
||||||
|
AUR_OVERWRITE=1 \
|
||||||
|
GIT_SSH_COMMAND="ssh -o SendEnv=AUR_OVERWRITE" \
|
||||||
|
git push --force origin master
|
||||||
|
else
|
||||||
|
git push origin master
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( DISOWN )); then
|
||||||
|
msg "Disowning ${pkgbase} on the AUR"
|
||||||
|
# shellcheck disable=SC2029
|
||||||
|
ssh "${AUR_URL_SSH}" disown "${pkgbase}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# auto-detection of the repo to remove from
|
||||||
|
if ! pkgrepo=$(get_pacman_repo_from_pkgbuild PKGBUILD); then
|
||||||
|
die 'Failed to get pacman repo'
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg "Deleting ${pkgbase} from the official repository"
|
||||||
|
if [[ -z "${pkgrepo}" ]]; then
|
||||||
|
warning 'Did not find %s in any repository, please delete manually' "${pkgbase}"
|
||||||
|
else
|
||||||
|
msg2 " repo: ${pkgrepo}"
|
||||||
|
pkgctl_db_remove "${pkgrepo}" "${pkgbase}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
done
|
||||||
|
}
|
|
@ -29,6 +29,7 @@ export GIT_PACKAGING_URL_SSH="git@${GITLAB_HOST}:${GIT_PACKAGING_NAMESPACE}"
|
||||||
export GIT_PACKAGING_URL_HTTPS="https://${GITLAB_HOST}/${GIT_PACKAGING_NAMESPACE}"
|
export GIT_PACKAGING_URL_HTTPS="https://${GITLAB_HOST}/${GIT_PACKAGING_NAMESPACE}"
|
||||||
export PACKAGING_REPO_RELEASE_HOST=repos.archlinux.org
|
export PACKAGING_REPO_RELEASE_HOST=repos.archlinux.org
|
||||||
export PKGBASE_MAINTAINER_URL=https://archlinux.org/packages/pkgbase-maintainer
|
export PKGBASE_MAINTAINER_URL=https://archlinux.org/packages/pkgbase-maintainer
|
||||||
|
export AUR_URL_SSH=aur@aur.archlinux.org
|
||||||
|
|
||||||
# check if messages are to be printed using color
|
# check if messages are to be printed using color
|
||||||
if [[ -t 2 && "$TERM" != dumb ]] || [[ ${DEVTOOLS_COLOR} == always ]]; then
|
if [[ -t 2 && "$TERM" != dumb ]] || [[ ${DEVTOOLS_COLOR} == always ]]; then
|
||||||
|
|
|
@ -19,6 +19,7 @@ usage() {
|
||||||
Unified command-line frontend for devtools.
|
Unified command-line frontend for devtools.
|
||||||
|
|
||||||
COMMANDS
|
COMMANDS
|
||||||
|
aur Interact with the Arch User Repository
|
||||||
auth Authenticate with services like GitLab
|
auth Authenticate with services like GitLab
|
||||||
build Build packages inside a clean chroot
|
build Build packages inside a clean chroot
|
||||||
db Pacman database modification for package update, move etc
|
db Pacman database modification for package update, move etc
|
||||||
|
@ -51,6 +52,14 @@ while (( $# )); do
|
||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
aur)
|
||||||
|
_DEVTOOLS_COMMAND+=" $1"
|
||||||
|
shift
|
||||||
|
# shellcheck source=src/lib/aur.sh
|
||||||
|
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/aur.sh
|
||||||
|
pkgctl_aur "$@"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
build)
|
build)
|
||||||
_DEVTOOLS_COMMAND+=" $1"
|
_DEVTOOLS_COMMAND+=" $1"
|
||||||
shift
|
shift
|
||||||
|
|
Loading…
Reference in New Issue