abuild/apkgrel.in

139 lines
2.9 KiB
Plaintext
Raw Normal View History

2010-12-30 14:21:49 +00:00
#!/bin/sh
# apkgrel - display or bump pkgrel in APKBUILDs
# Copyright (c) 2012 Natanael Copa <ncopa@alpinelinux.org>
#
2020-10-23 14:39:18 +00:00
# Distributed under GPL-2.0-only
#
program_version=@VERSION@
sharedir=${ABUILD_SHAREDIR:-@sharedir@}
if ! [ -f "$sharedir/functions.sh" ]; then
echo "$sharedir/functions.sh: not found" >&2
exit 1
fi
. "$sharedir/functions.sh"
2010-12-30 14:21:49 +00:00
2013-07-05 04:21:34 +00:00
show_plain() {
# we source the APKBUILD and show last pkgrel that's read
# if this script is invoked with --force, this needn't pass "do_verify"
( . "$1" && echo "$pkgrel" )
}
show_pretty() {
(
. "$1" || exit 1
[ -n "$pkgname" ] || die "no \$pkgname for $1"
2013-07-05 04:21:34 +00:00
printf '%s: r%s\n' "$pkgname" "${pkgrel:-?}"
)
}
2010-12-30 14:21:49 +00:00
do_show() {
2013-07-05 04:21:34 +00:00
local f=
# show_pretty is more informative, but would change the output format of this script
for f; do show_plain "$f"; done
2010-12-30 14:21:49 +00:00
}
do_set() {
sed -e "/^pkgrel=/s/=.*/=${setto:-0}/" \
-i "$@"
}
do_add () {
local f= old=
2013-07-05 04:21:35 +00:00
for f; do
[ -n "$only_clean_git" ] \
&& [ -n "$(git diff --name-only -- "${f%/*}")" ] \
&& continue
2013-07-05 04:21:34 +00:00
old=$(show_plain "$f")
case $old in
[0-9]*) setto=$((old + 1));;
*) setto=0;;
esac
2010-12-30 14:21:49 +00:00
do_set "$f" || return 1
done
2010-12-30 14:21:49 +00:00
}
do_verify() {
[ -n "$force" ] && return 0
local f= rc=0
2013-07-05 04:21:35 +00:00
for f; do
if ! grep -q '^pkgrel=[0-9]' "$f"; then
error "no proper \$pkgrel for $f"
rc=1
fi
done
return $rc
2010-12-30 14:21:49 +00:00
}
do_nothing() {
return 0
}
usage() {
2016-08-20 13:16:48 +00:00
cat >&2 <<-__EOF__
$program $program_version - display or bump pkgrel in APKBUILDs
Usage: $program [-z|--zero] [-a|--add] [-g|--clean-git] [-s|--set NUM]
[-t|--test] [-f|--force] DIR or APKBUILD...
Options:
-z, --zero Set pkgrel to 0
-a, --add Add 1 to current pkgrel
-g, --clean-git Only operate on APKBUILDs with clean git status (implies
--add)
-s, --set NUM Set pkgrel to NUM
-t, --test Only verify that files have a valid pkgrel
-f, --force Operate on files without a valid pkgrel
-h, --help Show this help
2010-12-30 14:21:49 +00:00
2016-08-20 13:16:48 +00:00
__EOF__
2010-12-30 14:21:49 +00:00
}
cmd=do_show
force=
setto=
only_clean_git=
args=$(getopt -o zags:tfqh --long zero,add,clean-git,set:,test,force,quiet,help \
-n "$program" -- "$@")
if [ $? -ne 0 ]; then
usage
exit 2
fi
eval set -- "$args"
while true; do
case $1 in
-z|--zero) setto=0; cmd=do_set;;
-a|--add) cmd=do_add;;
2013-07-05 04:21:33 +00:00
-g|--clean-git) # verify that we're in a git tree
git rev-parse 2>/dev/null || die "not in a git tree"
cmd=do_add
only_clean_git=1;;
-s|--set) setto=$2; shift; cmd=do_set;;
-t|--test) cmd=do_nothing;;
-f|--force) force=1;;
-q|--quiet) quiet=1;; # noop
-h|--help) usage; exit;;
--) shift; break;;
*) exit 1;; # getopt error
2010-12-30 14:21:49 +00:00
esac
shift
2010-12-30 14:21:49 +00:00
done
if [ $# -eq 0 ]; then
usage
exit 2
2010-12-30 14:21:49 +00:00
fi
# normalize $@ into paths to APKBUILDs
[ "$(echo "$@" | wc -l)" -eq 1 ] || die "can't handle paths with embedded newlines"
args=$(for a; do p=$(any_buildscript "$a") || die "can't find APKBUILD for $a"; echo "$p"; done)
[ $? -eq 0 ] || exit 1
oldifs=$IFS
IFS=$'\n'
set -- $args
IFS=$oldifs
2010-12-30 14:21:49 +00:00
do_verify "$@" || exit 1
$cmd "$@"