]> git.saurik.com Git - apt.git/commitdiff
part revert, part redo 'which' replacement
authorDavid Kalnischkies <david@kalnischkies.de>
Sun, 6 Dec 2015 23:09:10 +0000 (00:09 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Sun, 6 Dec 2015 23:09:10 +0000 (00:09 +0100)
In e75e5879 'replace "which" with "command -v" for portability' I missed
that command -v isn't actually required to be available in debian, so
for the 5 files we are using it:

Two (abicheck/run_abi_test & test/integration/framework) are called in
environments were I believe sh is at least dash or 'better' as the first
one is "interactive" for apt developers and the later is sourced by ~200
tests in the same directory run by hand and ci-services â€“ for the later
we have pulled some uglier hacks for worser things already, so if there
should actually end up needing something more compatible we will notice
eventually (and the later actually had a command -v call for some time
already and nobody came running).

debian/rules and debian/apt.cron.daily I switched back to which as that
is more or less debian-specific or at least highly non-critical.

That leaves cmdline/apt-key.in with a bunch of calls where I will
implement that functionality in shell as this is relatively short-lived
as it is used to detect wget (for net-update, which Michael wants to
revive and in that process will properly use apt-helper instead of wget)
and to detect gpg vs. gpg2 systems, where the earlier is supposed to go
away in the longrun (or the later, but by replacing the earlier…).
[and this gpg/gpg2 detection is new in sid, so I have some sympathy for
that being a problem now.]

Thanks: Jakub Wilk for pointing out #747320

cmdline/apt-key.in
debian/apt.cron.daily
debian/rules

index 790859e2620e25697bef34c6e85bebb195b55350..f1d021e8ac2236031f49d0b0f458b5f8fa2c0e5a 100644 (file)
@@ -25,6 +25,21 @@ requires_root() {
        fi
 }
 
        fi
 }
 
