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=(
|
||||
aur
|
||||
auth
|
||||
build
|
||||
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_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=(
|
||||
clone
|
||||
|
@ -308,7 +320,6 @@ _pkgctl_repo_create_args=(
|
|||
-h --help
|
||||
)
|
||||
|
||||
|
||||
_pkgctl_repo_switch_args=(
|
||||
--discard-changes
|
||||
-f --force
|
||||
|
|
|
@ -96,6 +96,18 @@ _pkgctl_release_args=(
|
|||
'*: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 command"
|
||||
"clone[Clone a package repository]"
|
||||
|
@ -257,6 +269,7 @@ _devtools_completions_all_packages() {
|
|||
|
||||
_pkgctl_cmds=(
|
||||
"pkgctl command"
|
||||
"aur[Interact with the Arch User Repository (AUR)]"
|
||||
"auth[Authenticate with services like GitLab]"
|
||||
"build[Build packages inside a clean chroot]"
|
||||
"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
|
||||
-----------
|
||||
|
||||
pkgctl aur::
|
||||
Interact with the Arch User Repository
|
||||
|
||||
pkgctl auth::
|
||||
Authenticate with services like GitLab
|
||||
|
||||
|
@ -53,6 +56,7 @@ pkgctl version::
|
|||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-aur[1]
|
||||
linkman:pkgctl-auth[1]
|
||||
linkman:pkgctl-build[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 PACKAGING_REPO_RELEASE_HOST=repos.archlinux.org
|
||||
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
|
||||
if [[ -t 2 && "$TERM" != dumb ]] || [[ ${DEVTOOLS_COLOR} == always ]]; then
|
||||
|
|
|
@ -19,6 +19,7 @@ usage() {
|
|||
Unified command-line frontend for devtools.
|
||||
|
||||
COMMANDS
|
||||
aur Interact with the Arch User Repository
|
||||
auth Authenticate with services like GitLab
|
||||
build Build packages inside a clean chroot
|
||||
db Pacman database modification for package update, move etc
|
||||
|
@ -51,6 +52,14 @@ while (( $# )); do
|
|||
usage
|
||||
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)
|
||||
_DEVTOOLS_COMMAND+=" $1"
|
||||
shift
|
||||
|
|
Loading…
Reference in New Issue