From dc8047c3bb6f51be488126d9df378b3ed3b50bdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Sat, 20 May 2017 03:49:13 +0200 Subject: [PATCH] dom0-updates: restructure the script to not update metadata twice When `qubes-dom0-update --refresh` was called, the script checked metadata twice - once to check updates availability, then to actually download them. This two stage approach is needed only on Debian, when --downloadonly option is not supported. Rearrange code accordingly. Also, drop --doit option (ignore it), as the same (but more readable) can be achieved with --check-only. --- misc/qubes-download-dom0-updates.sh | 51 ++++++++++++----------------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/misc/qubes-download-dom0-updates.sh b/misc/qubes-download-dom0-updates.sh index 08c537a..33de94b 100755 --- a/misc/qubes-download-dom0-updates.sh +++ b/misc/qubes-download-dom0-updates.sh @@ -2,7 +2,6 @@ DOM0_UPDATES_DIR=/var/lib/qubes/dom0-updates -DOIT=0 GUI=1 CLEAN=0 CHECK_ONLY=0 @@ -17,7 +16,7 @@ export LC_ALL=C while [ -n "$1" ]; do case "$1" in --doit) - DOIT=1 + # ignore ;; --nogui) GUI=0 @@ -80,45 +79,30 @@ if [ "$CLEAN" = "1" ]; then rm -rf $DOM0_UPDATES_DIR/var/cache/yum/* fi -if [ "x$PKGLIST" = "x" ]; then +# just check for updates, but don't download any package +if [ "x$PKGLIST" = "x" -a "$CHECK_ONLY" = "1" ]; then echo "Checking for dom0 updates..." >&2 UPDATES_FULL=`$YUM $OPTS check-update` check_update_retcode=$? - UPDATES_FULL=`echo "$UPDATES_FULL" | grep -v "^Loaded plugins:\|^$"` if [ $check_update_retcode -eq 1 ]; then # Exit here if yum have reported an error. Exit code 100 isn't an # error, it's "updates available" info, so check specifically for exit code 1 exit 1 fi - UPDATES=`echo "$UPDATES_FULL" | grep -v "^Obsoleting\|Could not" | cut -f 1 -d ' '` - if [ -z "$UPDATES" -a $check_update_retcode -eq 100 ]; then - # save not empty string for below condition (-z "$UPDATES"), but blank - # to not confuse the user wwith magic strings in messages - UPDATES=" " + if [ $check_update_retcode -eq 100 ]; then + echo "Available updates: " + echo "$UPDATES_FULL" + exit 100 + else + echo "No new updates available" + if [ "$GUI" = 1 ]; then + zenity --info --text="No new updates available" + fi + exit 0 fi -else - PKGS_FROM_CMDLINE=1 -fi - -if [ -z "$PKGLIST" -a -z "$UPDATES" ]; then - echo "No new updates available" - if [ "$GUI" = 1 ]; then - zenity --info --text="No new updates available" - fi - exit 0 -fi - -if [ "$CHECK_ONLY" = "1" ]; then - echo "Available updates: " - echo "$UPDATES_FULL" - exit 100 -fi - -if [ "$DOIT" != "1" -a "$PKGS_FROM_CMDLINE" != "1" ]; then - zenity --question --title="Qubes Dom0 updates" \ - --text="There are updates for dom0 available, do you want to download them now?" || exit 0 fi +# now, we will download something YUM_COMMAND="fakeroot $YUM $YUM_ACTION -y --downloadonly" # check for --downloadonly option - if not supported (Debian), fallback to # yumdownloader @@ -132,6 +116,13 @@ if ! $YUM --help | grep -q downloadonly; then exit 1 fi if [ "$YUM_ACTION" = "upgrade" ]; then + UPDATES_FULL=`$YUM $OPTS check-update $PKGLIST` + check_update_retcode=$? + UPDATES=`echo "$UPDATES_FULL" | grep -v "^Obsoleting\|Could not" | cut -f 1 -d ' '` + if [ -z "$UPDATES" -a $check_update_retcode -eq 0 ]; then + echo "No new updates available" + exit 0 + fi PKGLIST=$UPDATES fi YUM_COMMAND="yumdownloader --destdir=$DOM0_UPDATES_DIR/packages --resolve"