[arch-projects] [ABS][PATCH] Bashify and quoting
Sébastien Luttringer
seblu at seblu.net
Fri Apr 6 10:58:30 EDT 2012
Thanks to Lukas Fleischer for review
Signed-off-by: Sébastien Luttringer <seblu at seblu.net>
---
abs | 80 +++++++++++++++++++++++-----------------------
makeworld | 50 ++++++++++++++---------------
scripts/svn2abs | 84 ++++++++++++++++++++++++-------------------------
scripts/update-abs.sh | 22 ++++++-------
4 files changed, 118 insertions(+), 118 deletions(-)
diff --git a/abs b/abs
index 39d5798..25a3e1d 100755
--- a/abs
+++ b/abs
@@ -22,8 +22,8 @@
##
# Constants
##
-ABS_VERSION="%%ABS_VERSION%%"
-CONFDIR="%%CONF_DIR%%"
+ABS_VERSION='%%ABS_VERSION%%'
+CONFDIR='%%CONF_DIR%%'
SYNCCMD='rsync'
SYNCARGS='-mrtv --no-motd --delete-after --no-p --no-o --no-g'
BUG_REPORT_EMAIL=pacman-dev at archlinux.org
@@ -57,7 +57,7 @@ error() {
##
# Source configuration
##
-if [ -f "$CONFDIR/abs.conf" ]; then
+if [[ -f $CONFDIR/abs.conf ]]; then
source "$CONFDIR/abs.conf"
else
error "Could not find configuration file $CONFDIR/abs.conf"
@@ -67,23 +67,23 @@ fi
##
# User based overrides
##
-[ -f ~/.abs.conf ] && source ~/.abs.conf
+[[ -f ~/.abs.conf ]] && source ~/.abs.conf
##
# Helper functions
##
usage() {
echo "Arch Build System $ABS_VERSION -- synchronization utility"
- echo ""
- echo "Usage:"
+ echo
+ echo 'Usage:'
echo "$0 [options] [repository1[/package1] [repository2[/package2] ...]]"
echo
- echo "Options:"
- echo " -h, --help Display this help message then exit."
- echo " -V, --version Display version information then exit."
- echo " -t, --tarball Sync ABS tree using tarballs from your pacman mirror."
+ echo 'Options:'
+ echo ' -h, --help Display this help message then exit.'
+ echo ' -V, --version Display version information then exit.'
+ echo ' -t, --tarball Sync ABS tree using tarballs from your pacman mirror.'
echo
- echo "abs will synchronize PKGBUILD scripts from the Arch Linux repositories"
+ echo 'abs will synchronize PKGBUILD scripts from the Arch Linux repositories'
echo "into $ABSROOT via rsync. If no argument is given, abs will synchronize"
echo "the repositories specified in ${CONFDIR}abs.conf."
echo
@@ -93,11 +93,11 @@ usage() {
version() {
echo "abs $ABS_VERSION"
echo
- echo "Copyright (C) 2002-2007 Judd Vinet <jvinet at zeroflux.org>"
- echo "Copyright (C) 2007-2010 Aaron Griffin <aaron at archlinux.org>"
+ echo 'Copyright (C) 2002-2007 Judd Vinet <jvinet at zeroflux.org>'
+ echo 'Copyright (C) 2007-2010 Aaron Griffin <aaron at archlinux.org>'
echo
- echo "This is free software; see the source for copying conditions."
- echo "There is NO WARRANTY, to the extent permitted by law."
+ echo 'This is free software; see the source for copying conditions.'
+ echo 'There is NO WARRANTY, to the extent permitted by law.'
}
update_rsync() {
@@ -105,15 +105,15 @@ update_rsync() {
cd "$ABSROOT"
- if [ ! "$(type -p rsync)" ]; then
- error "missing rsync synchronization utility. Install rsync."
+ if [[ -z $(type -p rsync) ]]; then
+ error 'missing rsync synchronization utility. Install rsync.'
exit $_E_MISSING_PROGRAM
fi
- if [ "$CLPARAM" = "" ]; then
+ if [[ -z $CLPARAM ]]; then
# using repos specified in abs.conf
for repo in "${REPOS[@]}"; do
- if [ "$repo" != "${repo#!}" ]; then
+ if [[ "$repo" != "${repo#!}" ]]; then
EXCLUDE="${EXCLUDE} --filter=-_/${repo#!}/"
fi
done
@@ -124,7 +124,7 @@ update_rsync() {
# using repos/packages specified on the command line
for param in "${REPOS[@]}"; do
INCLUDE="${INCLUDE} --include=/${param}"
- if [ "$param" != "${param/\/}" ]; then
+ if [[ "$param" != "${param/\/}" ]]; then
repo=${param%/*}
INCLUDE="${INCLUDE} --include=/${repo}"
EXCLUDE="${EXCLUDE} --exclude=/${repo}/*"
@@ -132,55 +132,55 @@ update_rsync() {
done
# remove duplicate values
- INCLUDE=$(echo $INCLUDE | tr " " "\n" | sort -u | tr "\n" " ")
+ INCLUDE=$(echo $INCLUDE | tr ' ' '\n' | sort -u | tr '\n' ' ')
EXCLUDE="${EXCLUDE} --exclude=/*"
fi
- msg "Starting ABS sync..."
+ msg 'Starting ABS sync...'
$SYNCCMD $SYNCARGS $INCLUDE $EXCLUDE ${SYNCSERVER}::abs/{${ARCH},any}/ $ABSROOT
}
update_tarball() {
cd "$ABSROOT"
- if [ ! "$(type -p wget)" ]; then
- error "missing wget download utility. Install wget."
+ if [[ -z $(type -p wget) ]]; then
+ error 'missing wget download utility. Install wget.'
exit $_E_MISSING_PROGRAM
fi
- if [ -f "$MIRRORLIST" ]; then
- mirrorlist=$(grep "^Server" $MIRRORLIST | cut -f3 -d" ")
+ if [[ -f $MIRRORLIST ]]; then
+ mirrorlist=$(grep "^Server" $MIRRORLIST | cut -f3 -d' ')
else
error "Could not find pacman mirrorlist file $MIRRORLIST"
exit $_E_CONFIG_ERROR
fi
- msg "Downloading tarballs..."
+ msg 'Downloading tarballs...'
for repo in "${REPOS[@]}"; do
- if [ "$repo" == "${repo#!}" ]; then
+ if [[ "$repo" == "${repo#!}" ]]; then
echo " ==> ${repo}..."
local ret
- for mirror in ${mirrorlist[@]}; do
+ for mirror in "${mirrorlist[@]}"; do
ret=0
tarball=$(echo $mirror | sed "s#\$repo#$repo#;s#\$arch#$ARCH#")
tarball="${tarball}/${repo}.abs.tar.gz"
protocol=$(echo $tarball | cut -f1 -d":")
- if [ "$protocol" == "file" ]; then
+ if [[ "$protocol" == "file" ]]; then
tarball=$(echo $tarball | sed "s#file://##")
ln -s $tarball . 2>/dev/null || ret=$?
- if [ $ret -ne 0 ]; then
+ if (( $ret != 0 )); then
ret=0
fi
else
wget -q $tarball || ret=$?
fi
- if [ $ret -eq 0 ]; then
+ if (( $ret == 0 )); then
break
fi
done
- if [ $ret -ne 0 ]; then
+ if (( $ret != 0 )); then
error "Download failed"
continue
fi
@@ -202,8 +202,8 @@ trap 'error "An unknown error has occured. Exiting..."; exit 1' ERR
##
# Parse Options
##
-OPT_SHORT="hVt"
-OPT_LONG="help,version,tarball"
+OPT_SHORT='hVt'
+OPT_LONG='help,version,tarball'
OPT_TEMP="$(getopt -o "$OPT_SHORT" -l "$OPT_LONG" -n "$(basename "$0")" -- "$@" || echo 'GETOPT GO BANG!')"
if echo "$OPT_TEMP" | grep -q 'GETOPT GO BANG!'; then
# This is a small hack to stop the script bailing with 'set -e'
@@ -224,7 +224,7 @@ while true; do
shift
done
-if [ "$#" -gt "0" ]; then
+if (( $# > 0 )); then
CLPARAM=1
REPOS=("$@")
fi
@@ -232,12 +232,12 @@ fi
##
# Verify Config
##
-if [ ! -d "$ABSROOT" ]; then
+if [[ ! -d $ABSROOT ]]; then
error "$ABSROOT does not exist (or is not a directory)"
exit $_E_CONFIG_ERROR
fi
-if [ ! -w "$ABSROOT" ]; then
+if [[ ! -w $ABSROOT ]]; then
error "no write permissions in $ABSROOT"
exit $_E_CONFIG_ERROR
fi
@@ -247,9 +247,9 @@ fi
##
# Use tarball method on first run
-[ "$(ls -A $ABSROOT | sed -e 's#local##' -e 's#README##')" -o "$CLPARAM" ] || TARBALL=1
+[[ -n $(ls -A $ABSROOT | sed -e 's#local##' -e 's#README##') || -n $CLPARAM ]] || TARBALL=1
-if [ "$TARBALL" ]; then
+if [[ -n $TARBALL ]]; then
update_tarball
else
update_rsync
diff --git a/makeworld b/makeworld
index e5d9f0f..dd6e00b 100755
--- a/makeworld
+++ b/makeworld
@@ -19,7 +19,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
-ABS_VERSION="%%ABS_VERSION%%"
+ABS_VERSION='%%ABS_VERSION%%'
BUG_REPORT_EMAIL='pacman-dev at archlinux.org'
toplevel=$(pwd)
@@ -31,38 +31,38 @@ trap 'error "Aborted by user! Exiting..."; exit 1' INT
trap 'error "An unknown error has occured. Exiting..."; exit 1' ERR
usage() {
- printf "makeworld %s - a makepkg wrapper to build multiple packages\n" "$myver"
+ printf 'makeworld %s - a makepkg wrapper to build multiple packages\n' "$myver"
echo
- printf "Usage: %s [options] <destdir> <repo> [repo] ...\n" "$0"
+ printf 'Usage: %s [options] <destdir> <repo> [repo] ...\n' "$0"
echo
- echo "Where <repo> is one or more directory names under the ABS root"
- echo " eg: makeworld -c /packages core extra"
+ echo 'Where <repo> is one or more directory names under the ABS root'
+ echo ' eg: makeworld -c /packages core extra'
echo
- echo "This should be run from the toplevel directory of ABS (usually /var/abs)"
+ echo 'This should be run from the toplevel directory of ABS (usually /var/abs)'
echo
- echo "See makepkg --help for supported options (passed directly to makepkg)"
+ echo 'See makepkg --help for supported options (passed directly to makepkg)'
}
version() {
- printf "makeworld %s\n" "$myver"
- printf "\
+ printf 'makeworld %s\n' "$myver"
+ printf '\
Copyright (C) 2002-2007 Judd Vinet <jvinet at zeroflux.org>\n\n\
Copyright (C) 2007-2010 Aaron Griffin <aaron at archlinux.org>\n\n\
This is free software; see the source for copying conditions.\n\
-There is NO WARRANTY, to the extent permitted by law.\n"
+There is NO WARRANTY, to the extent permitted by law.\n'
}
# Source makepkg.conf; fail if it is not found (need this for $CARCH, $PKGEXT)
-if [ -r "/etc/makepkg.conf" ]; then
- source "/etc/makepkg.conf"
+if [[ -r /etc/makepkg.conf ]]; then
+ source /etc/makepkg.conf
else
- printf "%s not found" "/etc/makepkg.conf"
- echo "Aborting..."
+ printf '%s not found' '/etc/makepkg.conf'
+ echo 'Aborting...'
exit 1
fi
# Source user-specific makepkg.conf overrides
-if [ -r ~/.makepkg.conf ]; then
+if [[ -r ~/.makepkg.conf ]]; then
source ~/.makepkg.conf
fi
@@ -79,7 +79,7 @@ for arg in $*; do
# and let it error out later if it was invalid
MAKEPKG_OPTS="$MAKEPKG_OPTS $arg" ;;
-*)
- while getopts "AcCdefFghiLmorRsV-" opt; do
+ while getopts 'AcCdefFghiLmorRsV-' opt; do
case $opt in
h)
usage; exit 0 ;;
@@ -96,23 +96,23 @@ for arg in $*; do
dest=$arg; shift; break ;;
esac
shift
- if [ "$dest" != "" ]; then
+ if [[ -n $dest ]]; then
break
fi
done
-if [ "$dest" = "" ]; then
+if [[ -z $dest ]]; then
usage
exit 1
fi
-if [ $# -lt 1 ]; then
+if (( $# < 1 )); then
usage
exit 1
fi
# convert a (possibly) relative path to absolute
-if [ ! -d "$dest" ]; then
+if [[ ! -d $dest ]]; then
echo "$dest does not exist, creating directory"
mkdir "$dest"
fi
@@ -125,13 +125,13 @@ sd=$(date +"[%b %d %H:%M]")
for repo in $*; do
for pkg in $(find "$toplevel/$repo" -maxdepth 1 -mindepth 1 -type d | sort); do
cd $pkg
- if [ -f PKGBUILD ]; then
- . PKGBUILD
+ if [[ -f PKGBUILD ]]; then
+ source PKGBUILD
buildstatus=0
- if [ ! -f "$dest/$pkgname-$pkgver-$pkgrel-$CARCH$PKGEXT" -a ! -f "$dest/$pkgname-$pkgver-$pkgrel-any$PKGEXT" ]; then
+ if [[ ! -f "$dest/$pkgname-$pkgver-$pkgrel-$CARCH$PKGEXT" && ! -f "$dest/$pkgname-$pkgver-$pkgrel-any$PKGEXT" ]]; then
PKGDEST="$dest" makepkg $MAKEPKG_OPTS -m 2>&1 1>&2 | tee -a $toplevel/makepkg.log
- if [ ${PIPESTATUS[0]} -ne 0 ]; then
+ if (( ${PIPESTATUS[0]} != 0 )); then
buildstatus=2
else
buildstatus=1
@@ -151,7 +151,7 @@ for repo in $*; do
done
ed=$(date +"[%b %d %H:%M]")
-echo "makeworld complete." >>$toplevel/build.log
+echo 'makeworld complete.' >>$toplevel/build.log
echo " started: $sd" >>$toplevel/build.log
echo " finished: $ed" >>$toplevel/build.log
diff --git a/scripts/svn2abs b/scripts/svn2abs
index 0d4c74d..102c731 100755
--- a/scripts/svn2abs
+++ b/scripts/svn2abs
@@ -21,7 +21,7 @@
##
# Constants
##
-ABS_VERSION="%%ABS_VERSION%%"
+ABS_VERSION='%%ABS_VERSION%%'
TREE_DIR=/tmp/__abs-tree__ # Directory to store the extracted ABS tree
##
@@ -41,29 +41,29 @@ function usage()
echo " $0 (-v | --version)"
echo " $0 (-h | --help)"
echo
- echo "Takes svn repo structure of form \$pkgname/repos/\$repo-\$arch"
- echo "and converts it to the ABS structure of \$arch/\$repo/\$pkgname"
+ echo 'Takes svn repo structure of form $pkgname/repos/$repo-$arch'
+ echo 'and converts it to the ABS structure of $arch/$repo/$pkgname'
echo "then syncs ABS tree in $ABS_DIR with extracted structure."
echo
- echo "Options:"
- echo " -h | --help - show this message"
- echo " -v | --version - show version information"
+ echo 'Options:'
+ echo ' -h | --help - show this message'
+ echo ' -v | --version - show version information'
echo
- echo "Parameters:"
- echo " [svn checkout dir] - dir to store svn checkout. Defaults to"
+ echo 'Parameters:'
+ echo ' [svn checkout dir] - dir to store svn checkout. Defaults to'
echo " $CHECKOUT_DIR"
- echo " [abs dir] - dir containing abs tree to update. Defaults to"
+ echo ' [abs dir] - dir containing abs tree to update. Defaults to'
echo " $ABS_DIR"
- echo " [svn repo location] - URL to subversion repo containing PKGBUILDs"
+ echo ' [svn repo location] - URL to subversion repo containing PKGBUILDs'
}
version() {
echo "svn2abs $ABS_VERSION"
echo
- echo "Copyright (C) 2008-2010 Aaron Griffin <aaron at archlinux.org>."
+ echo 'Copyright (C) 2008-2010 Aaron Griffin <aaron at archlinux.org>.'
echo
- echo "This is free software; see the source for copying conditions."
- echo "There is NO WARRANTY, to the extent permitted by law."
+ echo 'This is free software; see the source for copying conditions.'
+ echo 'There is NO WARRANTY, to the extent permitted by law.'
}
@@ -75,12 +75,12 @@ function checkout_svn()
local targetdir=$1
local origdir=$(pwd)
- if [ -f "$targetdir" ]; then
+ if [[ -f $targetdir ]]; then
echo "Could not create checkout target $targetdir. File exists."
return 1
fi
- if [ ! -d "$targetdir" ]; then
+ if [[ ! -d $targetdir ]]; then
mkdir "$targetdir"
fi
@@ -89,23 +89,23 @@ function checkout_svn()
# Simple check - if $targetdir/.svn exists, then we can assume
# the repo has been checked out (ie. we can just run an update
# instead of a full checkout)
- if [ -d "./.svn" ]; then
+ if [[ -d './.svn' ]]; then
# Checkout already exists - just update it
- echo "Updating SVN repo..."
+ echo 'Updating SVN repo...'
svn update
else
# Checkout the tree into $targetdir
- echo "Checking out SVN repo..."
+ echo 'Checking out SVN repo...'
svn co "$SVN_REPO_LOCATION" ./
fi
- if [ "$?" != "0" ]; then
+ if (( $? != 0 )); then
cd "$origdir"
- echo "Error with SVN checkout/update."
+ echo 'Error with SVN checkout/update.'
return 1
fi
- echo "SVN checkout/update complete."
+ echo 'SVN checkout/update complete.'
cd "$origdir"
return 0
@@ -124,17 +124,17 @@ function extract_abs_tree()
local checkoutdir="$1"
local origdir=$(pwd)
- if [ ! -d "$checkoutdir" ]; then
+ if [[ ! -d "$checkoutdir" ]]; then
echo "SVN checkout dir $checkoutdir does not exist"
return 1
fi
- if [ -f "$targetdir" ]; then
+ if [[ -f "$targetdir" ]]; then
echo "Could not create abs tree target $targetdir. File exists."
return 1
fi
- if [ ! -d "$targetdir" ]; then
+ if [[ ! -d "$targetdir" ]]; then
mkdir "$targetdir"
else
# Clear out target dir
@@ -142,14 +142,14 @@ function extract_abs_tree()
fi
cd "$targetdir"
- local targetdir="$(pwd)"
+ local targetdir=$(pwd)
cd -
cd "$checkoutdir"
for pkg in *; do
# It seems that some repos directories have no tags in them...
- if [ -d "$pkg" -a -d "$pkg/repos" ]; then
+ if [[ -d "$pkg" && -d "$pkg/repos" ]]; then
echo "Creating ABS tree for package $pkg"
cd $pkg/repos @>/dev/null
@@ -157,8 +157,8 @@ function extract_abs_tree()
for repo in $(ls); do
arch=$(echo $repo | sed "s/.*-\(.*\)/\1/")
dest_repo=$(echo $repo | sed "s/\(.*\)-.*/\1/")
- mkdir -p $targetdir/$arch/$dest_repo/$pkg
- cp -r $repo/* $targetdir/$arch/$dest_repo/$pkg
+ mkdir -p "$targetdir/$arch/$dest_repo/$pkg"
+ cp -r "$repo"/* "$targetdir/$arch/$dest_repo/$pkg"
done
cd ../../
@@ -176,36 +176,36 @@ function extract_abs_tree()
##
# Simple params
##
-if [ "$1" = "-h" -o "$1" = "--help" ]; then
+if [[ "$1" == '-h' || "$1" == '--help' ]]; then
usage
exit 0
fi
-if [ "$1" = "-v" -o "$1" = "--version" ]; then
+if [[ "$1" == '-v' || "$1" == '--version' ]]; then
version
exit 0
fi
-if [ "$1" != "" ]; then
+if [[ -n $1 ]]; then
CHECKOUT_DIR=$1
fi
-if [ "$2" != "" ]; then
+if [[ -n $2 ]]; then
ABS_DIR=$2
fi
-if [ "$3" != "" ]; then
+if [[ -n $3 ]]; then
SVN_REPO_LOCATION=$3
fi
##
# Check config
##
-if [ "$ABS_DIR" = "" ]; then
- echo "No ABS_DIR specified!"
+if [[ -z $ABS_DIR ]]; then
+ echo 'No ABS_DIR specified!'
exit 1
-elif [ ! -d "$ABS_DIR" ]; then
- echo "ABS_DIR not a directory."
+elif [[ ! -d $ABS_DIR ]]; then
+ echo 'ABS_DIR not a directory.'
exit 1
fi
@@ -215,8 +215,8 @@ fi
checkout_svn "$CHECKOUT_DIR" || exit 1
extract_abs_tree "$CHECKOUT_DIR" "$TREE_DIR"
-if [ "$?" -ne "0" ]; then
- echo "Error occurred extracting the abs tree."
+if (( $? != 0 )); then
+ echo 'Error occurred extracting the abs tree.'
exit 1
fi
@@ -231,9 +231,9 @@ for abs_arch in $(ls); do
done
cd -
-echo "Cleaning up..."
-rm -r $TREE_DIR
+echo 'Cleaning up...'
+rm -r "$TREE_DIR"
-echo "Done!"
+echo 'Done!'
# vim: set ts=2 sw=2 noet:
diff --git a/scripts/update-abs.sh b/scripts/update-abs.sh
index ff3510e..4e313ff 100644
--- a/scripts/update-abs.sh
+++ b/scripts/update-abs.sh
@@ -7,8 +7,8 @@ ARCHES=('i686' 'x86_64' 'any')
mkdir -p /srv/abs/{checkout,rsync,tree}
# clear any "broken" entries from previous ABS tree generation
-for server in ${SERVERS[@]}; do
- [ -d /srv/abs/tree/$server ] && rm -rf /srv/abs/tree/$server/*
+for server in "${SERVERS[@]}"; do
+ [[ -d "/srv/abs/tree/$server" ]] && rm -rf "/srv/abs/tree/$server"/*
done
# create ABS trees
@@ -16,27 +16,27 @@ done
/srv/abs/svn2abs /srv/abs/checkout/sigurd /srv/abs/tree/sigurd file:///srv/svn-community
# clean and regenerate ABS rsync folder
-for arch in ${ARCHES[@]}; do
- if [ ! -d /srv/abs/rsync/$arch ]; then
- mkdir /srv/abs/rsync/$arch
+for arch in "${ARCHES[@]}"; do
+ if [[ ! -d "/srv/abs/rsync/$arch" ]]; then
+ mkdir "/srv/abs/rsync/$arch"
else
- rm -rf /srv/abs/rsync/$arch/*
+ rm -rf "/srv/abs/rsync/$arch"/*
fi
- for server in ${SERVERS[@]}; do
- if [ -d /srv/abs/tree/$server/$arch ]; then
- mv /srv/abs/tree/$server/$arch/* /srv/abs/rsync/$arch/
+ for server in "${SERVERS[@]}"; do
+ if [[ -d "/srv/abs/tree/$server/$arch" ]]; then
+ mv "/srv/abs/tree/$server/$arch"/* "/srv/abs/rsync/$arch/"
fi
done
done
# generate tarballs for package mirrors
for repo in testing core extra community community-testing; do
- for arch in ${ARCHES[@]/any/}; do
+ for arch in "${ARCHES[@]/any/}"; do
tarcmd="tar -czf /srv/ftp/${repo}/os/${arch}/${repo}.abs.tar.gz \
-C /srv/abs/rsync/${arch} ${repo}"
- if [ -d "/srv/abs/rsync/any/${repo}" ]; then
+ if [[ -d "/srv/abs/rsync/any/${repo}" ]]; then
tarcmd="$tarcmd -C /srv/abs/rsync/any ${repo}"
fi
--
Sebastien "Seblu" Luttringer
More information about the arch-projects
mailing list