Replaced readlink -f / realpath with a more portable bash implementation.

Signed-off-by: Yun Zheng Hu <[email protected]>
---
 scripts/repo-add.sh.in |   37 ++++++++++++++++++++++++-------------
 1 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index c89e2a5..f266719 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -107,7 +107,7 @@ write_list_entry() {
 db_write_delta()
 {
        # blank out all variables and set deltafile to absolute path
-       local deltafile=$($realpath "$1")
+       local deltafile=$(realpath "$1")
        local filename=$(basename "$deltafile")
        local deltavars pkgname fromver tover arch csize md5sum

@@ -138,7 +138,7 @@ db_write_delta()
 db_write_entry()
 {
        # blank out all variables and set pkgfile to an absolute path
-       local pkgfile=$($realpath "$1")
+       local pkgfile=$(realpath "$1")
        local pkgname pkgver pkgdesc url builddate packager csize size \
                group depend backup license replaces provides conflict force \
                _groups _depends _backups _licenses _replaces _provides 
_conflicts \
@@ -267,6 +267,27 @@ db_remove_entry() {
        popd 2>&1 >/dev/null
 } # end db_remove_entry

+# bash implementation of realpath / readlink -f
+#   arg1 - filename
+realpath()
+{
+       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
+}
+
 # PROGRAM START

 # determine whether we have gettext; make it a no-op if we do not
@@ -294,16 +315,6 @@ if [ $# -lt 2 ]; then
        exit 1
 fi

-# check for and store the name of a realpath-like program
-if [ $(type -t realpath) ]; then
-       realpath='realpath'
-elif [ $(type -t readlink) ]; then
-       realpath='readlink -f'
-else
-       error "$(gettext "Either realpath or readlink are required by 
repo-add.")"
-       exit 1 # $E_MISSING_PROGRAM
-fi
-
 # main routine
 gstmpdir=$(mktemp -d /tmp/repo-tools.XXXXXXXXXX) || (\
        error "$(gettext "Cannot create temp directory for database 
building.")"; \
@@ -326,7 +337,7 @@ for arg in "$@"; do
                QUIET=1
        elif [ -z "$REPO_DB_FILE" ]; then
                # store absolute path to repo DB
-               REPO_DB_FILE=$($realpath "$arg")
+               REPO_DB_FILE=$(realpath "$arg")
                if [ -f "$REPO_DB_FILE" ]; then
                        if ! test_repo_db_file $cmd; then
                                error "$(gettext "Repository file '%s' is not a 
proper pacman
database.")" "$REPO_DB_FILE"
-- 
1.6.1.2
_______________________________________________
pacman-dev mailing list
[email protected]
http://www.archlinux.org/mailman/listinfo/pacman-dev

Reply via email to