Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/bin/update
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2024-09-19 15:23:25 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2024-09-19 15:23:25 +0200
commitb98887e1a4f044e13ba15a09486f615672ba472a (patch)
treebbbf1a94b9150a48068988b7b72d41dc71a94d3b /bin/update
parentc8f372b24fef9c52e93c85f90df59ec2a1511b4a (diff)
can read package list from the AUR, also checking if missing pacakges have been dropped to the AUR
Diffstat (limited to 'bin/update')
-rwxr-xr-xbin/update131
1 files changed, 105 insertions, 26 deletions
diff --git a/bin/update b/bin/update
index 7be65a1..99fea78 100755
--- a/bin/update
+++ b/bin/update
@@ -3,6 +3,54 @@
BASE="${0%/*}/.."
. "${BASE}/conf/default.conf"
+UPATE_UPSTREAM=0
+UPDATE_AUR=0
+STATS=0
+OPTIONS=`getopt -n update -o huas -l help,upstream,aur,stats -- "$@"`
+if test $? != 0; then
+ echo "ERROR: internal error which using getopt.." >&2;
+ exit 1
+fi
+eval set -- "$OPTIONS"
+while true; do
+ case "$1" in
+ -h|--help)
+ echo "update [options]"
+ echo ""
+ echo "-u --upstream update from update git state and package repo"
+ echo "-a --aur update from the AUR"
+ echo "-s --stats compute and print statistics"
+ exit 0
+ ;;
+
+ -u|--uptream)
+ UPDATE_UPSTREAM=1
+ shift
+ ;;
+
+ -a|--aur)
+ UPDATE_AUR=1
+ shift
+ ;;
+
+ -s|--status)
+ STATS=1
+ shift
+ ;;
+
+ --)
+ shift
+ break
+ ;;
+
+ *)
+ echo "ERROR: Internal error in getopt" >&2
+ exit 1
+ esac
+done
+
+shift `expr $OPTIND - 1`
+
if test ! -d "${state_dir}"; then
echo "no upstream git state repo of packages.. exiting.."
exit 1
@@ -13,38 +61,69 @@ if test ! -d "${packages_dir}"; then
exit 1
fi
-echo "Updating main state git repo.."
+if test ! -d "${aur_state_dir}"; then
+ echo "no AUR state directory exists of .. exiting.."
+ exit 1
+fi
+
+if test "${UPDATE_UPSTREAM}" = 1; then
+ echo "Updating main state git repo.."
+
+ git -C "${state_dir}" pull
-git -C "${state_dir}" pull
+ if test "${STATS}" = 1; then
+ echo "Checking statistics.."
-echo "Checking statistics.."
+ find "${state_dir}"/{core,extra}-{any,x86_64} -type f > /tmp/update_packages.$$
+ nof_packages=`cat /tmp/update_packages.$$ | wc -l`
+ nof_checked_out_packages=`find "${packages_dir}" -type f -name PKGBUILD | wc -l`
-find "${state_dir}"/{core,extra}-{any,x86_64} -type f > /tmp/update_packages.$$
-nof_packages=`cat /tmp/update_packages.$$ | wc -l`
+ echo "${nof_packages} packages in state repo"
+ echo "${nof_checked_out_packages} packages are checked out"
-nof_checked_out_packages=`find "${packages_dir}" -type f -name PKGBUILD | wc -l`
+ sleep 10
+ fi
-echo "${nof_packages} packages in state repo"
-echo "${nof_checked_out_packages} packages are checked out"
+ for pkgfile in `cat /tmp/update_packages.$$`; do
+ repo=`echo "${pkgfile}" | rev | cut -f 2 -d / | rev`
+ OLDIFS="$IFS"
+ IFS=" "
+ while read pkgname pkgver tag revision; do
+ echo "${repo} ${pkgname}"
+ if test ! -d "${packages_dir}/${repo}/${pkgname}"; then
+ cd "${packages_dir}/${repo}" || exit 1
+ pkgctl repo clone --protocol=https "${pkgname}"
+ sleep 10
+ else
+ true
+# TODO: find a way to find out whether the reference revision is in out
+# current state repo and update only when we miss it. We can still
+# do a full update when we need it, but here it just creates a lot
+# of load..
+# git -C "${packages_dir}/${repo}/${pkgname}" pull
+ fi
+ done < $pkgfile
+ IFS="$OLDIFS"
+ done
+fi
-sleep 10
+if test "${UPDATE_AUR}" = 1; then
+ echo "Updating AUR state.."
+
+ rm -f "${aur_state_dir}/packages"
+ wget --quiet -O "${aur_state_dir}/packages.gz" https://aur.archlinux.org/packages.gz
+ gunzip "${aur_state_dir}/packages.gz"
+
+ if test "${STATS}" = 1; then
+ echo "Checking statistics.."
+
+ nof_aur_packages=`wc -l ${aur_state_dir}/packages | cut -f 1 -d ' '`
+
+ echo "${nof_aur_packages} packages in AUR"
+
+ sleep 10
+ fi
+fi
-for pkgfile in `cat /tmp/update_packages.$$`; do
- repo=`echo "${pkgfile}" | rev | cut -f 2 -d / | rev`
- OLDIFS="$IFS"
- IFS=" "
- while read pkgname pkgver tag revision; do
- echo "${repo} ${pkgname}"
- if test ! -d "${packages_dir}/${repo}/${pkgname}"; then
- cd "${packages_dir}/${repo}" || exit 1
- pkgctl repo clone --protocol=https "${pkgname}"
- sleep 10
- else
- true
-# git -C "${packages_dir}/${repo}/${pkgname}" pull
- fi
- done < $pkgfile
- IFS="$OLDIFS"
-done
# TODO: update all single package directories
# TODO: update all AUR package directories