[pacman-dev] [PATCH] makepkg: canonicalize paths from environmental variables
Dan McGee
dpmcgee at gmail.com
Mon Oct 4 07:57:17 EDT 2010
On Mon, Oct 4, 2010 at 5:28 AM, Dave Reisner <d at falconindy.com> wrote:
> On Mon, Oct 04, 2010 at 03:01:50PM +1000, Allan McRae wrote:
>> This prevents circular symlinks and weird final package locations
>> when using commands like 'PKGDEST="." makepkg'.
>>
>> Fixes FS#20922.
>>
>> Signed-off-by: Allan McRae <allan at archlinux.org>
>> ---
>> scripts/makepkg.sh.in | 21 +++++++++++++++++----
>> 1 files changed, 17 insertions(+), 4 deletions(-)
>>
>> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
>> index 9bcd446..ccf4213 100644
>> --- a/scripts/makepkg.sh.in
>> +++ b/scripts/makepkg.sh.in
>> @@ -1410,6 +1410,19 @@ run_split_packaging() {
>> done
>> }
>>
>> +# Canonicalize a path if it exists
>> +canonicalize_path() {
>> + local path=$1;
>> +
>> + if [[ -d $path ]]; then
>> + cd $path
>> + path=$(pwd)
>> + cd - &>/dev/null
>> + fi
>> +
>> + echo $path
>> +}
>> +
>> # getopt like parser
>> parse_options() {
>> local short_options=$1; shift;
>> @@ -1615,10 +1628,10 @@ while true; do
>> shift
>> done
>>
>> -#preserve environment variables
>> -_PKGDEST=${PKGDEST}
>> -_SRCDEST=${SRCDEST}
>> -_SRCPKGDEST=${SRCPKGDEST}
>> +# preserve environment variables and canonicalize path
>> +[[ -n ${PKGDEST} ]] && _PKGDEST=$(canonicalize_path ${PKGDEST})
>> +[[ -n ${SRCDEST} ]] && _SRCDEST=$(canonicalize_path ${SRCDEST})
>> +[[ -n ${SRCPKGDEST} ]] && _SRCPKGDEST=$(canonicalize_path ${SRCPKGDEST})
>>
>> # default config is makepkg.conf
>> MAKEPKG_CONF=${MAKEPKG_CONF:-$confdir/makepkg.conf}
>> --
>> 1.7.3.1
>>
>>
>>
>
> Your cd inside the if needs quoting, and you can get away with just
> referencing $PWD instead of forking to pwd (GNU coreutils just returns
> $PWD anyways). However, using pwd might have an advantage. The -P flag
> will resolve symlinks, and it seems to be common in other 'nixes. This
> would solve the case of multiple nested symlinks.
pwd is actually a shell builtin, no? I agree with the quoting
suggestions, and also wonder if it is worth using a subshell construct
here so you don't even have to worry about the 'cd -' business.
$ type pwd
pwd is a shell builtin
-Dan
More information about the pacman-dev
mailing list