abump.in 2.66 KB
Newer Older
1 2
#!/bin/sh

3 4 5 6 7 8
# abump - bump pkgver in APKBUILDs
# Copyright (c) 2012 Natanael Copa <ncopa@alpinelinux.org>
#
# Distributed under GPL-2
#

9 10
abuild_ver=@VERSION@
datadir=@datadir@
11

12 13
if ! [ -f "$datadir/functions.sh" ]; then
	echo "$datadir/functions.sh: not found" >&2
14
	exit 1
15 16 17
fi
. "$datadir/functions.sh"

18

19
# version bump packages
20
do_bump() {
21
	local p rc=0 errors=0 failed= name ver section message
Dubiousjim's avatar
Dubiousjim committed
22
	local upgrade="${cvelist:+security }upgrade"
23
	local a
24
	for p; do
25 26
		name=${p%-[0-9]*}
		ver=${p#${name}-}
27

Natanael Copa's avatar
Natanael Copa committed
28 29 30 31
		(
		set -e

		# calculate APKBUILD's path    #vim syntax higlight '
Natanael Copa's avatar
Natanael Copa committed
32
		if [ "${name#*/}" != "$name" ] && ! [ -d "$APORTSDIR/${name%/*}" ]; then
Natanael Copa's avatar
Natanael Copa committed
33
			die "'$p' should be of form 'foo-1.2.3' or 'main/foo-1.2.3'"
34
		fi
Natanael Copa's avatar
Natanael Copa committed
35 36
		a=$(aports_buildscript "$name" ) \
			|| die "can't find APKBUILD for $name"
37 38 39

		# verify APKBUILD
		. "$a" || exit 1
Natanael Copa's avatar
Natanael Copa committed
40 41 42 43
		[ "$pkgname" = "$name" ] \
			|| die "APKBUILD has different \$pkgname for $name"
		type package | grep -q function \
			|| die "missing package() for $name"
44

45
		cd "${a%/*}"
Dubiousjim's avatar
Dubiousjim committed
46
		section=${PWD%/*}
47 48
		section=${section##*/}

49
		message="$section/$name: $upgrade to ${ver}${cvelist}"
50 51
		if [ -n "$fixes" ]; then
			message="$message
52 53 54

fixes #${fixes#\#}
"
55
		fi
56
		msg "$message"
57

58
		sed -i -e "s/^pkgver=.*/pkgver=$ver/" \
59 60
			-e "s/^pkgrel=.*/pkgrel=0/" \
			APKBUILD
61

62
		abuild $abuild_opts checksum all
63

64 65
		git add APKBUILD
		git commit -m"$message"
Natanael Copa's avatar
Natanael Copa committed
66
		)
67 68 69 70
		if [ $? -ne 0 ]; then
			errors=$(( $errors + 1 ))
			failed="$failed $p"
		fi
71
	done
72 73 74 75
	if [ -n "$failed" ]; then
		error "Failed: $failed"
	fi
	return $errors
76 77
}

78
usage() {
79 80 81 82 83 84 85 86 87 88 89 90
	cat >&2 <<__EOF__
$prog $abuild_ver - bump pkgver in APKBUILDs
Usage: $prog [-s CVE-1,CVE-2,...] [-f ISSUE] [-R|--recursive] [-k|--keep] PKGNAME-1.2.3 ...
Options:
  -s, --security CVE1,CVE-2,...  Security update
  -f, --fixes ISSUE              Fixes ISSUE
  -R, --recursive                Run abuild with -R for recursive building
  -k, --keep                     Run abuild with -k to keep existing packages
  -q, --quiet
  -h, --help                     Show this help

__EOF__
91 92
}

93 94
keep=
recursive="-r"
95 96 97
cvelist=
fixes=

98
[ -n "$APORTSDIR" ] || error "can't locate \$APORTSDIR"
99
git rev-parse 2>/dev/null || die "not in a git tree"
100

101
args=`getopt -o f:s:Rkqh --long fixes:,security:,recursive,keep,quiet,help -n "$prog" -- "$@"`
102 103 104 105 106 107 108
if [ $? -ne 0 ]; then
	usage
	exit 2
fi
eval set -- "$args"
while true; do
	case $1 in
Dubiousjim's avatar
Dubiousjim committed
109
		-s|--security) cvelist=" ($2)"; shift;;
110 111 112 113 114 115 116
		-f|--fixes) fixes="$2"; shift;;
		-R|--recursive) recursive="-R";;
		-k|--keep) keep="-k";;
		-q|--quiet) quiet=1;; # suppresses msg
		-h|--help) usage; exit;;
		--) shift; break;;
		*) exit 1;; # getopt error
117
	esac
118
	shift
119
done
120 121 122 123
if [ $# -eq 0 ]; then
	usage
	exit 2
fi
124

125 126
abuild_opts="$recursive $keep"

127
do_bump "$@"
128