Replaced readlink -f / realpath with a more portable bash implementation. Signed-off-by: Yun Zheng Hu <yunzheng.hu@gmail.com> --- 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