Linux coreutils provides readlink, and BSD systems tend to have realpath
available. Both commands provide similar functionality but of course have
different names. Add a check for either and use what is available.

While doing this, also unify some of the differences that have cropped up
between repo-add and repo-remove.

Signed-off-by: Dan McGee <[EMAIL PROTECTED]>
---
 scripts/repo-add.sh.in    |   23 +++++++++++++++++------
 scripts/repo-remove.sh.in |   20 ++++++++++++++++----
 2 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index e90f0e8..53a7da5 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -103,8 +103,8 @@ write_list_entry() {
 #   arg1 - path to delta
 db_write_delta()
 {
-       # blank out all variables and set deltafile
-       local deltafile=$(readlink -f "$1")
+       # blank out all variables and set deltafile to absolute path
+       local deltafile=$($realpath "$1")
        local filename=$(basename "$deltafile")
        local deltavars pkgname fromver tover arch csize md5sum
 
@@ -134,8 +134,8 @@ db_write_delta()
 #   arg1 - path to package
 db_write_entry()
 {
-       # blank out all variables and set pkgfile
-       local pkgfile=$(readlink -f "$1")
+       # blank out all variables and set pkgfile to an absolute path
+       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 \
@@ -278,6 +278,16 @@ 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
+
 # source system and user makepkg.conf
 if [ -r "$confdir/makepkg.conf" ]; then
        source "$confdir/makepkg.conf"
@@ -304,7 +314,8 @@ for arg in "$@"; do
        elif [ "$arg" == "--quiet" -o "$arg" == "-q" ]; then
                QUIET=1
        elif [ -z "$REPO_DB_FILE" ]; then
-               REPO_DB_FILE=$(readlink -f "$arg")
+               # store absolute path to repo DB
+               REPO_DB_FILE=$($realpath "$arg")
                if ! test_repo_db_file; then
                        error "$(gettext "Repository file '%s' is not a proper 
pacman database.")" "$REPO_DB_FILE"
                        exit 1
@@ -331,7 +342,7 @@ done
 
 # if all operations were a success, re-zip database
 if [ $success -eq 1 ]; then
-       msg "$(gettext "Creating updated database file %s")" "$REPO_DB_FILE"
+       msg "$(gettext "Creating updated database file '%s'")" "$REPO_DB_FILE"
        pushd "$gstmpdir" 2>&1 >/dev/null
 
        if [ -n "$(ls)" ]; then
diff --git a/scripts/repo-remove.sh.in b/scripts/repo-remove.sh.in
index 08786ee..a650bcf 100644
--- a/scripts/repo-remove.sh.in
+++ b/scripts/repo-remove.sh.in
@@ -126,6 +126,16 @@ 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
+
 # source system and user makepkg.conf
 if [ -r "$confdir/makepkg.conf" ]; then
        source "$confdir/makepkg.conf"
@@ -149,9 +159,10 @@ for arg in "$@"; do
        if [ "$arg" == "--quiet" -o "$arg" == "-q" ]; then
                QUIET=1
        elif [ -z "$REPO_DB_FILE" ]; then
-               REPO_DB_FILE=$(readlink -f "$arg")
+               # store absolute path to repo DB
+               REPO_DB_FILE=$($realpath "$arg")
                if ! test_repo_db_file; then
-                       error "$(gettext "Repository file '%s' is not a proper 
pacman database.")\n" "$REPO_DB_FILE"
+                       error "$(gettext "Repository file '%s' is not a proper 
pacman database.")" "$REPO_DB_FILE"
                        exit 1
                elif [ -f "$REPO_DB_FILE" ]; then
                        msg "$(gettext "Extracting database to a temporary 
location...")"
@@ -170,12 +181,13 @@ done
 
 # if all operations were a success, re-zip database
 if [ $success -eq 1 ]; then
-       msg "$(gettext "Creating updated database file '%s'...")" 
"$REPO_DB_FILE"
+       msg "$(gettext "Creating updated database file '%s'")" "$REPO_DB_FILE"
        pushd "$gstmpdir" 2>&1 >/dev/null
 
        if [ -n "$(ls)" ]; then
                [ -f "${REPO_DB_FILE}.old" ] && rm "${REPO_DB_FILE}.old"
                [ -f "$REPO_DB_FILE" ] && mv "$REPO_DB_FILE" 
"${REPO_DB_FILE}.old"
+
                case "$DB_COMPRESSION" in
                        gz)  TAR_OPT="z" ;;
                        bz2) TAR_OPT="j" ;;
@@ -194,6 +206,6 @@ else
 fi
 
 # remove the temp directory used to unzip
-[ -d "$gstmpdir" ] && rm -rf $gstmpdir
+[ -d "$gstmpdir" ] && rm -rf "$gstmpdir"
 
 # vim: set ts=2 sw=2 noet:
-- 
1.5.5.3


_______________________________________________
pacman-dev mailing list
[email protected]
http://archlinux.org/mailman/listinfo/pacman-dev

Reply via email to