[pacman-dev] [PATCH 2/2] Save path to Pacman, which could be lost during --syncdeps operation
Dave Reisner
d at falconindy.com
Fri Nov 2 21:57:48 EDT 2012
On Wed, Oct 31, 2012 at 07:06:13AM +0000, Martin Panter wrote:
> Unmangled version: https://github.com/vadmium/pacman-arch/commit/b984a8b.patch
>
> Turns out it wasn’t too hard to allow spaces in the path returned from
> “command -v”, while handling any extra arguments.
>
> From b984a8b2cb3daa05177420d1a9d83648d6c0aa0d Mon Sep 17 00:00:00 2001
> From: Martin Panter <vadmium à gmail·com>
> Date: Wed, 31 Oct 2012 02:45:36 +0000
> Subject: [PATCH] Save path to Pacman, which could be lost during --syncdeps
> operation
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> Access to the Pacman command could be lost when /etc/profile is invoked and
> $PATH is reset. Tested to make sure the following scenarios behave sensibly,
> where “roopwn” is in ~/bin/:
>
> PACMAN="pacman --config /etc/pacman.conf" makepkg --syncdeps --install
> PACMAN="nonexistent --dummy" makepkg --syncdeps --install
> PACMAN="nonexistent --dummy" makepkg
> PACMAN="roopwn --verbose" makepkg --syncdeps --install
NAK'ing this as well, based on feedback from the prior patch. This is
the wrong approach to extending invocations to pacman.
> ---
> scripts/makepkg.sh.in | 25 +++++++++++++++----------
> 1 file changed, 15 insertions(+), 10 deletions(-)
>
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 3b4f27f..2b224b8 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -873,9 +873,9 @@ source_has_signatures() {
> run_pacman() {
> local cmd
> if [[ ! $1 = -@(T|Qq) ]]; then
> - cmd=($PACMAN $PACMAN_OPTS "$@")
> + cmd=("${PACMAN[@]}" $PACMAN_OPTS "$@")
> else
> - cmd=($PACMAN "$@")
> + cmd=("${PACMAN[@]}" "$@")
> fi
> if (( ! ASROOT )) && [[ ! $1 = -@(T|Qq) ]]; then
> if type -p sudo >/dev/null; then
> @@ -898,7 +898,7 @@ check_deps() {
> if (( ret == 127 )); then #unresolved deps
> printf "%s\n" "$pmout"
> elif (( ret )); then
> - error "$(gettext "'%s' returned a fatal error (%i): %s")" "$PACMAN"
> "$ret" "$pmout"
> + error "$(gettext "'%s' returned a fatal error (%i): %s")"
> "${PACMAN[*]}" "$ret" "$pmout"
> return "$ret"
> fi
> }
> @@ -920,7 +920,7 @@ handle_deps() {
> msg "$(gettext "Installing missing dependencies...")"
>
> if ! run_pacman -S --asdeps $deplist; then
> - error "$(gettext "'%s' failed to install missing dependencies.")" "$PACMAN"
> + error "$(gettext "'%s' failed to install missing dependencies.")"
> "${PACMAN[*]}"
> exit 1 # TODO: error code
> fi
> fi
> @@ -1899,9 +1899,9 @@ install_package() {
> (( ! INSTALL )) && return
>
> if (( ! SPLITPKG )); then
> - msg "$(gettext "Installing package %s with %s...")" "$pkgname" "$PACMAN -U"
> + msg "$(gettext "Installing package %s with %s...")" "$pkgname"
> "${PACMAN[*]} -U"
> else
> - msg "$(gettext "Installing %s package group with %s...")"
> "$pkgbase" "$PACMAN -U"
> + msg "$(gettext "Installing %s package group with %s...")"
> "$pkgbase" "${PACMAN[*]} -U"
> fi
>
> local fullver pkgarch pkg pkglist
> @@ -2457,8 +2457,9 @@ if [[ $MAKEPKG_CONF = "$confdir/makepkg.conf" &&
> -r ~/.makepkg.conf ]]; then
> source_safe ~/.makepkg.conf
> fi
>
> -# set pacman command if not already defined
> -PACMAN=${PACMAN:-pacman}
> +# Set pacman command if not already defined. Convert to Bash array so that
> +# spaces can be included in the path while any arguments are retained.
> +PACMAN=(${PACMAN:-pacman})
>
> # check if messages are to be printed using color
> unset ALL_OFF BOLD BLUE GREEN RED YELLOW
> @@ -2728,7 +2729,11 @@ if (( NODEPS || (NOBUILD && !DEP_BIN ) )); then
> if (( NODEPS )); then
> warning "$(gettext "Skipping dependency checks.")"
> fi
> -elif type -p "${PACMAN%% *}" >/dev/null; then
> +elif output="$(command -v "$PACMAN")"; then
> + # Save full path to Pacman in case the --syncdeps operation modifies
> + # the $PATH and makes it inaccessible
> + PACMAN="$output"
> +
> if (( RMDEPS && ! INSTALL )); then
> original_pkglist=($(run_pacman -Qq)) # required by remove_dep
> fi
> @@ -2757,7 +2762,7 @@ elif type -p "${PACMAN%% *}" >/dev/null; then
> exit 1
> fi
> else
> - warning "$(gettext "%s was not found in %s; skipping dependency
> checks.")" "${PACMAN%% *}" "PATH"
> + warning "$(gettext "%s was not found in %s; skipping dependency
> checks.")" "$PACMAN" "PATH"
> fi
>
> # ensure we have a sane umask set
> --
> 1.7.12
>
More information about the pacman-dev
mailing list