archco: add option to clone all packages of a maintainer
Query Archweb to retrieve a list of all packages of a maintainer by their pkgbase. AFterwards loop through all packages and clone them. Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
This commit is contained in:
parent
5eb09a9cc9
commit
30616c4fde
|
@ -22,6 +22,7 @@ _archco_cmds=(
|
|||
)
|
||||
|
||||
_archco_clone_args=(
|
||||
'(-m --maintainer=)'{-m,--maintainer=}'[Clone all packages of the named maintainer]:maintainer:'
|
||||
'(-u --unprivileged)'{-u,--unprivileged}'[Read-only access without packager info as Git author]'
|
||||
'(-h --help)'{-h,--help}'[Display usage]'
|
||||
'*:packages:_devtools_completions_all_packages'
|
||||
|
|
|
@ -42,6 +42,11 @@ stat_busy() {
|
|||
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}...${ALL_OFF}" "$@" >&2
|
||||
}
|
||||
|
||||
stat_progress() {
|
||||
# shellcheck disable=2059
|
||||
printf "${BOLD}.${ALL_OFF}" >&2
|
||||
}
|
||||
|
||||
stat_done() {
|
||||
# shellcheck disable=2059
|
||||
printf "${BOLD}done${ALL_OFF}\n" >&2
|
||||
|
|
|
@ -46,6 +46,7 @@ usage_clone() {
|
|||
HTTPS.
|
||||
|
||||
OPTIONS
|
||||
-m, --maintainer=NAME Clone all packages of the named maintainer
|
||||
-u, --unprivileged Clone package with read-only access and without
|
||||
packager info as Git author.
|
||||
-h, --help Show this help text
|
||||
|
@ -127,6 +128,15 @@ if (( CLONE )); then
|
|||
UNPRIVILEGED=1
|
||||
shift
|
||||
;;
|
||||
-m|--maintainer)
|
||||
(( $# <= 1 )) && die "missing argument for %s" "$1"
|
||||
MAINTAINER="$2"
|
||||
shift 2
|
||||
;;
|
||||
--maintainer=*)
|
||||
MAINTAINER="${1#*=}"
|
||||
shift
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
|
@ -170,6 +180,8 @@ elif (( CONFIGURE )); then
|
|||
done
|
||||
fi
|
||||
|
||||
pkgbases=("$@")
|
||||
|
||||
# Load makepkg.conf variables to be available
|
||||
load_makepkg_config
|
||||
|
||||
|
@ -191,7 +203,17 @@ if (( ! UNPRIVILEGED )); then
|
|||
fi
|
||||
fi
|
||||
|
||||
pkgbases=("$@")
|
||||
# Query packages of a maintainer
|
||||
if [[ -n ${MAINTAINER} ]]; then
|
||||
stat_busy "Query packages for ${MAINTAINER}"
|
||||
max_pages=$(curl --silent --location --fail --retry 3 --retry-delay 3 "https://archlinux.org/packages/search/json/?sort=name&maintainer=${MAINTAINER}" | jq -r '.num_pages')
|
||||
mapfile -t pkgbases < <(for page in $(seq "${max_pages}"); do
|
||||
curl --silent --location --fail --retry 3 --retry-delay 3 "https://archlinux.org/packages/search/json/?sort=name&maintainer=${MAINTAINER}&page=${page}" | jq -r '.results[].pkgbase'
|
||||
stat_progress
|
||||
done | sort --unique)
|
||||
stat_done
|
||||
fi
|
||||
|
||||
for pkgbase in "${pkgbases[@]}"; do
|
||||
if (( CLONE )); then
|
||||
if [[ ! -d ${pkgbase} ]]; then
|
||||
|
|
Loading…
Reference in New Issue