[pacman-dev] [PATCH] repo-add: added a realpath implementation in bash
Yun Zheng Hu
yunzheng.hu at gmail.com
Tue Feb 10 17:33:10 EST 2009
When realpath or readlink is not available it will fallback to a
realpath implementation in bash. An extra check is also added for
"readlink -f", because not all platforms support the -f flag.
The readlink implementation in bash is borrowed from Debian's dpkg tools.
Signed-off-by: Yun Zheng Hu <yunzheng.hu at gmail.com>
---
scripts/repo-add.sh.in | 23 ++++++++++++++++++++---
1 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index c89e2a5..ea16731 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -297,11 +297,28 @@ fi
# check for and store the name of a realpath-like program
if [ $(type -t realpath) ]; then
realpath='realpath'
-elif [ $(type -t readlink) ]; then
+elif [ $(type -t readlink) -a "$(readlink -f . 2>/dev/null)" != "" ]; then
realpath='readlink -f'
else
- error "$(gettext "Either realpath or readlink are required by repo-add.")"
- exit 1 # $E_MISSING_PROGRAM
+ realpath_bash()
+ {
+ fname=${1%/} # strips trailing '/'
+ while [ -L "$fname" ]; do
+ oldfname="$fname"
+ fname="$(command ls -l $fname)"
+ fname="${fname#*\> }"
+ if [ "$fname" = . ] ; then
+ fname="$(dirname $oldfname)"
+ elif echo $fname | grep -vq '^/' - ; then
+ fname="$(dirname $oldfname)/$fname"
+ fi
+ done
+ pushd $(dirname $fname) > /dev/null
+ fname=$(pwd -P)/$(basename $fname)
+ popd > /dev/null
+ echo $fname
+ }
+ realpath=realpath_bash
fi
# main routine
--
1.6.1.2
More information about the pacman-dev
mailing list