+command_available() {
+    # command -v "$1" >/dev/null 2>&1 # not required by policy, see #747320
+    # which "$1" >/dev/null 2>&1 # is in debianutils (essential) but not on non-debian systems
+    local OLDIFS="$IFS"
+    IFS=:
+    for p in $PATH; do
+       if [ -x "${p}/${1}" ]; then
+           IFS="$OLDIFS"
+           return 0
+       fi
+    done
+    IFS="$OLDIFS"
+    return 1
+}
+
 get_fingerprints_of_keyring() {
     aptkey_execute "$GPG_SH" --keyring "$1" --with-colons --fingerprint | while read publine; do
        # search for a public key
 get_fingerprints_of_keyring() {
     aptkey_execute "$GPG_SH" --keyring "$1" --with-colons --fingerprint | while read publine; do
        # search for a public key
@@ -112,7 +127,7 @@ net_update() {
     fi
     # in theory we would need to depend on wget for this, but this feature
     # isn't useable in debian anyway as we have no keyring uri nor a master key
     fi
     # in theory we would need to depend on wget for this, but this feature
     # isn't useable in debian anyway as we have no keyring uri nor a master key
-    if ! command -v wget >/dev/null 2>&1; then
+    if ! command_available 'wget'; then
        echo >&2 "ERROR: an installed wget is required for a network-based update"
        exit 1
     fi
        echo >&2 "ERROR: an installed wget is required for a network-based update"
        exit 1
     fi
@@ -472,11 +487,11 @@ create_gpg_home() {
 prepare_gpg_home() {
     eval $(apt-config shell GPG_EXE Apt::Key::gpgcommand)
 
 prepare_gpg_home() {
     eval $(apt-config shell GPG_EXE Apt::Key::gpgcommand)
 
-    if [ -n "$GPG_EXE" ] && command -v "$GPG_EXE" >/dev/null 2>&1; then
+    if [ -n "$GPG_EXE" ] && command_available "$GPG_EXE"; then
        true
        true
-    elif command -v gpg >/dev/null 2>&1; then
+    elif command_available 'gpg'; then
        GPG_EXE="gpg"
        GPG_EXE="gpg"
-    elif command -v gpg2 >/dev/null 2>&1; then
+    elif command_available 'gpg2'; then
        GPG_EXE="gpg2"
     else
        echo >&2 "Error: gnupg or gnupg2 do not seem to be installed,"
        GPG_EXE="gpg2"
     else
        echo >&2 "Error: gnupg or gnupg2 do not seem to be installed,"
@@ -569,9 +584,9 @@ case "$command" in
     verify)
        GPGV=''
        eval $(apt-config shell GPGV Apt::Key::gpgvcommand)
     verify)
        GPGV=''
        eval $(apt-config shell GPGV Apt::Key::gpgvcommand)
-       if [ -n "$GPGV" ] && command -v "$GPGV" >/dev/null 2>&1; then true;
-       elif command -v gpgv >/dev/null 2>&1; then GPGV='gpgv';
-       elif command -v gpgv2 >/dev/null 2>&1; then GPGV='gpgv2';
+       if [ -n "$GPGV" ] && command_available "$GPGV"; then true;
+       elif command_available 'gpgv'; then GPGV='gpgv';
+       elif command_available 'gpgv2'; then GPGV='gpgv2';
        else
           echo >&2 'ERROR: gpgv or gpgv2 required for verification'
           exit 29
        else
           echo >&2 'ERROR: gpgv or gpgv2 required for verification'
           exit 29
index 978f06ab62831b2620d85e85844ba567ab66d6e3..765dd4ae4164ea9eadbd932344645ff6d07ddfaf 100644 (file)
@@ -324,7 +324,7 @@ check_power(){
     #       1 (false)   System is not on main power
     #       255 (false) Power status could not be determined
     # Desktop systems always return 255 it seems
     #       1 (false)   System is not on main power
     #       255 (false) Power status could not be determined
     # Desktop systems always return 255 it seems
-    if command -v on_ac_power >/dev/null 2>&1; then
+    if which on_ac_power >/dev/null; then
         on_ac_power
         POWER=$?
         if [ $POWER -eq 1 ]; then
         on_ac_power
         POWER=$?
         if [ $POWER -eq 1 ]; then
@@ -352,7 +352,7 @@ if test -r /var/lib/apt/extended_states; then
 fi
 
 # check apt-config existence
 fi
 
 # check apt-config existence
-if ! command -v apt-config >/dev/null 2>&1; then
+if ! which apt-config >/dev/null ; then
        exit 0
 fi
 
        exit 0
 fi
 
@@ -388,7 +388,7 @@ fi
 check_power || exit 0
 
 # check if we can lock the cache and if the cache is clean
 check_power || exit 0
 
 # check if we can lock the cache and if the cache is clean
-if command -v apt-get >/dev/null 2>&1 && ! eval apt-get check $XAPTOPT $XSTDERR ; then
+if which apt-get >/dev/null && ! eval apt-get check $XAPTOPT $XSTDERR ; then
     debug_echo "error encountered in cron job with \"apt-get check\"."
     exit 0
 fi
     debug_echo "error encountered in cron job with \"apt-get check\"."
     exit 0
 fi
@@ -451,7 +451,7 @@ UPDATE_STAMP=/var/lib/apt/periodic/update-stamp
 if check_stamp $UPDATE_STAMP $UpdateInterval; then
     if eval apt-get $XAPTOPT -y update $XSTDERR; then
        debug_echo "download updated metadata (success)."
 if check_stamp $UPDATE_STAMP $UpdateInterval; then
     if eval apt-get $XAPTOPT -y update $XSTDERR; then
        debug_echo "download updated metadata (success)."
-       if command -v dbus-send >/dev/null 2>&1 && pidof dbus-daemon >/dev/null; then
+       if which dbus-send >/dev/null && pidof dbus-daemon >/dev/null; then
            if dbus-send --system / app.apt.dbus.updated boolean:true ; then
                debug_echo "send dbus signal (success)"
            else
            if dbus-send --system / app.apt.dbus.updated boolean:true ; then
                debug_echo "send dbus signal (success)"
            else
@@ -487,7 +487,7 @@ fi
 
 # auto upgrade all upgradeable packages
 UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
 
 # auto upgrade all upgradeable packages
 UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
-if command -v unattended-upgrade >/dev/null 2>&1 && check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
+if which unattended-upgrade >/dev/null && check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
     if unattended-upgrade $XUUPOPT; then
        update_stamp $UPGRADE_STAMP
        debug_echo "unattended-upgrade (success)"
     if unattended-upgrade $XUUPOPT; then
        update_stamp $UPGRADE_STAMP
        debug_echo "unattended-upgrade (success)"
index db59d28987caff13bf18f9aee309b0a2c68bd79b..c8e7cb285bed743f8ac9afbae0e645d5ef86387d 100755 (executable)
@@ -24,7 +24,7 @@ confflags += --with-procs=$(PARALLEL)
 # See below
 -include build/environment.mak
 
 # See below
 -include build/environment.mak
 
-ifneq (,$(shell command -v dpkg-buildflags))
+ifneq (,$(shell which dpkg-buildflags))
   # make does not export to $(shell) so we need to workaround 
   # (http://savannah.gnu.org/bugs/?10593)
   dpkg_buildflags = DEB_BUILD_MAINT_OPTIONS=hardening=+all dpkg-buildflags
   # make does not export to $(shell) so we need to workaround 
   # (http://savannah.gnu.org/bugs/?10593)
   dpkg_buildflags = DEB_BUILD_MAINT_OPTIONS=hardening=+all dpkg-buildflags