Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/src/lib/api/archweb.sh
diff options
context:
space:
mode:
authorLevente Polyak <anthraxx@archlinux.org>2023-12-03 19:46:09 +0100
committerLevente Polyak <anthraxx@archlinux.org>2023-12-03 21:51:59 +0100
commitf2cafa3cb0941be8235025434620adbf5849a432 (patch)
tree908ea4208915dfbc0b3af59e16cb2dcc21de009b /src/lib/api/archweb.sh
parentc356995dc19b3dfe944920a5864f9d3ffd5f9b6f (diff)
feat(clone): speedup maintainer and universe clone query
There is a single endpoint now to list all pkgbases and their current maintainers. Use this endpoint for speeding up the clone of all packages of a maintainer by only issuing a single API call. Component: pkgctl repo clone Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
Diffstat (limited to 'src/lib/api/archweb.sh')
-rw-r--r--src/lib/api/archweb.sh57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/lib/api/archweb.sh b/src/lib/api/archweb.sh
new file mode 100644
index 0000000..34c7a9c
--- /dev/null
+++ b/src/lib/api/archweb.sh
@@ -0,0 +1,57 @@
+#!/hint/bash
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+[[ -z ${DEVTOOLS_INCLUDE_API_ARCHWEB_SH:-} ]] || return 0
+DEVTOOLS_INCLUDE_API_ARCHWEB_SH=1
+
+_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
+# shellcheck source=src/lib/common.sh
+source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
+
+set -e
+set -o pipefail
+
+
+archweb_query_all_packages() {
+ [[ -z ${WORKDIR:-} ]] && setup_workdir
+
+ stat_busy "Query all released packages"
+ mapfile -t pkgbases < <(
+ curl --location --show-error --no-progress-meter --fail --retry 3 --retry-delay 3 \
+ "${PKGBASE_MAINTAINER_URL}" 2> "${WORKDIR}/error" \
+ | jq --raw-output --exit-status 'keys[]' 2> "${WORKDIR}/error"
+ )
+ if ! wait $!; then
+ stat_failed
+ print_workdir_error
+ return 1
+ fi
+ stat_done
+
+ printf "%s\n" "${pkgbases[@]}"
+ return 0
+}
+
+
+archweb_query_maintainer_packages() {
+ local maintainer=$1
+
+ [[ -z ${WORKDIR:-} ]] && setup_workdir
+
+ stat_busy "Query maintainer packages"
+ mapfile -t pkgbases < <(
+ curl --location --show-error --no-progress-meter --fail --retry 3 --retry-delay 3 \
+ "${PKGBASE_MAINTAINER_URL}" 2> "${WORKDIR}/error" \
+ | jq --raw-output --exit-status '. as $parent | keys[] | select(. as $key | $parent[$key] | index("'"${maintainer}"'"))' 2> "${WORKDIR}/error"
+ )
+ if ! wait $!; then
+ stat_failed
+ print_workdir_error
+ return 1
+ fi
+ stat_done
+
+ printf "%s\n" "${pkgbases[@]}"
+ return 0
+}