[pacman-contrib] [PATCH v2] checkupdates: add option to download updates using -Swu

Eli Schwartz eschwartz at archlinux.org
Wed Apr 24 17:44:43 UTC 2019


This is safer than -Sywu, and should be included here for the same
reason we wish to encourage people not to use -Sy && -Qu.

Since an option was added, we now need option parsing, so I converted
over to using parseopts.

Signed-off-by: Eli Schwartz <eschwartz at archlinux.org>
---

v2: do not rely on libmakepkg, yet -- cf. discussion re: datarootdir vs.
getting libmakepkgdir from pkg-config.

 src/checkupdates.sh.in | 61 ++++++++++++++++++++++++++++++++++--------
 1 file changed, 50 insertions(+), 11 deletions(-)

diff --git a/src/checkupdates.sh.in b/src/checkupdates.sh.in
index 1d01fda..8eb6e21 100644
--- a/src/checkupdates.sh.in
+++ b/src/checkupdates.sh.in
@@ -21,19 +21,51 @@
 declare -r myname='checkupdates'
 declare -r myver='@PACKAGE_VERSION@'
 
+DOWNLOAD_CACHE=0
+
 m4_include(../lib/output_format.sh)
 m4_include(../lib/term_colors.sh)
+m4_include(../lib/parseopts.sh)
+
+usage() {
+	cat << __EOF__
+${myname} v${myver}
+
+Safely print a list of pending updates
+
+Usage: ${myname} [options]
+
+  Options:
+    -d, --download        download pending updates to the pacman cache.
+    -h, --help            display this help message and exit.
+
+Note: Export the "CHECKUPDATES_DB" variable to change the path of the temporary database.
 
-if (( $# > 0 )); then
-	echo "${myname} v${myver}"
-	echo
-	echo "Safely print a list of pending updates"
-	echo
-	echo "Usage: ${myname}"
-	echo
-	echo 'Note: Export the "CHECKUPDATES_DB" variable to change the path of the temporary database.'
-	exit 0
+__EOF__
+}
+
+OPT_SHORT='dh'
+OPT_LONG=('download' 'help')
+
+if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
+	exit 1
 fi
+set -- "${OPTRET[@]}"
+unset OPT_SHORT OPT_LONG OPTRET
+
+while :; do
+	case $1 in
+		-d|--download)
+			DOWNLOAD_CACHE=1 ;;
+		-h|--help)
+			usage
+			exit 0 ;;
+		--)
+			shift
+			break ;;
+	esac
+	shift
+done
 
 if ! type -P fakeroot >/dev/null; then
 	error 'Cannot find the fakeroot binary.'
@@ -57,8 +89,15 @@ if ! fakeroot -- pacman -Sy --dbpath "$CHECKUPDATES_DB" --logfile /dev/null &> /
        error 'Cannot fetch updates'
        exit 1
 fi
-pacman -Qu --dbpath "$CHECKUPDATES_DB" 2> /dev/null | grep -v '\[.*\]'
+mapfile -t updates < <(pacman -Qu --dbpath "$CHECKUPDATES_DB" 2> /dev/null | grep -v '\[.*\]')
 
-exit 0
+if (( ${#updates[@]} )); then
+	printf '%s\n' "${updates[@]}"
+	if (( DOWNLOAD_CACHE )); then
+		sudo pacman -Sw --noconfirm "${updates[@]%% *}" --dbpath "$CHECKUPDATES_DB" --logfile /dev/null
+	fi
+else
+	exit 1
+fi
 
 # vim: set noet:
-- 
2.21.0


More information about the pacman-contrib mailing list