[pacman-dev] [PATCH] makepkg: replace basename emulation via sed with a bash substitution
Cedric Staniewski
cedric at gmx.ca
Tue Oct 20 09:44:00 EDT 2009
Allan McRae wrote:
> This is what you are looking for:
> size=${size%%[^0-9]*}
Wow, thanks a lot! Sometimes, it's just that easy. ;)
> I will pull this patch with those two minor changes to my working branch
> in the next couple of days.
I attached a new patch containing these two changes. The former one did not apply cleanly anyway due to a formatting error in its header.
>From d7b100ad2f58b1b39a5c42e24225c4b67122b010 Mon Sep 17 00:00:00 2001
From: Cedric Staniewski <cedric at gmx.ca>
Date: Sun, 18 Oct 2009 16:52:30 +0200
Subject: [PATCH] makepkg, repo-add: replace external commands with bash substitutions where possible
This also removes the awk dependency from makepkg and repo-add.
Signed-off-by: Cedric Staniewski <cedric at gmx.ca>
---
scripts/makepkg.sh.in | 39 +++++++++++++++++++++------------------
scripts/repo-add.sh.in | 6 ++++--
2 files changed, 25 insertions(+), 20 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 24fddf6..c48bb34 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -27,7 +27,7 @@
# makepkg uses quite a few external programs during its execution. You
# need to have at least the following installed for makepkg to function:
-# awk, bsdtar (libarchive), bzip2, coreutils, fakeroot, find (findutils),
+# bsdtar (libarchive), bzip2, coreutils, fakeroot, find (findutils),
# getopt (util-linux), gettext, grep, gzip, openssl, sed
# gettext initialization
@@ -188,15 +188,15 @@ trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR
# extract the filename from a source entry
get_filename() {
# if a filename is specified, use it
- local filename=$(echo $1 | sed 's|::.*||')
+ local filename="${1%%::*}"
# if it is just an URL, we only keep the last component
- echo "$filename" | sed 's|^.*://.*/||g'
+ echo "${filename##*/}"
}
# extract the URL from a source entry
get_url() {
# strip an eventual filename
- echo $1 | sed 's|.*::||'
+ echo "${1#*::}"
}
##
@@ -246,11 +246,11 @@ check_buildenv() {
# ? - not found
##
in_opt_array() {
- local needle=$(echo $1 | tr '[:upper:]' '[:lower:]'); shift
+ local needle="${1,,}"; shift
local opt
for opt in "$@"; do
- opt=$(echo $opt | tr '[:upper:]' '[:lower:]')
+ opt="${opt,,}"
if [ "$opt" = "$needle" ]; then
echo 'y' # Enabled
return
@@ -282,14 +282,14 @@ in_array() {
get_downloadclient() {
# $1 = URL with valid protocol prefix
local url=$1
- local proto=$(echo "$url" | sed 's|://.*||')
+ local proto="${url%%://*}"
# loop through DOWNLOAD_AGENTS variable looking for protocol
local i
for i in "${DLAGENTS[@]}"; do
- local handler=$(echo $i | sed 's|::.*||')
+ local handler="${i%%::*}"
if [ "$proto" = "$handler" ]; then
- agent=$(echo $i | sed 's|^.*::||')
+ agent="${i##*::}"
break
fi
done
@@ -302,7 +302,7 @@ get_downloadclient() {
fi
# ensure specified program is installed
- local program="$(echo $agent | awk '{print $1 }')"
+ local program="${agent%% *}"
if [ ! -x "$program" ]; then
local baseprog=$(basename $program)
error "$(gettext "The download program %s is not installed.")" "$baseprog"
@@ -321,7 +321,7 @@ download_file() {
# destination file
local file=$3
# temporary download file, default to last component of the URL
- local dlfile=$(echo "$url" | sed 's|^.*://.*/||g')
+ local dlfile="${url##*/}"
# replace %o by the temporary dlfile if it exists
if echo "$dlcmd" | grep -q "%o" ; then
@@ -431,7 +431,7 @@ remove_deps() {
local dep depstrip deplist
deplist=""
for dep in $pkgdeps; do
- depstrip=$(echo $dep | sed -e 's|=.*$||' -e 's|>.*$||' -e 's|<.*$||')
+ depstrip="${dep%%[<=>]*}"
deplist="$deplist $depstrip"
done
@@ -513,7 +513,7 @@ generate_checksums() {
local integ
for integ in ${INTEGRITY_CHECK[@]}; do
- integ="$(echo $integ | tr '[:upper:]' '[:lower:]')"
+ integ="${integ,,}"
case "$integ" in
md5|sha1|sha256|sha384|sha512) : ;;
*)
@@ -546,7 +546,8 @@ generate_checksums() {
fi
fi
- local sum="$(openssl dgst -${integ} "$file" | awk '{print $NF}')"
+ local sum="$(openssl dgst -${integ} "$file")"
+ sum=${sum##* }
[ $ct -gt 0 ] && echo -n "$indent"
echo -n "'$sum'"
ct=$(($ct+1))
@@ -591,8 +592,9 @@ check_checksums() {
fi
if [ $found -gt 0 ] ; then
- local expectedsum="$(echo ${integrity_sums[$idx]} | tr '[A-F]' '[a-f]')"
- local realsum="$(openssl dgst -${integ} "$file" | awk '{print $NF}')"
+ local expectedsum="${integrity_sums[$idx],,}"
+ local realsum="$(openssl dgst -${integ} "$file")"
+ realsum="${realsum##* }"
if [ "$expectedsum" = "$realsum" ]; then
echo "$(gettext "Passed")" >&2
else
@@ -882,7 +884,8 @@ write_pkginfo() {
else
local packager="Unknown Packager"
fi
- local size=$(du -sk | awk '{print $1 * 1024}')
+ local size="$(du -sk)"
+ size="$(( ${size%%[^0-9]*} * 1024 ))"
msg2 "$(gettext "Generating .PKGINFO file...")"
echo "# Generated by makepkg $myver" >.PKGINFO
@@ -1588,7 +1591,7 @@ if [ "$CLEANCACHE" -eq 1 ]; then
echo -n "$(gettext " Are you sure you wish to do this? ")"
echo -n "$(gettext "[Y/n]")"
read answer
- answer=$(echo $answer | tr '[:lower:]' '[:upper:]')
+ answer="${answer^^}"
if [ "$answer" = "$(gettext "YES")" -o "$answer" = "$(gettext "Y")" ]; then
rm "$SRCDEST"/*
if [ $? -ne 0 ]; then
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 2a62d2b..3f00441 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -136,7 +136,8 @@ db_write_delta()
echo -e "%DELTAS%" >>$deltas
fi
# get md5sum and compressed size of package
- md5sum="$(openssl dgst -md5 "$deltafile" | awk '{print $NF}')"
+ md5sum="$(openssl dgst -md5 "$deltafile")"
+ md5sum="${md5sum##* }"
csize=$(@SIZECMD@ "$deltafile")
oldfile=$(xdelta3 printhdr $deltafile | grep "XDELTA filename (source)" | sed 's/.*: *//')
@@ -213,7 +214,8 @@ db_write_entry()
IFS=$OLDIFS
# get md5sum and compressed size of package
- md5sum="$(openssl dgst -md5 "$pkgfile" | awk '{print $NF}')"
+ md5sum="$(openssl dgst -md5 "$pkgfile")"
+ md5sum="${md5sum##* }"
csize=$(@SIZECMD@ "$pkgfile")
# ensure $pkgname and $pkgver variables were found
--
1.6.5.1
More information about the pacman-dev
mailing list