Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLevente Polyak <anthraxx@archlinux.org>2022-09-11 22:08:47 +0200
committerLevente Polyak <anthraxx@archlinux.org>2023-05-19 22:27:11 +0200
commit30616c4fdea37dda26c33d4f94052b99dba2401d (patch)
tree4ddfb16dcf3a59ecd3f2603ef75ca7939c9be8fb /src
parent5eb09a9cc931ca506875276dcd7b794395ba77d0 (diff)
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>
Diffstat (limited to 'src')
-rw-r--r--src/archco.in24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/archco.in b/src/archco.in
index b401c23..2804cba 100644
--- a/src/archco.in
+++ b/src/archco.in
@@ -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