index : checker | |
Archlinux32 consistency checker | gitolite user |
summaryrefslogtreecommitdiff |
author | Andreas Baumann <mail@andreasbaumann.cc> | 2024-09-19 15:23:25 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2024-09-19 15:23:25 +0200 |
commit | b98887e1a4f044e13ba15a09486f615672ba472a (patch) | |
tree | bbbf1a94b9150a48068988b7b72d41dc71a94d3b /bin/update | |
parent | c8f372b24fef9c52e93c85f90df59ec2a1511b4a (diff) |
-rwxr-xr-x | bin/update | 131 |
@@ -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 |