Subject: [alpine-devel] [PATCH 00/31] patch series for abuild repo

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:09 -0400

Sorry for so many patches. I tried hard to rebase them into natural-sized
chunks for reviewing. I'll rebase them further if you like. But I thought it
was time to hand them over to other eyes.

These hardly touch abuild itself, nor newapkbuild, buildrepo, or buildlab. I've
got some notes for the first two of these, that I'll come back to another day.

Most of the changes here are internal.

The main externally-visible changes are: long options, some tweaked error messages,
permitting environment variable overrides to settings from abuild.conf files, and
hopefully some more robust behavior in places.

Dubiousjim (31):
  remove unused files
  abuild-sudo, abuild-tar: cosmetic changes
  various: add descriptions, attribution, license
  various: tweak opening comments, whitespace
  abuild-keygen: refactor
  abuild-sign: refactor
  various: move conf-loading and i/o to functions
  Makefile: add missing files to dist
  Makefile: remove dist
  various: use long options, rework usages
  abuild_keygen: several tweaks
  abuild-sign: reformat error output
  abuild-sign: make vars local
  abuild-sign: wrap cd in a subshell, use set -e
  abuild-sign: fix a race condition
  abump: move loop inside do_bump, refine locals
  abump: introduce subshell, rc
  abump: make abuild also clean
  abump: tweak upgrade/cvelist
  abump, functions: refactor (and verify) calculation of APKBUILD path
  abump: refactor verification of APKBUILD
  abump: verify APKBUILD's version
  abump: verify that we're in git tree
  apkgrel: --clean-git enhancements
  apkgrel: show_plain, show_pretty
  apkgrel: tweaks to loops, add quotes
  apkgrel: handle missing pkgrel in do_add
  various: s/echo/msg/, s/echo/error/, tweak error messages
  apkgrel, functions: refactor calculation of APKBUILD's path
  various: fancier readconfig, permit env overrides
  functions: also honor .abuild file at gitbase

 APKBUILD-svn.proto |  46 --------
 Makefile           |  14 +--
 abuild-keygen.in   | 190 +++++++++++++++++----------------
 abuild-sign.in     | 132 ++++++++++++-----------
 abuild-sudo.c      |  13 ++-
 abuild-tar.c       |   2 +-
 abuild.in          |   4 +-
 abump.in           | 155 +++++++++++++++++----------
 alpine.mk          | 302 -----------------------------------------------------
 alpine.packages    | 124 ----------------------
 apkgrel.in         | 126 +++++++++++++++-------
 checkapk.in        |  52 +++++----
 functions.sh       |  34 ------
 functions.sh.in    | 150 ++++++++++++++++++++++++++
 mkinitram          |  88 ----------------
 mkmodloop          |  37 -------
 newapkbuild.in     |  60 +++++------
 17 files changed, 585 insertions(+), 944 deletions(-)
 delete mode 100644 APKBUILD-svn.proto
 delete mode 100755 alpine.mk
 delete mode 100644 alpine.packages
 delete mode 100644 functions.sh
 create mode 100644 functions.sh.in
 delete mode 100644 mkinitram
 delete mode 100644 mkmodloop

-- 
1.8.3.1

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:21 -0400

---
 abuild-sign.in | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/abuild-sign.in b/abuild-sign.in
index b5250af..3303750 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -79,13 +79,15 @@ if [ $# -eq 0 ]; then
 fi
 
 if [ -z "$privkey" ]; then
-	echo "No private key found. Use 'abuild-keygen' to generate the keys"
-	echo "Then you can either:"
-	echo " 1. set the PACKAGER_PRIVKEY in $abuild_userconf"
-	echo "    (Note that 'abuild-keygen -a' does this for you)"
-	echo " 2. set the PACKAGER_PRIVKEY in $abuild_conf"
-	echo " 3. specify the key with the -k option"
-	echo ""
+	cat >&2 << __EOF__
+No private key found. Use 'abuild-keygen' to generate the keys.
+Then you can either:
+  * set the PACKAGER_PRIVKEY in $abuild_userconf
+    ('abuild-keygen -a' does this for you)
+  * set the PACKAGER_PRIVKEY in $abuild_conf
+  * specify the key with the -k option to $prog
+
+__EOF__
 	exit 1
 fi
 
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:40 -0400

This permits introducing branch-specific modifications to abuild.conf settings.
Any settings there override /etc/abuild.conf and $HOME/.abuild/abuild.conf.
---
 functions.sh.in | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/functions.sh.in b/functions.sh.in
index 0b0bc3b..395e407 100644
--- a/functions.sh.in
+++ b/functions.sh.in
@@ -46,6 +46,8 @@ readconfig() {
 			APORTSDIR=
 		fi
 	fi
+	# source any .abuild file at the aports root, but only if we are currently in aports tree
+	[ -n "$APORTSDIR" ] && [ -f "$APORTSDIR/.abuild" ] && [ "$APORTSDIR" = "$gitbase" ] && . "$APORTSDIR/.abuild"
 	BUILDDIR=${_BUILDDIR-$BUILDDIR}
 	PKGDEST=${_PKGDEST-$PKGDEST}
 	SRCPKGDEST=${_SRCPKGDEST-$SRCPKGDEST}
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:12 -0400

---
 abuild-sudo.c | 9 +++++++++
 abump.in      | 6 ++++++
 apkgrel.in    | 6 ++++++
 checkapk.in   | 6 ++++++
 4 files changed, 27 insertions(+)

diff --git a/abuild-sudo.c b/abuild-sudo.c
index 66f212a..2f34f3d 100644
--- a/abuild-sudo.c
+++ b/abuild-sudo.c
@@ -1,3 +1,12 @@
+/* abuild-sudo.c - limited root privileges for users in "abuild" group
+ *
+ * Copyright (C) 2012 Natanael Copa <[email-masked]>
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation. See http://www.gnu.org/ for details.
+ */
 
 #include <sys/types.h>
 
diff --git a/abump.in b/abump.in
index 10ebb8b..897b50e 100755
--- a/abump.in
+++ b/abump.in
@@ -1,5 +1,11 @@
 #!/bin/sh
 
+# abump - bump pkgver in APKBUILDs
+# Copyright (c) 2012 Natanael Copa <[email-masked]>
+#
+# Distributed under GPL-2
+#
+
 program=${0##*/}
 
 die() {
diff --git a/apkgrel.in b/apkgrel.in
index f319a83..3feb4f3 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -1,5 +1,11 @@
 #!/bin/sh
 
+# apkgrel - display or bump pkgrel in APKBUILDs
+# Copyright (c) 2012 Natanael Copa <[email-masked]>
+#
+# Distributed under GPL-2
+#
+
 program=${0##*/}
 
 do_show() {
diff --git a/checkapk.in b/checkapk.in
index 76d63eb..9c1d9fd 100644
--- a/checkapk.in
+++ b/checkapk.in
@@ -1,5 +1,11 @@
 #!/bin/sh
 
+# checkapk - find ABI breakages in package upgrades
+# Copyright (c) 2012 Natanael Copa <[email-masked]>
+#
+# Distributed under GPL-2
+#
+
 die() {
 	echo "$@" >&2
 	exit 1
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:28 -0400

---
 abump.in | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/abump.in b/abump.in
index 33d962d..ddd9715 100755
--- a/abump.in
+++ b/abump.in
@@ -18,7 +18,8 @@ fi
 
 # version bump packages
 do_bump() {
-	local p rc=0 pkgname pkgver section upgrade cve message
+	local p rc=0 pkgname pkgver section message
+	local upgrade="${cvelist:+security }upgrade"
 	for p; do
 		pkgname=${p%-[0-9]*}
 		pkgver=${p#${pkgname}-}
@@ -27,14 +28,10 @@ do_bump() {
 		set -e
 
 		cd $HOME/aports/*/$pkgname
-		section=${PWD%/*} upgrade="upgrade" cve=
+		section=${PWD%/*}
 		section=${section##*/}
-		if [ -n "$cvelist" ]; then
-			upgrade="security upgrade"
-			cve=" ($cvelist)"
-		fi
 
-		message="$section/$pkgname: $upgrade to ${pkgver}${cve}"
+		message="$section/$pkgname: $upgrade to ${pkgver}${cvelist}"
 		if [ -n "$fixes" ]; then
 			message="$message
 
@@ -86,7 +83,7 @@ fi
 eval set -- "$args"
 while true; do
 	case $1 in
-		-s|--security) cvelist="$2"; shift;;
+		-s|--security) cvelist=" ($2)"; shift;;
 		-f|--fixes) fixes="$2"; shift;;
 		-R|--recursive) recursive="-R";;
 		-k|--keep) keep="-k";;
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:39 -0400

---
 abuild-keygen.in | 14 +++++------
 abuild-sign.in   |  4 +--
 checkapk.in      |  2 +-
 functions.sh.in  | 75 +++++++++++++++++++++++++++++++++++++++++++++-----------
 4 files changed, 71 insertions(+), 24 deletions(-)

diff --git a/abuild-keygen.in b/abuild-keygen.in
index dbedad1..c02ad82 100644
--- a/abuild-keygen.in
+++ b/abuild-keygen.in
@@ -30,7 +30,7 @@ get_privkey_file() {
 
 	default_name="${emailaddr:-$USER}-$(printf "%x" $(date +%s))"
 
-	privkey="$abuild_home/$default_name.rsa"
+	privkey="$ABUILD_USERDIR/$default_name.rsa"
 	[ -n "$non_interactive" ] && return 0
 	msg "Generating public/private rsa key pair for abuild"
 	echo -n "Enter file in which to save the key [$privkey]: "
@@ -42,7 +42,7 @@ get_privkey_file() {
 }
 
 do_keygen() {
-	mkdir -p "$abuild_home"
+	mkdir -p "$ABUILD_USERDIR"
 
 	get_privkey_file
 	pubkey="$privkey.pub"
@@ -68,14 +68,14 @@ do_keygen() {
 	fi
 
 	if [ -n "$append_config" ]; then
-		if [ -f "$abuild_userconf" ]; then
+		if [ -f "$ABUILD_USERCONF" ]; then
 			# comment out the existing values
-			sed -i -e 's/^PACKAGER_PRIVKEY=/\#&/' "$abuild_userconf"
+			sed -i -e 's/^PACKAGER_PRIVKEY=/\#&/' "$ABUILD_USERCONF"
 		fi
-		echo "PACKAGER_PRIVKEY=\"$privkey\"" >> "$abuild_userconf"
+		echo "PACKAGER_PRIVKEY=\"$privkey\"" >> "$ABUILD_USERCONF"
 	else
 		msg ""
-		msg "You might want add following line to $abuild_userconf:"
+		msg "You might want add following line to $ABUILD_USERCONF:"
 		msg ""
 		msg "PACKAGER_PRIVKEY=\"$privkey\""
 		msg ""
@@ -92,7 +92,7 @@ usage() {
 $prog $abuild_ver - generate signing keys
 Usage: $prog [-a|--append] [-i|--install] [-n]
 Options:
-  -a, --append   Set PACKAGER_PRIVKEY=<generated key> in $abuild_userconf
+  -a, --append   Set PACKAGER_PRIVKEY=<generated key> in $ABUILD_USERCONF
   -i, --install  Install public key into /etc/apk/keys using sudo
   -n             Non-interactive. Use defaults
   -q, --quiet
diff --git a/abuild-sign.in b/abuild-sign.in
index c1a0c77..f00c0a1 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -85,9 +85,9 @@ if [ -z "$privkey" ]; then
 	cat >&2 << __EOF__
 No private key found. Use 'abuild-keygen' to generate the keys.
 Then you can either:
-  * set the PACKAGER_PRIVKEY in $abuild_userconf
+  * set the PACKAGER_PRIVKEY in $ABUILD_USERCONF
     ('abuild-keygen -a' does this for you)
-  * set the PACKAGER_PRIVKEY in $abuild_conf
+  * set the PACKAGER_PRIVKEY in $ABUILD_CONF
   * specify the key with the -k option to $prog
 
 __EOF__
diff --git a/checkapk.in b/checkapk.in
index d3e2988..0d31a0c 100644
--- a/checkapk.in
+++ b/checkapk.in
@@ -31,7 +31,7 @@ if [ $# -gt 0 ]; then
 	exit 2
 fi
 
-if ! [ -f "$abuild_conf" ] && ! [ -f "$abuild_userconf" ]; then
+if ! [ -f "$ABUILD_CONF" ] && ! [ -f "$ABUILD_USERCONF" ]; then
 	die "no abuild.conf found"
 fi
 
diff --git a/functions.sh.in b/functions.sh.in
index ab4dff5..0b0bc3b 100644
--- a/functions.sh.in
+++ b/functions.sh.in
@@ -3,20 +3,67 @@
 sysconfdir=@sysconfdir@
 prog=${0##*/}
 
-
-abuild_conf=${ABUILD_CONF:-"$sysconfdir/abuild.conf"}
-abuild_home=${ABUILD_USERDIR:-"$HOME/.abuild"}
-abuild_userconf=${ABUILD_USERCONF:-"$abuild_home/abuild.conf"}
-
-# read config
-if [ -f "$abuild_conf" ]; then
-	. "$abuild_conf" || abuild_conf=
-fi
-
-# read user config if exists
-if [ -f "$abuild_userconf" ]; then
-	. "$abuild_userconf" || abuild_userconf=
-fi
+readconfig() {
+	local _APORTSDIR _BUILDDIR _PKGDEST _SRCPKGDEST _REPODEST _SRCDEST
+	local _CARCH _CHOST _CTARGET _CPPFLAGS _CFLAGS _CXXFLAGS _LDFLAGS
+	local _JOBS _MAKEFLAGS _PACKAGER _USE_COLORS
+	local gitbase=
+	[ -n "${APORTSDIR+x}" ] && _APORTSDIR=$APORTSDIR
+	[ -n "${BUILDDIR+x}" ] && _BUILDDIR=$BUILDDIR
+	[ -n "${PKGDEST+x}" ] && _PKGDEST=$PKGDEST
+	[ -n "${SRCPKGDEST+x}" ] && _SRCPKGDEST=$SRCPKGDEST
+	[ -n "${REPODEST+x}" ] && _REPODEST=$REPODEST
+	[ -n "${SRCDEST+x}" ] && _SRCDEST=$SRCDEST
+	[ -n "${CARCH+x}" ] && _CARCH=$CARCH
+	[ -n "${CHOST+x}" ] && _CHOST=$CHOST
+	[ -n "${CTARGET+x}" ] && _CTARGET=$CTARGET
+	[ -n "${CPPFLAGS+x}" ] && _CPPFLAGS=$CPPFLAGS
+	[ -n "${CFLAGS+x}" ] && _CFLAGS=$CFLAGS
+	[ -n "${CXXFLAGS+x}" ] && _CXXFLAGS=$CXXFLAGS
+	[ -n "${LDFLAGS+x}" ] && _LDFLAGS=$LDFLAGS
+	[ -n "${JOBS+x}" ] && _JOBS=$JOBS
+	[ -n "${MAKEFLAGS+x}" ] && _MAKEFLAGS=$MAKEFLAGS
+	[ -n "${PACKAGER+x}" ] && _PACKAGER=$PACKAGER
+	[ -n "${USE_COLORS+x}" ] && _USE_COLORS="$USE_COLORS"
+	: ${ABUILD_CONF:=$sysconfdir/abuild.conf}
+	: ${ABUILD_USERDIR:=$HOME/.abuild}
+	: ${ABUILD_USERCONF:=$ABUILD_USERDIR/abuild.conf}
+	[ -f "$ABUILD_CONF" ] && . "$ABUILD_CONF"
+	[ -f "$ABUILD_USERCONF" ] && . "$ABUILD_USERCONF"
+	APORTSDIR=${_APORTSDIR-$APORTSDIR}
+	gitbase=$(git rev-parse --show-toplevel 2>/dev/null) # already is -P
+	if [ -d "$APORTSDIR" ]; then
+		APORTSDIR=$(cd "$APORTSDIR"; pwd -P)
+	elif [ -z "$APORTSDIR" ] && [ -d "$HOME/aports" ]; then
+		APORTSDIR=$(cd "$HOME/aports"; pwd -P)
+	else
+		if [ -n "$gitbase" ]; then
+			case $(git config remote.origin.url) in
+			*/aports) APORTSDIR=$gitbase ;;
+			*) APORTSDIR= ;;
+			esac
+		else
+			APORTSDIR=
+		fi
+	fi
+	BUILDDIR=${_BUILDDIR-$BUILDDIR}
+	PKGDEST=${_PKGDEST-$PKGDEST}
+	SRCPKGDEST=${_SRCPKGDEST-$SRCPKGDEST}
+	REPODEST=${_REPODEST-$REPODEST}
+	SRCDEST=${_SRCDEST-$SRCDEST}
+	CARCH=${_CARCH-$CARCH}
+	CHOST=${_CHOST-$CHOST}
+	CTARGET=${_CTARGET-$CTARGET}
+	CPPFLAGS=${_CPPFLAGS-$CPPFLAGS}
+	CFLAGS=${_CFLAGS-$CFLAGS}
+	CXXFLAGS=${_CXXFLAGS-$CXXFLAGS}
+	LDFLAGS=${_LDFLAGS-$LDFLAGS}
+	JOBS=${_JOBS-$JOBS}
+	MAKEFLAGS=${_MAKEFLAGS-$MAKEFLAGS}
+	PACKAGER=${_PACKAGER-$PACKAGER}
+	USE_COLORS=${_USE_COLORS-$USE_COLORS}
+}
+readconfig

 # expects $1 to be a package directory in the aports tree ('foo' or 'main/foo')
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:16 -0400

---
 abuild-keygen.in | 20 +++++----------
 abuild-sign.in   | 19 ++++----------
 abump.in         | 23 +++++++++--------
 apkgrel.in       | 12 +++++++--
 checkapk.in      | 24 ++++++++----------
 functions.sh     | 34 -------------------------
 functions.sh.in  | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 newapkbuild.in   | 21 ++++++----------
 8 files changed, 128 insertions(+), 101 deletions(-)
 delete mode 100644 functions.sh
 create mode 100644 functions.sh.in

diff --git a/abuild-keygen.in b/abuild-keygen.in
index 3cf5531..9b748d3 100644
--- a/abuild-keygen.in
+++ b/abuild-keygen.in
@@ -7,17 +7,14 @@
 #
 
 abuild_ver=@VERSION@
-sysconfdir=@sysconfdir@
+datadir=@datadir@
 
-abuild_conf=${ABUILD_CONF:-"$sysconfdir/abuild.conf"}
-abuild_home=${ABUILD_USERDIR:-"$HOME/.abuild"}
-abuild_userconf=${ABUILD_USERCONF:-"$abuild_home/abuild.conf"}
+if ! [ -f "$datadir/functions.sh" ]; then
+	echo "$datadir/functions.sh: not found" >&2
+	exit 1
+fi
+. "$datadir/functions.sh"
 
-# echo message unless quite mode
-msg() {
-	[ -n "$quiet" ] && return 0
-	echo "$@"
-}
 
 # ask for privkey unless non-interactive mode
 # returns value in global $privkey
@@ -107,11 +104,6 @@ usage() {
 	exit 1
 }
 
-# read config
-[ -f "$abuild_conf" ] && . "$abuild_conf"
-
-# read user config if exists
-[ -f "$abuild_userconf" ] && . "$abuild_userconf"
 
 while getopts "ahinq" opt; do
 	case $opt in
diff --git a/abuild-sign.in b/abuild-sign.in
index 73aabc7..3260e53 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -7,16 +7,13 @@
 #
 
 abuild_ver=@VERSION@
-sysconfdir=@sysconfdir@
+datadir=@datadir@
 
-abuild_conf=${ABUILD_CONF:-"$sysconfdir/abuild.conf"}
-abuild_home=${ABUILD_USERDIR:-"$HOME/.abuild"}
-abuild_userconf=${ABUILD_USERCONF:-"$abuild_home/abuild.conf"}
-
-die() {
-	echo "$@" >&2
+if ! [ -f "$datadir/functions.sh" ]; then
+	echo "$datadir/functions.sh: not found" >&2
 	exit 1
-}
+fi
+. "$datadir/functions.sh"
 
 do_sign() {
 	# we are actually only interested in the name, not the file itself
@@ -52,12 +49,6 @@ usage() {
 	exit 1
 }
 
-# read config
-[ -f "$abuild_conf" ] && . "$abuild_conf"
-
-# read user config if exists
-[ -f "$abuild_userconf" ] && . "$abuild_userconf"
-
 privkey="$PACKAGER_PRIVKEY"
 
 while getopts "hk:p:q" opt; do
diff --git a/abump.in b/abump.in
index 897b50e..32ff4af 100755
--- a/abump.in
+++ b/abump.in
@@ -6,12 +6,15 @@
 # Distributed under GPL-2
 #
 
-program=${0##*/}
+abuild_ver=@VERSION@
+datadir=@datadir@
 
-die() {
-	echo "$@" >&2
+if ! [ -f "$datadir/functions.sh" ]; then
+	echo "$datadir/functions.sh: not found" >&2
 	exit 1
-}
+fi
+. "$datadir/functions.sh"
+
 
 # version bump a pkg
 
@@ -31,14 +34,14 @@ do_bump() {
 		cve=" ($cvelist)"
 	fi
 
-	msg="$section/$pkgname: $upgrade to ${pkgver}${cve}"
+	message="$section/$pkgname: $upgrade to ${pkgver}${cve}"
 	if [ -n "$fixes" ]; then
-		msg="$msg
+		message="$message
 
 fixes #${fixes#\#}
 "
 	fi
-	echo "$msg"
+	echo "$message"
 
 	( . ./APKBUILD; type package | grep -q function ) || die "package() missing"
 
@@ -49,12 +52,12 @@ fixes #${fixes#\#}
 	abuild $abuild_opts checksum all || exit 1
 
 	git add APKBUILD
-	git commit -m"$msg"
+	git commit -m"$message"
 }
 
 usage() {
-	echo "$program - utility to bump pkgver in APKBUILDs"
-	echo "usage: $program [-hR] [-s CVE-1,CVE-2,...] [-f ISSUE]"
+	echo "$prog - utility to bump pkgver in APKBUILDs"
+	echo "usage: $prog [-hR] [-s CVE-1,CVE-2,...] [-f ISSUE]"
 	echo ""
 	echo "  -h  show this help"
 	echo "  -R  run abuild with -R for recursive building"
diff --git a/apkgrel.in b/apkgrel.in
index 0934847..46e189f 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -6,7 +6,15 @@
 # Distributed under GPL-2
 #
 
-program=${0##*/}
+abuild_ver=@VERSION@
+datadir=@datadir@
+
+if ! [ -f "$datadir/functions.sh" ]; then
+	echo "$datadir/functions.sh: not found" >&2
+	exit 1
+fi
+. "$datadir/functions.sh"
+
 
 do_show() {
 	awk -F= '$1 == "pkgrel" { print $2 }' "$@"
@@ -49,7 +57,7 @@ do_nothing() {
 
 do_usage() {
 	cat <<__EOF__
-Usage: $program -a|-h|-s NUM|-t|-z [-f] FILE...
+Usage: $prog -a|-h|-s NUM|-t|-z [-f] FILE...
 Commands:
   -a  Add 1 to current pkgrel
   -g  Only do the change on files that have clean git status
diff --git a/checkapk.in b/checkapk.in
index 9c1d9fd..e95249e 100644
--- a/checkapk.in
+++ b/checkapk.in
@@ -6,24 +6,22 @@
 # Distributed under GPL-2
 #
 
-die() {
-	echo "$@" >&2
+abuild_ver=@VERSION@
+datadir=@datadir@
+
+if ! [ -f "$datadir/functions.sh" ]; then
+	echo "$datadir/functions.sh: not found" >&2
 	exit 1
-}
+fi
+. "$datadir/functions.sh"
+
 
-msg() {
-	echo "$@"
-}
 
-have_abuild_conf=
 
-for conf in /etc/abuild.conf ~/.abuild/abuild.conf; do
-	if [ -f "$conf" ]; then
-		. $conf && have_abuild_conf=yes
-	fi
-done
 
-[ -z "$have_abuild_conf" ] && die "no abuild.conf found"
+if ! [ -f "$abuild_conf" ] && ! [ -f "$abuild_userconf" ]; then
+	die "no abuild.conf found"
+fi
 
 if ! [ -f APKBUILD ]; then
 	die 'This must be run in the directory of a built package.'
diff --git a/functions.sh b/functions.sh
deleted file mode 100644
index 032a7e6..0000000
--- a/functions.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#colors
-if [ -n "$USE_COLORS" ]; then
-	NORMAL="\033[1;0m"
-	STRONG="\033[1;1m"
-	RED="\033[1;31m"
-	GREEN="\033[1;32m"
-	YELLOW="\033[1;33m"
-	BLUE="\033[1;34m"
-fi	
-	
-
-# functions
-msg() {
-	local prompt="$GREEN>>>${NORMAL}"
-	local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
-	local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
-	[ -z "$quiet" ] && printf "${prompt} ${name}${fake}: $@\n" >&2
-}
-
-warning() {
-	local prompt="${YELLOW}>>> WARNING:${NORMAL}"
-	local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
-	local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
-	printf "${prompt} ${name}${fake}: $@\n" >&2
-}
-
-error() {
-	local prompt="${RED}>>> ERROR:${NORMAL}"
-	local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
-	local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
-	printf "${prompt} ${name}${fake}: $@\n" >&2
-}
-
diff --git a/functions.sh.in b/functions.sh.in
new file mode 100644
index 0000000..d71ef38
--- /dev/null
+++ b/functions.sh.in
@@ -0,0 +1,76 @@
+# /usr/share/abuild/functions.sh
+
+sysconfdir=@sysconfdir@
+prog=${0##*/}
+
+
+abuild_conf=${ABUILD_CONF:-"$sysconfdir/abuild.conf"}
+abuild_home=${ABUILD_USERDIR:-"$HOME/.abuild"}
+abuild_userconf=${ABUILD_USERCONF:-"$abuild_home/abuild.conf"}
+
+# read config
+if [ -f "$abuild_conf" ]; then
+	. "$abuild_conf" || abuild_conf=
+fi
+
+# read user config if exists
+if [ -f "$abuild_userconf" ]; then
+	. "$abuild_userconf" || abuild_userconf=
+fi
+
+
+# output functions
+case $prog in
+abuild)
+	if [ -n "$USE_COLORS" ]; then
+		NORMAL="\033[1;0m"
+		STRONG="\033[1;1m"
+		RED="\033[1;31m"
+		GREEN="\033[1;32m"
+		YELLOW="\033[1;33m"
+		BLUE="\033[1;34m"
+	fi
+
+	msg() {
+		local prompt="$GREEN>>>${NORMAL}"
+		local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
+		local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
+		[ -z "$quiet" ] && printf "${prompt} ${name}${fake}: $@\n" >&2
+	}
+
+	warning() {
+		local prompt="${YELLOW}>>> WARNING:${NORMAL}"
+		local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
+		local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
+		printf "${prompt} ${name}${fake}: $@\n" >&2
+	}
+
+	error() {
+		local prompt="${RED}>>> ERROR:${NORMAL}"
+		local fake="${FAKEROOTKEY:+${BLUE}*${NORMAL}}"
+		local name="${STRONG}${subpkgname:-$pkgname}${NORMAL}"
+		printf "${prompt} ${name}${fake}: $@\n" >&2
+	}
+	;;
+*)
+	msg() {
+		# Here we write to stdout, but abuild's fancier messages write to stderr
+		[ -z "$quiet" ] && echo "$@"
+	}
+
+	error() {
+		echo "$@" >&2
+	}
+	;;
+esac
+
+# caller may override
+cleanup() {
+	return 0
+}
+
+die() {
+	error "$@"
+	cleanup
+	exit 1
+}
diff --git a/newapkbuild.in b/newapkbuild.in
index 1a41ae9..0f95f19 100755
--- a/newapkbuild.in
+++ b/newapkbuild.in
@@ -6,22 +6,15 @@
 # Distributed under GPL-2
 #
 
-version=@VERSION@
-sysconfdir=@sysconfdir@
+abuild_ver=@VERSION@
 datadir=@datadir@
 
-prog=${0##*/}
+if ! [ -f "$datadir/functions.sh" ]; then
+	echo "$datadir/functions.sh: not found" >&2
+	exit 1
+fi
+. "$datadir/functions.sh"
 
-# Source $PACKAGER
-for i in $sysconfdir/abuild.conf $HOME/.abuild/abuild.conf; do
-	if [ -f "$i" ]; then
-		. $i
-	fi
-done
-
-error() {
-	echo "$@" >&2
-}
 
 is_url() {
 	case "$1" in
@@ -260,7 +253,7 @@ __EOF__
 }
 
 usage() {
-	echo "$prog $version"
+	echo "$prog $abuild_ver"
 	echo "usage: $prog [-cfh] [-d DESC] [-l LICENSE] [-n NAME] [-u URL] PKGNAME[-PKGVER]|SRCURL"
 	echo "Options:"
 	echo " -a  Create autotools (use ./configure ...)"
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:10 -0400

as discussed in http://lists.alpinelinux.org/alpine-devel/3122.html
---
 5 files changed, 597 deletions(-)

diff --git a/APKBUILD-svn.proto b/APKBUILD-svn.proto
deleted file mode 100644
index 63fbbb1..0000000
--- a/APKBUILD-svn.proto
+++ /dev/null
@@ -1,46 +0,0 @@
-# This is an example PKGBUILD file. Use this as a start to creating your own,
-# and remove these comments.
-# NOTE: Please fill out the license field for your package! If it is unknown,
-# then please put 'unknown'.
-
-# Contributor: Your Name <[email-masked]>
-pkgname=NAME-svn
-pkgver=VERSION
-pkgrel=0
-pkgdesc=""
-url=""
-license="GPL"
-depends=""
-makedepends=""
-install=
-source="$pkgname-$pkgver.tar.gz"
-
-_svntrunk=SVNURL
-_svnmod=MODENAME
-
-build() {
-	cd "$srcdir"
-
-	if [ -d $_svnmod/.svn ]; then
-		(cd $_svnmod && svn up -r $pkgver) || return 1
-	else
-		svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod \
-			|| return 1
-	fi
-
-	msg "Starting make..."
-
-	rm -r "$srcdir/$_svnmod-build"
-	cp -r "$srcdir/$_svnmod" "$srcdir/$_svnmod-build"
-	cd "$srcdir/$_svnmod-build"
-
-	#
-	# BUILD
-	#
-	./autogen.sh
-	./configure --prefix=/usr
-	make || return 1
-	make DESTDIR="$pkgdir/" install
-}
-
-md5sums="" # generate with 'abuild checksum'
diff --git a/alpine.mk b/alpine.mk
deleted file mode 100755
index 16c78a2..0000000
--- a/alpine.mk
+++ /dev/null
@@ -1,302 +0,0 @@
-#!/usr/bin/make -f
-
-PROFILE		?= alpine
-
--include $(PROFILE).conf.mk
-
-BUILD_DATE	:= $(shell date +%y%m%d)
-ALPINE_RELEASE	?= $(BUILD_DATE)
-ALPINE_NAME	?= alpine-test
-ALPINE_ARCH	:= x86
-DESTDIR		?= $(shell pwd)/isotmp.$(PROFILE)
-
-MKCRAMFS	= mkcramfs
-SUDO		= sudo
-
-ISO		?= $(ALPINE_NAME)-$(ALPINE_RELEASE)-$(ALPINE_ARCH).iso
-ISO_LINK	?= $(ALPINE_NAME).iso
-ISO_DIR		:= $(DESTDIR)/isofs
-ISO_PKGDIR	:= $(ISO_DIR)/apks
-
-APKS		?= $(shell sed 's/\#.*//; s/\*/\\*/g' $(PROFILE).packages)
-
-APK_OPTS	:= $(addprefix --repository ,$(APK_REPOS)) --keys-dir /etc/apk/keys
-
-find_apk_ver	= $(shell apk search $(APK_OPTS) $(1) | sort | uniq)
-find_apk_file	= $(addsuffix .apk,$(call find_apk_ver,$(1)))
-find_apk	= $(addprefix $(ISO_PKGDIR)/,$(call find_apk_file,$(1)))
-
-# get apk does not support wildcards
-get_apk         = $(addsuffix .apk,$(shell apk fetch --simulate $(APK_OPTS) $(1) 2>&1 | sed 's:^Downloading :$(ISO_PKGDIR)/:'))
-
-KERNEL_FLAVOR	?= grsec
-KERNEL_PKGNAME	?= linux-$(KERNEL_FLAVOR)
-KERNEL_NAME	:= $(KERNEL_FLAVOR)
-KERNEL_APK	:= $(call get_apk,$(KERNEL_PKGNAME))
-
-KERNEL		:= $(word 3,$(subst -, ,$(notdir $(KERNEL_APK))))-$(word 2,$(subst -, ,$(notdir $(KERNEL_APK))))
-
-ALPINEBASELAYOUT_APK := $(call find_apk,alpine-baselayout)
-UCLIBC_APK	:= $(call get_apk,uclibc)
-BUSYBOX_APK	:= $(call get_apk,busybox)
-APK_TOOLS_APK	:= $(call get_apk,apk-tools)
-STRACE_APK	:= $(call get_apk,strace)
-
-APKS_FILTER	?= | grep -v -- '-dev$$' | grep -v 'sources'
-
-APKS		?= '*'
-APK_FILES	:= $(call find_apk,$(APKS))
-
-all: isofs
-
-help:
-	@echo "Alpine ISO builder"
-	@echo
-	@echo "Type 'make iso' to build $(ISO)"
-	@echo
-	@echo "I will use the following sources files:"
-	@echo " 1. $(notdir $(KERNEL_APK)) (looks like $(KERNEL))"
-	@echo " 2. $(notdir $(MOD_APKS))"
-	@echo " 3. $(notdir $(ALPINEBASELAYOUT_APK))"
-	@echo " 4. $(notdir $(UCLIBC_APK))"
-	@echo " 5. $(notdir $(BUSYBOX_APK))"
-ifeq ($(APK_BIN),)
-	@echo " 6. $(notdir $(APK_TOOLS_APK))"
-else
-	@echo " 6. $(APK_BIN)"
-endif
-	@echo
-	@echo "ALPINE_NAME:    $(ALPINE_NAME)"
-	@echo "ALPINE_RELEASE: $(ALPINE_RELEASE)"
-	@echo "KERNEL_FLAVOR:  $(KERNEL_FLAVOR)"
-	@echo "KERNEL:         $(KERNEL)"
-	@echo
-
-clean:
-	rm -rf $(MODLOOP) $(MODLOOP_DIR) $(MODLOOP_DIRSTAMP) \
-		$(INITFS) $(INITFS_DIRSTAMP) $(INITFS_DIR) \
-		$(ISO_DIR) $(ISO_REPOS_DIRSTAMP)
-
-
-$(APK_FILES):
-	@mkdir -p "$(dir $@)";\
-	p="$(notdir $(basename $@))";\
-	apk fetch $(APK_REPO) -R -v -o "$(dir $@)" $${p%-[0-9]*}
-#	apk fetch $(APK_OPTS) -R -v -o "$(dir $@)" \
-#		`apk search -q $(APK_OPTS) $(APKS) | sort | uniq`
-
-#
-# Modloop
-#
-MODLOOP		:= $(ISO_DIR)/boot/$(KERNEL_NAME).cmg
-MODLOOP_DIR	:= $(DESTDIR)/modloop
-MODLOOP_KERNELSTAMP := $(DESTDIR)/stamp.modloop.kernel
-MODLOOP_DIRSTAMP := $(DESTDIR)/stamp.modloop
-MODLOOP_EXTRA	?= $(addsuffix -$(KERNEL_FLAVOR), dahdi-linux iscsitarget xtables-addons)
-MODLOOP_PKGS	= $(KERNEL_PKGNAME) $(MODLOOP_EXTRA)
-
-modloop: $(MODLOOP)
-
-$(MODLOOP_KERNELSTAMP):
-	@echo "==> modloop: Unpacking kernel modules";
-	@rm -rf $(MODLOOP_DIR)
-	@mkdir -p $(MODLOOP_DIR)/lib/modules/
-	@for i in $(MODLOOP_PKGS); do \
-		apk fetch $(APK_OPTS) --stdout $$i \
-			| tar -C $(MODLOOP_DIR) -xz; \
-	done
-	@cp $(MODLOOP_DIR)/usr/share/kernel/$(KERNEL_FLAVOR)/kernel.release $@
-
-MODLOOP_KERNEL_RELEASE = $(shell cat $(MODLOOP_KERNELSTAMP))
-
-$(MODLOOP_DIRSTAMP): $(MODLOOP_KERNELSTAMP)
-	@rm -rf $(addprefix $(MODLOOP_DIR)/lib/modules/*/, source build)
-	@depmod $(MODLOOP_KERNEL_RELEASE) -b $(MODLOOP_DIR)
-	@touch $(MODLOOP_DIRSTAMP)
-
-$(MODLOOP): $(MODLOOP_DIRSTAMP)
-	@echo "==> modloop: building image $(notdir $(MODLOOP))"
-	@mkdir -p $(dir $(MODLOOP))
-	@$(MKCRAMFS) $(MODLOOP_DIR)/lib $(MODLOOP)
-
-clean-modloop:
-	@rm -rf $(MODLOOP_DIR) $(MODLOOP_DIRSTAMP) $(MODLOOP_PKGSTAMP) $(MODLOOP)
-
-#
-# Initramfs rules
-#
-
-# isolinux cannot handle - in filenames
-#INITFS_NAME	:= initramfs-$(MODLOOP_KERNEL_RELEASE)
-INITFS_NAME	:= $(KERNEL_FLAVOR).gz
-INITFS		:= $(ISO_DIR)/boot/$(INITFS_NAME)
-
-INITFS_DIR	:= $(DESTDIR)/initfs
-INITFS_TMP	:= $(DESTDIR)/tmp.initfs
-INITFS_DIRSTAMP := $(DESTDIR)/stamp.initfs
-INITFS_FEATURES	:= ata base bootchart cdrom cramfs ext3 floppy raid scsi usb
-INITFS_PKGS	:= $(MODLOOP_PKGS) alpine-base acct
-
-initfs: $(INITFS)
-
-$(INITFS_DIRSTAMP):
-	@rm -rf $(INITFS_DIR) $(INITFS_TMP)
-	@mkdir -p $(INITFS_DIR) $(INITFS_TMP)
-	@for i in `apk fetch $(APK_OPTS) --simulate -R $(INITFS_PKGS) 2>&1\
-			| sed 's:^Downloading ::; s:-[0-9].*::' | sort | uniq`; do \
-		apk fetch $(APK_OPTS) --stdout $$i \
-			| tar -C $(INITFS_DIR) -zx || exit 1; \
-	done
-	@cp -r /etc/apk/keys $(INITFS_DIR)/etc/apk/ || true
-	@touch $@
-
-#$(INITFS):	$(shell mkinitfs -F "$(INITFS_FEATURES)" -l $(KERNEL))
-$(INITFS): $(INITFS_DIRSTAMP) $(MODLOOP_DIRSTAMP)
-	@mkinitfs -F "$(INITFS_FEATURES)" -t $(INITFS_TMP) \
-		-b $(INITFS_DIR) -o $@ $(MODLOOP_KERNEL_RELEASE)
-
-clean-initfs:
-	@rm -rf $(INITFS) $(INITFS_DIRSTAMP) $(INITFS_DIR)
-
-#
-# Vserver template rules
-#
-VSTEMPLATE	:= $(ISO_DIR)/vs-template.tar.bz2
-VSTEMPLATE_DIR 	:= $(DESTDIR)/vs-template
-
-vstemplate: $(VSTEMPLATE)
-	@echo "==> vstemplate: built $(VSTEMPLATE)"
-
-#must be run as root or in fakeroot
-$(VSTEMPLATE):
-	@rm -rf "$(VSTEMPLATE_DIR)"
-	@mkdir -p "$(VSTEMPLATE_DIR)"
-	@apk add $(APK_OPTS) --initdb --root $(VSTEMPLATE_DIR) \
-		alpine-base
-	@cd $(VSTEMPLATE_DIR) && tar -jcf $@ *
-
-#
-# ISO rules
-#
-
-ISOLINUX_DIR	:= boot/isolinux
-ISOLINUX	:= $(ISO_DIR)/$(ISOLINUX_DIR)
-ISOLINUX_BIN	:= $(ISOLINUX)/isolinux.bin
-ISOLINUX_CFG	:= $(ISOLINUX)/isolinux.cfg
-SYSLINUX_CFG	:= $(ISO_DIR)/syslinux.cfg
-
-$(ISOLINUX_BIN):
-	@echo "==> iso: install isolinux"
-	@mkdir -p $(dir $(ISOLINUX_BIN))
-	@if ! apk fetch $(APK_REPO) --stdout syslinux | tar -O -zx usr/share/syslinux/isolinux.bin > $@; then \
-		rm -f $@ && exit 1;\
-	fi
-
-$(ISOLINUX_CFG):
-	@echo "==> iso: configure isolinux"
-	@mkdir -p $(dir $(ISOLINUX_BIN))
-	@echo "timeout 20" >$(ISOLINUX_CFG)
-	@echo "prompt 1" >>$(ISOLINUX_CFG)
-	@echo "default $(KERNEL_NAME)" >>$(ISOLINUX_CFG)
-	@echo "label $(KERNEL_NAME)" >>$(ISOLINUX_CFG)
-	@echo "	kernel /boot/$(KERNEL_NAME)" >>$(ISOLINUX_CFG)
-	@echo "	append initrd=/boot/$(INITFS_NAME) alpine_dev=cdrom:iso9660 modules=loop,cramfs,sd-mod,usb-storage,floppy quiet" >>$(ISOLINUX_CFG)
-
-$(SYSLINUX_CFG): $(MODLOOP_DIRSTAMP)
-	@echo "==> iso: configure syslinux"
-	@echo "timeout 20" >$@
-	@echo "prompt 1" >>$@
-	@echo "default $(KERNEL_NAME)" >>$@
-	@echo "label $(KERNEL_NAME)" >>$@
-	@echo "	kernel /boot/$(KERNEL_NAME)" >>$@
-	@echo "	append initrd=/boot/$(INITFS_NAME) alpine_dev=usbdisk:vfat modules=loop,cramfs,sd-mod,usb-storage quiet" >>$@
-
-clean-syslinux:
-	@rm -f $(SYSLINUX_CFG) $(ISOLINUX_CFG) $(ISOLINUX_BIN)
-
-ISO_KERNEL	:= $(ISO_DIR)/boot/$(KERNEL_NAME)
-ISO_REPOS_DIRSTAMP := $(DESTDIR)/stamp.isorepos
-ISOFS_DIRSTAMP	:= $(DESTDIR)/stamp.isofs
-
-$(ISO_REPOS_DIRSTAMP): $(ISO_PKGDIR)/APKINDEX.tar.gz
-	@touch $(ISO_PKGDIR)/.boot_repository
-	@rm -f $(ISO_PKGDIR)/.SIGN.*
-	@touch $@
-
-$(ISO_PKGDIR)/APKINDEX.tar.gz: $(APK_FILES)
-	@echo "==> iso: generating repository index"
-	@apk index --description "$(ALPINE_NAME) $(ALPINE_RELEASE)" \
-		-o $@ $(ISO_PKGDIR)/*.apk
-	@abuild-sign $@
-
-$(ISO_KERNEL): $(MODLOOP_DIRSTAMP)
-	@echo "==> iso: install kernel $(KERNEL)"
-	@mkdir -p $(dir $(ISO_KERNEL))
-	@apk fetch $(APK_OPTS) --stdout $(KERNEL_PKGNAME) \
-		| tar -C $(ISO_DIR) -xz boot
-	@rm -f $(ISO_DIR)/boot/$(KERNEL_NAME)
-	@ln -s vmlinuz-$(MODLOOP_KERNEL_RELEASE) $@
-	@rm -rf $(ISO_DIR)/.[A-Z]* $(ISO_DIR)/.[a-z]* $(ISO_DIR)/lib
-
-$(ISOFS_DIRSTAMP): $(MODLOOP) $(INITFS) $(ISOLINUX_CFG) $(ISOLINUX_BIN) $(ISO_KERNEL) $(ISO_REPOS_DIRSTAMP) $(SYSLINUX_CFG)
-	@echo "$(ALPINE_NAME)-$(ALPINE_RELEASE) $(BUILD_DATE)" \
-		> $(ISO_DIR)/.alpine-release
-	@touch $@
-
-$(ISO): $(ISOFS_DIRSTAMP)
-	@echo "==> iso: building $(notdir $(ISO))"
-	@genisoimage -o $(ISO) -l -J -R \
-		-b $(ISOLINUX_DIR)/isolinux.bin \
-		-c $(ISOLINUX_DIR)/boot.cat	\
-		-no-emul-boot		\
-		-boot-load-size 4	\
-		-boot-info-table	\
-		-quiet			\
-		-follow-links		\
-		$(ISO_OPTS)		\
-		$(ISO_DIR)
-	@ln -fs $@ $(ISO_LINK)
-
-isofs: $(ISOFS_DIRSTAMP)
-iso: $(ISO)
-
-#
-# SHA1 sum of ISO
-#
-ISO_SHA1	:= $(ISO).sha1
-
-$(ISO_SHA1):	$(ISO)
-	@echo "==> Generating sha1 sum"
-	@sha1sum $(ISO) > $@ || rm -f $@
-
-#
-# USB image
-#
-USBIMG 		:= $(ALPINE_NAME)-$(ALPINE_RELEASE)-$(ALPINE_ARCH).img
-USBIMG_FREE	?= 8192
-USBIMG_SIZE 	= $(shell echo $$(( `du -s $(ISO_DIR) | awk '{print $$1}'` + $(USBIMG_FREE) )) )
-MBRPATH 	:= /usr/share/syslinux/mbr.bin
-
-$(USBIMG): $(ISOFS_DIRSTAMP)
-	@echo "==> Generating $@"
-	@mformat -C -v 'ALPINE' -c 16 -h 64 -n 32 -i $(USBIMG) \
-		-t $$(($(USBIMG_SIZE) / 1000)) ::
-	@syslinux $(USBIMG)
-	@mcopy -i $(USBIMG) $(ISO_DIR)/* $(ISO_DIR)/.[a-z]* ::
-	@mcopy -i $(USBIMG) /dev/zero ::/zero 2>/dev/null || true
-	@mdel -i $(USBIMG) ::/zero
-
-USBIMG_SHA1	:= $(USBIMG).sha1
-$(USBIMG_SHA1):	$(USBIMG)
-	@echo "==> Generating sha1 sum"
-	@sha1sum $(USBIMG) > $@ || rm -f $@
-
-$(ALPINE_NAME).img:	$(USBIMG)
-	@ln -sf $(USBIMG) $@
-
-img:	$(ALPINE_NAME).img
-
-sha1: $(ISO_SHA1) $(USBIMG_SHA1)
-
-release: $(ISO_SHA1)
-
diff --git a/alpine.packages b/alpine.packages
deleted file mode 100644
index e04b582..0000000
--- a/alpine.packages
+++ /dev/null
@@ -1,124 +0,0 @@
-
-dahdi-linux-grsec
-iscsitarget-grsec
-linux-grsec
-xtables-addons-grsec
-
-acct
-acf-*
-amavis
-alpine-base
-alpine-baselayout 
-alpine-conf
-apk-tools
-arpon
-arpwatch
-asterisk
-asterisk-odbc
-asterisk-pgsql
-asterisk-tds
-bbsuid
-bind
-bind-libs
-bind-tools
-bkeymaps
-bridge-utils
-busybox
-bwm-ng
-cksfv
-clamav
-clamsmtp
-conntrack-tools
-cutter
-cyrus-sasl
-dahdi-linux
-dahdi-tools
-dansguardian
-dhcp
-dhcpcd
-dnscache
-dnsmasq
-dosfstools
-dovecot
-e2fsprogs
-email
-espeak
-ethtool
-fetchmail
-fping
-haserl
-htop
-igmpproxy
-ip6tables
-iproute2
-iproute2-qos
-ipsec-tools
-iptables
-iptraf
-iputils
-irssi
-iscsitarget
-lftp
-links
-lm_sensors
-lm_sensors-detect
-logrotate
-lua
-lua-*
-lsof
-lvm2
-man
-mdadm
-mini_httpd
-miniperl
-mkinitfs
-mpg123
-mtools
-nano
-ncurses-terminfo
-net-snmp
-net-snmp-tools
-nmap
-opennhrp
-openntpd
-openrc
-openssh
-openssl
-openvpn
-p7zip
-parted
-pax-utils
-paxctl
-pciutils
-pingu
-ppp
-quagga
-rsync
-screen
-sfdisk
-shorewall*
-snort
-sntpc
-squid
-squid-errors-*
-ssmtp
-strace
-sudo
-sysklogd
-syslinux
-tcpdump
-tcpproxy
-tinydns
-tinyproxy
-transmission-cli
-unfs3
-unrar
-usbutils
-util-linux-ng
-v86d
-vim
-vsftpd
-xfsprogs
-xtables-addons
-zonenotify
-
diff --git a/mkinitram b/mkinitram
deleted file mode 100644
index 2ae21f8..0000000
--- a/mkinitram
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/bin/sh
-
-msg() {
-	echo "==>" $@
-}
-
-die() {
-	echo $@
-	exit 1
-}
-
-unapk() {
-	local dest="$1"
-	shift
-	while [ $# -gt 0 ]; do
-		tar -C "$dest" -zxf "$1"
-		shift
-	done
-	rm -f "$dest/.PKGINFO"
-}
-
-
-APKS=../aports/core/*/
-
-image=$PWD/image
-dest=$PWD/test.gz
-init=init
-
-
-kernel=$1
-# if no kernel specified, then guess...
-if [ -z "$kernel" ]; then
-	kernel=$(ls /lib/modules 2>/dev/null | tail -n 1)
-fi
-
-if [ ! -d /lib/modules/$kernel ]; then
-	die "modules dir /lib/modules/$kernel was not found"
-fi
-msg "mkinitram Using kernel $kernel"
-
-# create empty image dir
-
-rm -rf "$image"
-mkdir -p "$image/dev" "$image/etc/rcS.d"
-
-# unpack busybox and deps
-unapk $image $APKS/uclibc-[0-9]*.apk \
-	$APKS/busybox-[0-9]*.apk \
-	$APKS/alpine-baselayout-[0-9]*.apk \
-	$APKS/apk-tools-[0-9]*.apk
-
-ln -sf /bin/busybox $image/init
-
-# create misc devs and enable boot scripts
-mknod $image/dev/null c 2 2
-ln -s ../init.d/mdev $image/etc/rcS.d/S10mdev
-ln -s ../init.d/hwdrivers $image/etc/rcS.d/S30hwdrivers
-ln -s ../init.d/modutils $image/etc/rcS.d/S40modutils
-ln -s ../init.d/modloop $image/etc/rcS.d/S50modloop
-ln -s ../init.d/hwdrivers $image/etc/rcS.d/S60hwdrivers
-
-mkdir $image/.modloop
-
-# load those extra drivers
-for i in ide-cd usb-storage ide-disk loop; do
-	echo $i >> $image/etc/modules
-done
-
-
-# copy kernel modules
-kmods=$image/lib/modules/$kernel
-mkdir -p $kmods/kernel/drivers $kmods/kernel/fs
-
-for i in acpi ata block ide scsi cdrom usb message hid; do
-	cp -LpR /lib/modules/$kernel/kernel/drivers/$i $kmods/kernel/drivers/
-done
-
-for i in isofs vfat nls ext2 cramfs '*.ko'; do
-	cp -LpR /lib/modules/$kernel/kernel/fs/$i $kmods/kernel/fs/
-done
-cp -LpR /lib/modules/$kernel/kernel/lib $kmods/kernel/
-
-depmod $kernel -b $image
-	
-
-# generate the image
-cd $image
-find . | cpio -o -H newc | gzip -9 > $dest
diff --git a/mkmodloop b/mkmodloop
deleted file mode 100644
index f85b628..0000000
--- a/mkmodloop
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-
-msg() {
-	echo "==>" $@
-}
-
-die() {
-	echo $@
-	exit 1
-}
-
-image=$PWD/modloop
-dest=$PWD/modloop.cmg
-init=init
-
-
-kernel=$1
-# if no kernel specified, then guess...
-if [ -z "$kernel" ]; then
-	kernel=$(ls /lib/modules 2>/dev/null | tail -n 1)
-fi
-
-if [ ! -d /lib/modules/$kernel ]; then
-	die "modules dir /lib/modules/$kernel was not found"
-fi
-msg "Using kernel $kernel"
-
-
-rm -rf "$image"
-mkdir -p "$image/lib/modules"
-cp -alf /lib/modules/$kernel $image/lib/modules/
-
-depmod -b "$image" $kernel
-
-rm -f $image/lib/modules/$kernel/source $image/lib/modules/$kernel/build
-
-mkcramfs $image/lib $dest
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:15 -0400

---
 abuild-sign.in | 47 +++++++++++++++++++++++++----------------------
 1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/abuild-sign.in b/abuild-sign.in
index 3ff32e0..73aabc7 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -18,6 +18,30 @@ die() {
 	exit 1
 }
 
+do_sign() {
+	# we are actually only interested in the name, not the file itself
+	keyname=${pubkey##*/}
+
+	for f; do
+		i=$(readlink -f $f)
+		[ -d "$i" ] && i="$i/APKINDEX.tar.gz"
+		repo="${i%/*}"
+		cd "$repo" || die "Failed to sign $i"
+		sig=".SIGN.RSA.$keyname"
+		openssl dgst -sha1 -sign "$privkey" -out "$sig" "$i" || die "Failed to sign $i"
+		tmptargz=$(mktemp)
+		tar -c "$sig" | abuild-tar --cut | gzip -9 > "$tmptargz"
+		tmpsigned=$(mktemp)
+		cat "$tmptargz" "$i" > "$tmpsigned"
+		rm -f "$tmptargz" "$sig"
+		mv "$tmpsigned" "$i"
+		chmod 644 "$i"
+		if [ -z "$quiet" ]; then
+			echo "Signed $i"
+		fi
+	done
+}
+
 usage() {
 	echo "abuild-sign $abuild_ver"
 	echo "usage: abuild-sign [-hq] [-k PRIVKEY] [-p PUBKEY] INDEXFILE..."
@@ -61,26 +85,5 @@ if [ -z "$pubkey" ]; then
 	pubkey=${PACKAGER_PUBKEY:-"${privkey}.pub"}
 fi
 
-# we are actually only interested in the name, not the file itself
-keyname=${pubkey##*/}
-
-for f in "$@"; do
-	i=$(readlink -f $f)
-	[ -d "$i" ] && i="$i/APKINDEX.tar.gz"
-	repo="${i%/*}"
-	cd "$repo" || die "Failed to sign $i"
-	sig=".SIGN.RSA.$keyname"
-	openssl dgst -sha1 -sign "$privkey" -out "$sig" "$i" || die "Failed to sign $i"
-	tmptargz=$(mktemp)
-	tar -c "$sig" | abuild-tar --cut | gzip -9 > "$tmptargz"
-	tmpsigned=$(mktemp)
-	cat "$tmptargz" "$i" > "$tmpsigned"
-	rm -f "$tmptargz" "$sig"
-	mv "$tmpsigned" "$i"
-	chmod 644 "$i"
-	if [ -z "$quiet" ]; then
-		echo "Signed $i"
-	fi
-done
-
+do_sign "$@"
 exit 0
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:14 -0400

---
 abuild-keygen.in | 119 ++++++++++++++++++++++++++++---------------------------
 1 file changed, 61 insertions(+), 58 deletions(-)

diff --git a/abuild-keygen.in b/abuild-keygen.in
index a095068..3cf5531 100644
--- a/abuild-keygen.in
+++ b/abuild-keygen.in
@@ -22,6 +22,20 @@ msg() {
 # ask for privkey unless non-interactive mode
 # returns value in global $privkey
 get_privkey_file() {
+	emailaddr=${PACKAGER##*<}
+	emailaddr=${emailaddr%%>*}
+
+	# if PACKAGER does not contain a valid email address, then ask git
+	if [ -z "$emailaddr" ] || [ "${emailaddr##*@}" = "$emailaddr" ]; then
+		emailaddr=$(git config --get user.email 2>/dev/null)
+	fi
+
+	if [ -n "$emailaddr" ]; then
+		default_name="$emailaddr-$(printf "%x" $(date +%s))"
+	else
+		default_name="$USER-$(printf "%x" $(date +%s))"
+	fi
+
 	privkey="$abuild_home/$default_name.rsa"
 	[ "$non_interactive" = "yes" ] && return 0
 	echo "Generating public/private rsa key pair for abuild"
@@ -33,6 +47,52 @@ get_privkey_file() {
 	fi
 }
 
+do_keygen() {
+	mkdir -p "$abuild_home"
+
+	get_privkey_file
+	pubkey="$privkey.pub"
+
+	# generate the private key in a subshell with stricter umask
+	(
+	umask 0007
+	openssl genrsa -out "$privkey" 2048
+	)
+	openssl rsa -in "$privkey" -pubout -out "$pubkey"
+
+
+	if [ -n "$install_pubkey" ]; then
+		msg "Installing $pubkey to /etc/apk/keys..."
+		sudo mkdir -p /etc/apk/keys
+		sudo cp -i "$pubkey" /etc/apk/keys/
+	else
+
+		msg ""
+		msg "You'll need to install $pubkey into "
+		msg "/etc/apk/keys to be able to install packages and repositories signed with"
+		msg "$privkey"
+	fi
+
+	if [ -n "$append_config" ]; then
+		if [ -f "$abuild_userconf" ]; then
+			# comment out the existing values
+			sed -i -e 's/^\(PACKAGER_PRIVKEY=.*\)/\#\1/' "$abuild_userconf"
+		fi
+		echo "PACKAGER_PRIVKEY=\"$privkey\"" >> "$abuild_userconf"
+	else
+		msg ""
+		msg "You might want add following line to $abuild_userconf:"
+		msg ""
+		msg "PACKAGER_PRIVKEY=\"$privkey\""
+		msg ""
+	fi
+
+	msg ""
+	msg "Please remember to make a safe backup of your private key:"
+	msg "$privkey"
+	msg ""
+}
+
 # print usage and exit
 usage() {
 	echo "abuild-keygen $abuild_ver"
@@ -53,20 +113,6 @@ usage() {
 # read user config if exists
 [ -f "$abuild_userconf" ] && . "$abuild_userconf"
 
-emailaddr=${PACKAGER##*<}
-emailaddr=${emailaddr%%>*}
-
-# if PACKAGER does not contain a valid email address, then ask git
-if [ -z "$emailaddr" ] || [ "${emailaddr##*@}" = "$emailaddr" ]; then
-	emailaddr=$(git config --get user.email 2>/dev/null)
-fi
-
-if [ -n "$emailaddr" ]; then
-	default_name="$emailaddr-$(printf "%x" $(date +%s))"
-else
-	default_name="$USER-$(printf "%x" $(date +%s))"
-fi
-
 while getopts "ahinq" opt; do
 	case $opt in
 	a) append_config=yes;;
@@ -78,47 +124,4 @@ while getopts "ahinq" opt; do
 done
 shift $(( $OPTIND - 1))
 
-mkdir -p "$abuild_home"
-
-get_privkey_file
-pubkey="$privkey.pub"
-
-# generate the private key in a subshell with stricter umask
-(
-umask 0007
-openssl genrsa -out "$privkey" 2048
-)
-openssl rsa -in "$privkey" -pubout -out "$pubkey"
-
-
-if [ -n "$install_pubkey" ]; then
-	msg "Installing $pubkey to /etc/apk/keys..."
-	sudo mkdir -p /etc/apk/keys
-	sudo cp -i "$pubkey" /etc/apk/keys/
-else
-
-	msg ""
-	msg "You'll need to install $pubkey into "
-	msg "/etc/apk/keys to be able to install packages and repositories signed with"
-	msg "$privkey"
-fi
-
-if [ -n "$append_config" ]; then
-	if [ -f "$abuild_userconf" ]; then
-		# comment out the existing values
-		sed -i -e 's/^\(PACKAGER_PRIVKEY=.*\)/\#\1/' "$abuild_userconf"
-	fi
-	echo "PACKAGER_PRIVKEY=\"$privkey\"" >> "$abuild_userconf"
-else
-	msg ""
-	msg "You might want add following line to $abuild_userconf:"
-	msg ""
-	msg "PACKAGER_PRIVKEY=\"$privkey\""
-	msg ""
-fi
-
-msg ""
-msg "Please remember to make a safe backup of your private key:"
-msg "$privkey"
-msg ""
-
+do_keygen
-- 
1.8.3.1

---

---

From: Natanael Copa <[email-masked]>
Date: Mon, 8 Jul 2013 16:55:29 +0200

Thanks a bunch for those patches.

I have applied 1-4 so far.

On Fri,  5 Jul 2013 00:21:14 -0400

>  1 file changed, 61 insertions(+), 58 deletions(-)

Could you please give some explanation why we refactor? Possibly a new
patch with the explanation in commit message. You can also just say it
here and I'll git commit --amend it.

(same with [PATCH 06/31] abuild-sign: refactor)

Thanks!
-nc

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:20 -0400

* make vars local
* refactor calculation of default_name
* make non_interactive=1
* tweak error message
* tweak sed command
---
 abuild-keygen.in | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/abuild-keygen.in b/abuild-keygen.in
index 34af0ee..bf9d105 100644
--- a/abuild-keygen.in
+++ b/abuild-keygen.in
@@ -19,6 +19,7 @@ fi
 # ask for privkey unless non-interactive mode
 # returns value in global $privkey
 get_privkey_file() {
+	local emailaddr default_name
 	emailaddr=${PACKAGER##*<}
 	emailaddr=${emailaddr%%>*}
 
@@ -27,16 +28,12 @@ get_privkey_file() {
 		emailaddr=$(git config --get user.email 2>/dev/null)
 	fi
 
-	if [ -n "$emailaddr" ]; then
-		default_name="$emailaddr-$(printf "%x" $(date +%s))"
-	else
-		default_name="$USER-$(printf "%x" $(date +%s))"
-	fi
+	default_name="${emailaddr:-$USER}-$(printf "%x" $(date +%s))"
 
 	privkey="$abuild_home/$default_name.rsa"
-	[ "$non_interactive" = "yes" ] && return 0
+	[ -n "$non_interactive" ] && return 0
 	echo "Generating public/private rsa key pair for abuild"
-	echo -n "Enter file in which to save the key ($abuild_home/$default_name.rsa): "
+	echo -n "Enter file in which to save the key [$privkey]: "
 
 	read line
 	if [ -n "$line" ]; then
@@ -73,7 +70,7 @@ do_keygen() {
 	if [ -n "$append_config" ]; then
 		if [ -f "$abuild_userconf" ]; then
 			# comment out the existing values
-			sed -i -e 's/^\(PACKAGER_PRIVKEY=.*\)/\#\1/' "$abuild_userconf"
+			sed -i -e 's/^PACKAGER_PRIVKEY=/\#&/' "$abuild_userconf"
 		fi
 		echo "PACKAGER_PRIVKEY=\"$privkey\"" >> "$abuild_userconf"
 	else
@@ -119,7 +116,7 @@ while true; do
 	case $1 in
 		-a|--append) append_config=1;;
 		-i|--install) install_pubkey=1;;
-		-n) non_interactive=yes;;
+		-n) non_interactive=1;;
 		-q|--quiet) quiet=1;; # suppresses msg
 		-h|--help) usage; exit;;
 		--) shift; break;;
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:13 -0400

Also remove incomplete efforts at listing "Depends on: ..."
---
 abuild-keygen.in | 4 +---
 abuild-sign.in   | 4 +---
 abuild.in        | 4 +---
 apkgrel.in       | 2 +-
 newapkbuild.in   | 6 ++----
 5 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/abuild-keygen.in b/abuild-keygen.in
index 93d1ea2..a095068 100644
--- a/abuild-keygen.in
+++ b/abuild-keygen.in
@@ -1,12 +1,10 @@
 #!/bin/sh
 
-# generate signing keys 
+# abuild-keygen - generate signing keys
 # Copyright (c) 2009 Natanael Copa <[email-masked]>
 #
 # Distributed under GPL-2
 #
-# Depends on: busybox utilities, fakeroot, 
-#
 
 abuild_ver=@VERSION@
 sysconfdir=@sysconfdir@
diff --git a/abuild-sign.in b/abuild-sign.in
index aea651f..3ff32e0 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -1,12 +1,10 @@
 #!/bin/sh
 
-# sign indexes
+# abuild-sign - sign indexes
 # Copyright (c) 2009 Natanael Copa <[email-masked]>
 #
 # Distributed under GPL-2
 #
-# Depends on: busybox utilities, fakeroot, 
-#
 
 abuild_ver=@VERSION@
 sysconfdir=@sysconfdir@
diff --git a/abuild.in b/abuild.in
index e51282d..ba51c79 100755
--- a/abuild.in
+++ b/abuild.in
@@ -1,12 +1,10 @@
 #!/bin/sh
 
-# script to build apk packages (light version of makepkg)
+# abuild - build apk packages (light version of makepkg)
 # Copyright (c) 2008 Natanael Copa <[email-masked]>
 #
 # Distributed under GPL-2
 #
-# Depends on: busybox utilities, fakeroot
-#
 
 abuild_ver=@VERSION@
 sysconfdir=@sysconfdir@
diff --git a/apkgrel.in b/apkgrel.in
index 3feb4f3..0934847 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -27,7 +27,7 @@ do_add () {
 		old=$(do_show "$f")
 		setto=$(($old + 1))
 		do_set "$f" || return 1
-	done	
+	done
 }
 
 do_verify() {
diff --git a/newapkbuild.in b/newapkbuild.in
index 0a0d433..1a41ae9 100755
--- a/newapkbuild.in
+++ b/newapkbuild.in
@@ -1,12 +1,10 @@
 #!/bin/sh
 #
-# Script to generate a new APKBUILD
+# newapkbuild - generate a new APKBUILD
 # Copyright (c) 2009 Natanael Copa <[email-masked]>
 #
 # Distributed under GPL-2
 #
-# Depends on: busybox utilities, fakeroot, 
-#
 
 version=@VERSION@
 sysconfdir=@sysconfdir@
@@ -297,7 +295,7 @@ while getopts "acd:fhl:n:pyu:s" opt; do
 done
 shift $(( $OPTIND - 1 ))
 
-while [ $# -gt 0 ]; do 
+while [ $# -gt 0 ]; do
 	newaport $1 || exit 1
 	shift
 done
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:18 -0400

as discussed in http://lists.alpinelinux.org/alpine-devel/3122.html
---
 Makefile | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/Makefile b/Makefile
index 3afe995..2ceef85 100644
--- a/Makefile
+++ b/Makefile
@@ -19,9 +19,6 @@ SAMPLES		:= sample.APKBUILD sample.initd sample.confd \
 
 SCRIPT_SOURCES	:= $(addsuffix .in,$(SCRIPTS))
 
-DISTFILES=$(SCRIPT_SOURCES) $(SAMPLES) Makefile abuild.conf \
-		functions.sh.in abuild-tar.c abuild-sudo.c aports.lua
-
 GIT_REV		:= $(shell test -d .git && git describe || echo exported)
 ifneq ($(GIT_REV), exported)
 FULL_VERSION    := $(patsubst $(PACKAGE)-%,%,$(GIT_REV))
@@ -83,7 +80,6 @@ abuild-tar.static: abuild-tar.o
 help:
 	@echo "$(P) makefile"
 	@echo "usage: make install [ DESTDIR=<path> ]"
-	@echo "       make dist"
 
 install: $(USR_BIN_FILES) $(SAMPLES) abuild.conf functions.sh aports.lua
 	install -d $(DESTDIR)/$(bindir) $(DESTDIR)/$(sysconfdir) \
@@ -103,15 +99,6 @@ install: $(USR_BIN_FILES) $(SAMPLES) abuild.conf functions.sh aports.lua
 	mkdir -p $(DESTDIR)$(LUA_SHAREDIR)
 	cp aports.lua $(DESTDIR)$(LUA_SHAREDIR)/
 
-dist:	$(P).tar.bz2
-
-$(P).tar.bz2:	$(DISTFILES)
-	rm -rf $(P)
-	mkdir -p $(P)
-	cp $(DISTFILES) $(P)/
-	tar -cjf $@ $(P)
-	rm -rf $(P)
-
 .gitignore: Makefile
 	echo "*.tar.bz2" > $@
 	for i in $(USR_BIN_FILES); do\
@@ -119,4 +106,4 @@ $(P).tar.bz2:	$(DISTFILES)
 	done

-.PHONY: install dist
+.PHONY: install
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:26 -0400

---
 abump.in | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/abump.in b/abump.in
index 72afdbc..1d4e1e4 100755
--- a/abump.in
+++ b/abump.in
@@ -18,14 +18,15 @@ fi
 
 # version bump packages
 do_bump() {
-	local p pkgname pkgver section upgrade cve message
+	local p rc=0 pkgname pkgver section upgrade cve message
 	for p; do
 		pkgname=${p%-[0-9]*}
 		pkgver=${p#${pkgname}-}
 
+		(
 		set -e
 
-		cd $HOME/aports/*/$pkgname || exit 1
+		cd $HOME/aports/*/$pkgname
 		section=${PWD%/*} upgrade="upgrade" cve=
 		section=${section##*/}
 		if [ -n "$cvelist" ]; then
@@ -48,11 +49,13 @@ fixes #${fixes#\#}
 			-e "s/^pkgrel=.*/pkgrel=0/" \
 			APKBUILD
 
-		abuild $abuild_opts checksum all || exit 1
+		abuild $abuild_opts checksum all
 
 		git add APKBUILD
 		git commit -m"$message"
+		) || rc=1
 	done
+	return $rc
 }
 
 usage() {
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:19 -0400

---
 abuild-keygen.in | 54 +++++++++++++++++++++++++++++++------------------
 abuild-sign.in   | 45 ++++++++++++++++++++++++++++-------------
 abump.in         | 53 ++++++++++++++++++++++++++++++++----------------
 apkgrel.in       | 61 ++++++++++++++++++++++++++++++++------------------------
 checkapk.in      | 12 +++++++++++
 newapkbuild.in   | 35 ++++++++++++++++----------------
 6 files changed, 167 insertions(+), 93 deletions(-)

diff --git a/abuild-keygen.in b/abuild-keygen.in
index 9b748d3..34af0ee 100644
--- a/abuild-keygen.in
+++ b/abuild-keygen.in
@@ -90,30 +90,46 @@ do_keygen() {
 	msg ""
 }
 
-# print usage and exit
 usage() {
-	echo "abuild-keygen $abuild_ver"
-	echo "usage: abuild-keygen [-ih]"
-	echo "options:"
-	echo " -a  Set PACKAGER_PRIVKEY=<generated key> in $abuild_userconf"
-	echo " -i  Install public key into /etc/apk/keys using sudo"
-	echo " -h  Show this help"
-	echo " -n  Non-interactive. Use defaults"
-	echo " -q  Quiet mode"
-	echo ""
-	exit 1
+	cat >&2 <<__EOF__
+$prog $abuild_ver - generate signing keys
+Usage: $prog [-a|--append] [-i|--install] [-n]
+Options:
+  -a, --append   Set PACKAGER_PRIVKEY=<generated key> in $abuild_userconf
+  -i, --install  Install public key into /etc/apk/keys using sudo
+  -n             Non-interactive. Use defaults
+  -q, --quiet
+  -h, --help     Show this help
+
+__EOF__
 }
 
+append_config=
+install_pubkey=
+non_interactive=
+quiet=
 
-while getopts "ahinq" opt; do
-	case $opt in
-	a) append_config=yes;;
-	h) usage;;
-	i) install_pubkey=yes;;
-	n) non_interactive=yes;;
-	q) quiet=-quiet;;
+args=`getopt -o ainqh --long append,install,quiet,help -n "$prog" -- "$@"`
+if [ $? -ne 0 ]; then
+	usage
+	exit 2
+fi
+eval set -- "$args"
+while true; do
+	case $1 in
+		-a|--append) append_config=1;;
+		-i|--install) install_pubkey=1;;
+		-n) non_interactive=yes;;
+		-q|--quiet) quiet=1;; # suppresses msg
+		-h|--help) usage; exit;;
+		--) shift; break;;
+		*) exit 1;; # getopt error
 	esac
+	shift
 done
-shift $(( $OPTIND - 1))
+if [ $# -ne 0 ]; then
+	usage
+	exit 2
+fi
 
 do_keygen
diff --git a/abuild-sign.in b/abuild-sign.in
index 3260e53..b5250af 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -40,26 +40,43 @@ do_sign() {
 }
 
 usage() {
-	echo "abuild-sign $abuild_ver"
-	echo "usage: abuild-sign [-hq] [-k PRIVKEY] [-p PUBKEY] INDEXFILE..."
-	echo "options:"
-	echo " -h  Show this help"
-	echo " -k  The private key to use for signing"
-	echo " -p  The name of public key. apk add will look for /etc/apk/keys/PUBKEY"
-	exit 1
+	cat >&2 <<__EOF__
+$prog $abuild_ver - sign indexes
+Usage: $prog [-k PRIVKEY] [-p PUBKEY] INDEXFILE...
+Options:
+  -k, --private KEY  The private key to use for signing
+  -p, --public KEY   The name of public key. apk add will look for /etc/apk/keys/KEY
+  -q, --quiet
+  -h, --help         Show this help
+
+__EOF__
 }
 
+pubkey=
+quiet=
 
-while getopts "hk:p:q" opt; do
-	case $opt in
-	h) usage;;
-	k) privkey=$OPTARG;;
-	p) pubkey=$OPTARG;;
-	q) quiet=yes;;
+args=`getopt -o k:p:qh --long private:,public:,quiet,help -n "$prog" -- "$@"`
+if [ $? -ne 0 ]; then
+	usage
+	exit 2
+fi
+eval set -- "$args"
+while true; do
+	case $1 in
+		-k|--private) privkey=$2; shift;;
+		-p|--public) pubkey=$2; shift;;
+		-q|--quiet) quiet=1;; # suppresses msg
+		-h|--help) usage; exit;;
+		--) shift; break;;
+		*) exit 1;; # getopt error
 	esac
+	shift
 done
-shift $(( $OPTIND - 1))
+if [ $# -eq 0 ]; then
+	usage
+	exit 2
+fi
 
 if [ -z "$privkey" ]; then
 	echo "No private key found. Use 'abuild-keygen' to generate the keys"
diff --git a/abump.in b/abump.in
index 32ff4af..3b501e3 100755
--- a/abump.in
+++ b/abump.in
@@ -56,29 +56,48 @@ fixes #${fixes#\#}
 }
 
 usage() {
-	echo "$prog - utility to bump pkgver in APKBUILDs"
-	echo "usage: $prog [-hR] [-s CVE-1,CVE-2,...] [-f ISSUE]"
-	echo ""
-	echo "  -h  show this help"
-	echo "  -R  run abuild with -R for recursive building"
-	echo "  -k  keep existing packages"
-	echo "  -s  security update"
-	echo "  -f  fixes ISSUE"
-	exit 0
+	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__
 }
 
 keep=
 recursive="-r"
-while getopts "f:hkRs:" opt; do
-	case $opt in
-	f) fixes="${OPTARG}";;
-	h) usage;;
-	k) keep="-k";;
-	R) recursive="-R";;
-	s) cvelist="$OPTARG";;
+cvelist=
+fixes=
+
+args=`getopt -o s:Rkqh --long security:,recursive,keep,quiet,help -n "$prog" -- "$@"`
+if [ $? -ne 0 ]; then
+	usage
+	exit 2
+fi
+eval set -- "$args"
+while true; do
+	case $1 in
+		-s|--security) cvelist="$2"; shift;;
+		-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
 	esac
+	shift
 done
-shift $(( $OPTIND - 1))
+if [ $# -eq 0 ]; then
+	usage
+	exit 2
+fi
 
 abuild_opts="$recursive $keep"
 
diff --git a/apkgrel.in b/apkgrel.in
index 46e189f..57b3b93 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -55,42 +55,51 @@ do_nothing() {
 	return 0
 }
 
-do_usage() {
-	cat <<__EOF__
-Usage: $prog -a|-h|-s NUM|-t|-z [-f] FILE...
-Commands:
-  -a  Add 1 to current pkgrel
-  -g  Only do the change on files that have clean git status
-  -h  Show this help
-  -s  Set pkgrel to NUM
-  -t  Only verify that files are in proper format
-  -z  Set pkgrel to 0
-
+usage() {
+	cat >&2 <<__EOF__
+$prog $abuild_ver - display or bump pkgrel in APKBUILDs
+Usage: $prog [-z|--zero] [-a|--add] [-g|--clean-git] [-s|--set NUM] [-t|--test] [-f|--force] DIR or APKBUILD...
 Options:
-  -f  Force, even if given files are not in proper format
+  -z, --zero       Set pkgrel to 0
+  -a, --add        Add 1 to current pkgrel
+  -g, --clean-git  Only operate on APKBUILDs with clean git status
+  -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
 
 __EOF__
 }
 
 cmd=do_show
 force=
-while getopts "afghs:tz" opt; do
-	case $opt in
-	a) cmd=do_add;;
-	g) only_clean_git=1;;
-	f) force=1;;
-	h) cmd=do_usage;;
-	s) setto=$OPTARG; cmd=do_set;;
-	t) cmd=do_nothing;;
-	z) setto=0; cmd=do_set;;
+setto=
+only_clean_git=
+
+args=`getopt -o zags:tfqh --long zero,add,clean-git,set:,test,force,quiet,help -n "$prog" -- "$@"`
+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;;
+		-g|--clean-git) 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
 	esac
+	shift
 done
-
-shift $(( $OPTIND - 1))
-
 if [ $# -eq 0 ]; then
-	do_usage
-	exit 1
+	usage
+	exit 2
 fi
 
 do_verify "$@" || exit 1
diff --git a/checkapk.in b/checkapk.in
index e95249e..2953b8b 100644
--- a/checkapk.in
+++ b/checkapk.in
@@ -16,8 +16,20 @@ fi
 . "$datadir/functions.sh"

+usage() {
+	cat >&2 <<__EOF__
+$prog $abuild_ver - find ABI breakages in package upgrades
+Usage: $prog
 
+Run in the directory of a built package.
 
+__EOF__
+}
+
+if [ $# -gt 0 ]; then
+	usage
+	exit 2
+fi
 
 if ! [ -f "$abuild_conf" ] && ! [ -f "$abuild_userconf" ]; then
 	die "no abuild.conf found"
diff --git a/newapkbuild.in b/newapkbuild.in
index 0f95f19..1b65815 100755
--- a/newapkbuild.in
+++ b/newapkbuild.in
@@ -253,22 +253,23 @@ __EOF__
 }
 
 usage() {
-	echo "$prog $abuild_ver"
-	echo "usage: $prog [-cfh] [-d DESC] [-l LICENSE] [-n NAME] [-u URL] PKGNAME[-PKGVER]|SRCURL"
-	echo "Options:"
-	echo " -a  Create autotools (use ./configure ...)"
-	echo " -c  Copy a sample init.d, conf.d, and install script to new directory"
-	echo " -d  Set package description (pkgdesc) to DESC"
-	echo " -f  Force even if directory already exist"
-	echo " -h  Show this help"
-	echo " -l  Set package license to LICENSE"
-	echo " -n  Set package name to NAME"
-	echo " -p  Create perl package (Assume Makefile.PL is there)"
-	echo " -y  Create python package (Assume setup.py is there)"
-	echo " -u  Set package URL"
-	echo " -s  Use sourceforge source URL"
-	echo ""
-	exit 0
+	cat >&2 <<__EOF__
+$prog $abuild_ver - generate a new APKBUILD
+Usage: $prog [-cfh] [-d DESC] [-l LICENSE] [-n NAME] [-u URL] PKGNAME[-PKGVER]|SRCURL
+Options:
+  -n  Set package name to NAME
+  -d  Set package description (pkgdesc) to DESC
+  -l  Set package license to LICENSE
+  -u  Set package URL
+  -a  Create autotools (use ./configure ...)
+  -p  Create perl package (Assume Makefile.PL is there)
+  -y  Create python package (Assume setup.py is there)
+  -s  Use sourceforge source URL
+  -c  Copy a sample init.d, conf.d, and install script to new directory
+  -f  Force even if directory already exist
+  -h  Show this help
+
+__EOF__
 }
 
 while getopts "acd:fhl:n:pyu:s" opt; do
@@ -277,7 +278,7 @@ while getopts "acd:fhl:n:pyu:s" opt; do
 		'c') cpinitd=1;;
 		'd') pkgdesc="$OPTARG";;
 		'f') force=1;;
-		'h') usage;;
+		'h') usage; exit;;
 		'l') license="$OPTARG";;
 		'n') pkgname="$OPTARG";;
 		'p') buildtype="perl";;
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:23 -0400

---
 abuild-sign.in | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/abuild-sign.in b/abuild-sign.in
index 777114a..6207aab 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -25,9 +25,11 @@ do_sign() {
 		i=$(readlink -f $f)
 		[ -d "$i" ] && i="$i/APKINDEX.tar.gz"
 		repo="${i%/*}"
-		cd "$repo" || die "Failed to sign $i"
+		(
+		set -e
+		cd "$repo"
 		sig=".SIGN.RSA.$keyname"
-		openssl dgst -sha1 -sign "$privkey" -out "$sig" "$i" || die "Failed to sign $i"
+		openssl dgst -sha1 -sign "$privkey" -out "$sig" "$i"
 		tmptargz=$(mktemp)
 		tar -c "$sig" | abuild-tar --cut | gzip -9 > "$tmptargz"
 		tmpsigned=$(mktemp)
@@ -38,6 +40,7 @@ do_sign() {
 		if [ -z "$quiet" ]; then
 			echo "Signed $i"
 		fi
+		) || die "Failed to sign $i"
 	done
 }
 
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:25 -0400

---
 abump.in | 57 +++++++++++++++++++++++++++------------------------------
 1 file changed, 27 insertions(+), 30 deletions(-)

diff --git a/abump.in b/abump.in
index 3b501e3..72afdbc 100755
--- a/abump.in
+++ b/abump.in
@@ -16,43 +16,43 @@ fi
 . "$datadir/functions.sh"

-# version bump a pkg
-
+# version bump packages
 do_bump() {
-	local pkgname=${1%-[0-9]*}
-	local pkgver=${1#${pkgname}-}
-
-	APORTS=$HOME/aports
+	local p pkgname pkgver section upgrade cve message
+	for p; do
+		pkgname=${p%-[0-9]*}
+		pkgver=${p#${pkgname}-}
 
-	set -e
+		set -e
 
-	cd $APORTS/*/$pkgname || return 1
-	local section=${PWD%/*} upgrade="upgrade" cve=
-	section=${section##*/}
-	if [ -n "$cvelist" ]; then
-		upgrade="security upgrade"
-		cve=" ($cvelist)"
-	fi
+		cd $HOME/aports/*/$pkgname || exit 1
+		section=${PWD%/*} upgrade="upgrade" cve=
+		section=${section##*/}
+		if [ -n "$cvelist" ]; then
+			upgrade="security upgrade"
+			cve=" ($cvelist)"
+		fi
 
-	message="$section/$pkgname: $upgrade to ${pkgver}${cve}"
-	if [ -n "$fixes" ]; then
-		message="$message
+		message="$section/$pkgname: $upgrade to ${pkgver}${cve}"
+		if [ -n "$fixes" ]; then
+			message="$message
 
 fixes #${fixes#\#}
 "
-	fi
-	echo "$message"
+		fi
+		echo "$message"
 
-	( . ./APKBUILD; type package | grep -q function ) || die "package() missing"
+		( . ./APKBUILD; type package | grep -q function ) || die "package() missing"
 
-	sed -i -e "s/^pkgver=.*/pkgver=$pkgver/" \
-		-e "s/^pkgrel=.*/pkgrel=0/" \
-		APKBUILD
+		sed -i -e "s/^pkgver=.*/pkgver=$pkgver/" \
+			-e "s/^pkgrel=.*/pkgrel=0/" \
+			APKBUILD
 
-	abuild $abuild_opts checksum all || exit 1
+		abuild $abuild_opts checksum all || exit 1
 
-	git add APKBUILD
-	git commit -m"$message"
+		git add APKBUILD
+		git commit -m"$message"
+	done
 }
 
 usage() {
@@ -101,8 +101,5 @@ fi

-while [ $# -gt 0 ]; do
-	( do_bump "$1" ) || exit 1
-	shift
-done
+do_bump "$@"
 
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:22 -0400

---
 abuild-sign.in | 2 ++

diff --git a/abuild-sign.in b/abuild-sign.in
index 3303750..777114a 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -16,6 +16,8 @@ fi
 . "$datadir/functions.sh"
 
 do_sign() {
+	local f i keyname repo
+
 	keyname=${pubkey##*/}
 
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:17 -0400

---
 Makefile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 5587c9a..3afe995 100644
--- a/Makefile
+++ b/Makefile
@@ -19,7 +19,8 @@ SAMPLES		:= sample.APKBUILD sample.initd sample.confd \

-DISTFILES=$(SCRIPT_SOURCES) $(SAMPLES) Makefile abuild.conf 
+DISTFILES=$(SCRIPT_SOURCES) $(SAMPLES) Makefile abuild.conf \
+		functions.sh.in abuild-tar.c abuild-sudo.c aports.lua

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:35 -0400

---
 apkgrel.in | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/apkgrel.in b/apkgrel.in
index 645637d..83c89fd 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -43,9 +43,9 @@ do_set() {
 
 do_add () {
 	local f= old=
-	for f in "$@"; do
+	for f; do
 		[ -n "$only_clean_git" ] \
-			&& [ -n "$(git diff --name-only $f)" ] \
+			&& [ -n "$(git diff --name-only "$f")" ] \
 			&& continue
 		[ -d "$f" ] && f="$f/APKBUILD"
 		old=$(show_plain "$f")
@@ -57,7 +57,7 @@ do_add () {
 do_verify() {
 	[ -n "$force" ] && return 0
 	local f= rc=0
-	for f in "$@"; do
+	for f; do
 		[ -d "$f" ] && f="$f/APKBUILD"
 		if ! grep -q '^pkgrel=[0-9]' "$f"; then
 			echo "$f: Has no proper pkgrel" >&2
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:24 -0400

---
 abuild-sign.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/abuild-sign.in b/abuild-sign.in
index 6207aab..96a1826 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -35,8 +35,8 @@ do_sign() {
 		tmpsigned=$(mktemp)
 		cat "$tmptargz" "$i" > "$tmpsigned"
 		rm -f "$tmptargz" "$sig"
+		chmod 644 "$tmpsigned"
 		mv "$tmpsigned" "$i"
-		chmod 644 "$i"
 		if [ -z "$quiet" ]; then
 			echo "Signed $i"
 		fi
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:27 -0400

---
 abump.in | 2 +-

diff --git a/abump.in b/abump.in
index 1d4e1e4..33d962d 100755
--- a/abump.in
+++ b/abump.in
@@ -49,7 +49,7 @@ fixes #${fixes#\#}
 			-e "s/^pkgrel=.*/pkgrel=0/" \
 			APKBUILD
 
-		abuild $abuild_opts checksum all
+		abuild $abuild_opts checksum all clean
 
 		git add APKBUILD
 		git commit -m"$message"
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:34 -0400

---
 apkgrel.in | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/apkgrel.in b/apkgrel.in
index 28978e3..645637d 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -16,8 +16,24 @@ fi
 . "$datadir/functions.sh"

+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 "$1: no pkgname"
+	printf '%s: r%s\n' "$pkgname" "${pkgrel:-?}"
+	)
+}
+
 do_show() {
-	awk -F= '$1 == "pkgrel" { print $2 }' "$@"
+	local f=
+	# show_pretty is more informative, but would change the output format of this script
+	for f; do show_plain "$f"; done
 }
 
 do_set() {
@@ -32,7 +48,7 @@ do_add () {
 			&& [ -n "$(git diff --name-only $f)" ] \
 			&& continue
 		[ -d "$f" ] && f="$f/APKBUILD"
-		old=$(do_show "$f")
+		old=$(show_plain "$f")
 		setto=$(($old + 1))
 		do_set "$f" || return 1
 	done
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:31 -0400

---
 abump.in | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/abump.in b/abump.in
index f25a4ea..81b2705 100755
--- a/abump.in
+++ b/abump.in
@@ -37,6 +37,12 @@ do_bump() {
 		. "$a" || exit 1
 		[ "$pkgname" = "$name" ] || die "$name: APKBUILD has different \$pkgname"
 		type package | grep -q function || die "$name: missing package()"
+		case $(apk version --test "$pkgver" "$ver") in
+		'=') die "$pkgname: already at version $pkgver";;
+		'>') die "$pkgname: already at newer version $pkgver";;
+		'<') exit 0;;
+		*) exit 1;;
+		esac
 		) || { rc=1; continue; }
 
 		(
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:33 -0400

---
 apkgrel.in | 7 +++++--

diff --git a/apkgrel.in b/apkgrel.in
index 57b3b93..28978e3 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -62,7 +62,7 @@ Usage: $prog [-z|--zero] [-a|--add] [-g|--clean-git] [-s|--set NUM] [-t|--test]
 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
+  -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
@@ -86,7 +86,10 @@ while true; do
 	case $1 in
 		-z|--zero) setto=0; cmd=do_set;;
 		-a|--add) cmd=do_add;;
-		-g|--clean-git) only_clean_git=1;;
+		-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;;
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:30 -0400

* includes renaming pkgname, pkgver
---
 abump.in | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/abump.in b/abump.in
index 7a0bd57..f25a4ea 100755
--- a/abump.in
+++ b/abump.in
@@ -18,19 +18,26 @@ fi
 
 # version bump packages
 do_bump() {
-	local p rc=0 pkgname pkgver section message
+	local p rc=0 name ver section message
 	local upgrade="${cvelist:+security }upgrade"
 	local a
 	for p; do
-		pkgname=${p%-[0-9]*}
-		pkgver=${p#${pkgname}-}
+		name=${p%-[0-9]*}
+		ver=${p#${name}-}
 
 		# calculate APKBUILD's path
-		if [ "${pkgname#*/}" != "$pkgname" ] && ! [ -d "$APORTSDIR/${pkgname%/*} ]; then
+		if [ "${name#*/}" != "$name" ] && ! [ -d "$APORTSDIR/${name%/*} ]; then
 			error "'$p' should be of form 'foo-1.2.3' or 'main/foo-1.2.3'"
 			rc=1; continue
 		fi
-		a=$(aports_buildscript "$pkgname" || die "can't find APKBUILD for $pkgname") || { rc=1; continue; }
+		a=$(aports_buildscript "$name" || die "can't find APKBUILD for $name") || { rc=1; continue; }
+
+		# verify APKBUILD
+		(
+		. "$a" || exit 1
+		[ "$pkgname" = "$name" ] || die "$name: APKBUILD has different \$pkgname"
+		type package | grep -q function || die "$name: missing package()"
+		) || { rc=1; continue; }
 
 		(
 		set -e
@@ -39,7 +46,7 @@ do_bump() {
 		section=${PWD%/*}
 		section=${section##*/}
 
-		message="$section/$pkgname: $upgrade to ${pkgver}${cvelist}"
+		message="$section/$name: $upgrade to ${ver}${cvelist}"
 		if [ -n "$fixes" ]; then
 			message="$message
 
@@ -48,9 +55,7 @@ fixes #${fixes#\#}
 		fi
 		echo "$message"
 
-		( . ./APKBUILD; type package | grep -q function ) || die "package() missing"
-
-		sed -i -e "s/^pkgver=.*/pkgver=$pkgver/" \
+		sed -i -e "s/^pkgver=.*/pkgver=$ver/" \
 			-e "s/^pkgrel=.*/pkgrel=0/" \
 			APKBUILD
 
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:32 -0400

---
 abump.in | 1 +
 1 file changed, 1 insertion(+)

diff --git a/abump.in b/abump.in
index 81b2705..d846e9a 100755
--- a/abump.in
+++ b/abump.in
@@ -95,6 +95,7 @@ cvelist=
 fixes=
 
 [ -n "$APORTSDIR" ] || error "can't locate \$APORTSDIR"
+git rev-parse 2>/dev/null || die "not in a git tree"
 
 args=`getopt -o s:Rkqh --long security:,recursive,keep,quiet,help -n "$prog" -- "$@"`
 if [ $? -ne 0 ]; then
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:29 -0400

---
 abump.in        | 12 +++++++++++-
 functions.sh.in | 12 ++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/abump.in b/abump.in
index ddd9715..7a0bd57 100755
--- a/abump.in
+++ b/abump.in
@@ -20,14 +20,22 @@ fi
 do_bump() {
 	local p rc=0 pkgname pkgver section message
 	local upgrade="${cvelist:+security }upgrade"
+	local a
 	for p; do
 		pkgname=${p%-[0-9]*}
 		pkgver=${p#${pkgname}-}
 
+		# calculate APKBUILD's path
+		if [ "${pkgname#*/}" != "$pkgname" ] && ! [ -d "$APORTSDIR/${pkgname%/*} ]; then
+			error "'$p' should be of form 'foo-1.2.3' or 'main/foo-1.2.3'"
+			rc=1; continue
+		fi
+		a=$(aports_buildscript "$pkgname" || die "can't find APKBUILD for $pkgname") || { rc=1; continue; }
+
 		(
 		set -e
 
-		cd $HOME/aports/*/$pkgname
+		cd "${a%/*}"
 		section=${PWD%/*}
 		section=${section##*/}
 
@@ -75,6 +83,8 @@ recursive="-r"
 cvelist=
 fixes=
 
+[ -n "$APORTSDIR" ] || error "can't locate \$APORTSDIR"
+
 args=`getopt -o s:Rkqh --long security:,recursive,keep,quiet,help -n "$prog" -- "$@"`
 if [ $? -ne 0 ]; then
 	usage
diff --git a/functions.sh.in b/functions.sh.in
index d71ef38..96b0586 100644
--- a/functions.sh.in
+++ b/functions.sh.in
@@ -19,6 +19,18 @@ if [ -f "$abuild_userconf" ]; then
 fi

+# expects $1 to be a package directory in the aports tree ('foo' or 'main/foo')
+# outputs APKBUILD's path if successful
+aports_buildscript() {
+	[ -n "$APORTSDIR" ] || return 1
+	if [ "${1#*/}" != "$1" ]; then
+		( cd "$APORTSDIR/$1" && [ -f APKBUILD ] && echo "$PWD/APKBUILD" )
+	else
+		( cd "$APORTSDIR"/*/"$1" && [ -f APKBUILD ] && echo "$PWD/APKBUILD" )
+	fi
+}
+
+
 # output functions
 case $prog in
 abuild)
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:38 -0400

---
 apkgrel.in      | 13 ++++++++++---
 functions.sh.in | 13 +++++++++++++
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/apkgrel.in b/apkgrel.in
index 1d178aa..94acd55 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -45,9 +45,8 @@ do_add () {
 	local f= old=
 	for f; do
 		[ -n "$only_clean_git" ] \
-			&& [ -n "$(git diff --name-only "$f")" ] \
+			&& [ -n "$(git diff --name-only "${f%/*}")" ] \
 			&& continue
-		[ -d "$f" ] && f="$f/APKBUILD"
 		old=$(show_plain "$f")
 		case $old in
 		[0-9]*) setto=$((old + 1));;
@@ -61,7 +60,6 @@ do_verify() {
 	[ -n "$force" ] && return 0
 	local f= rc=0
 	for f; do
-		[ -d "$f" ] && f="$f/APKBUILD"
 		if ! grep -q '^pkgrel=[0-9]' "$f"; then
 			error "no proper \$pkgrel for $f"
 			rc=1
@@ -124,6 +122,15 @@ if [ $# -eq 0 ]; then
 	exit 2
 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
+
 do_verify "$@" || exit 1
 $cmd "$@"
 
diff --git a/functions.sh.in b/functions.sh.in
index a25c39a..ab4dff5 100644
--- a/functions.sh.in
+++ b/functions.sh.in
@@ -30,6 +30,19 @@ aports_buildscript() {
 	fi
 }
 
+# expects $1 to be a file, or a directory containing an APKBUILD, or a package directory in the aports tree
+# outputs APKBUILD's path if successful (doesn't verify that it's a valid APKBUILD)
+any_buildscript() {
+	if [ -f "$1" ]; then
+		echo "$1"
+	elif [ -d "$1" ]; then
+		[ -f "$1/APKBUILD" ] || return 1
+		echo "$1/APKBUILD"
+	else
+		aports_buildscript "$1" || return 1
+	fi
+}
+
 
 # output functions
 case $prog in
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:37 -0400

---
 abuild-keygen.in |  2 +-
 abuild-sign.in   |  6 ++----
 abump.in         | 10 +++++-----
 apkgrel.in       |  4 ++--
 checkapk.in      | 10 +++++-----
 functions.sh.in  |  2 +-
 6 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/abuild-keygen.in b/abuild-keygen.in
index bf9d105..dbedad1 100644
--- a/abuild-keygen.in
+++ b/abuild-keygen.in
@@ -32,7 +32,7 @@ get_privkey_file() {
 
 	privkey="$abuild_home/$default_name.rsa"
 	[ -n "$non_interactive" ] && return 0
-	echo "Generating public/private rsa key pair for abuild"
+	msg "Generating public/private rsa key pair for abuild"
 	echo -n "Enter file in which to save the key [$privkey]: "
 
 	read line
diff --git a/abuild-sign.in b/abuild-sign.in
index 96a1826..c1a0c77 100644
--- a/abuild-sign.in
+++ b/abuild-sign.in
@@ -37,10 +37,8 @@ do_sign() {
 		rm -f "$tmptargz" "$sig"
 		chmod 644 "$tmpsigned"
 		mv "$tmpsigned" "$i"
-		if [ -z "$quiet" ]; then
-			echo "Signed $i"
-		fi
-		) || die "Failed to sign $i"
+		msg "Signed $i"
+		) || die "failed to sign $i"
 	done
 }
 
diff --git a/abump.in b/abump.in
index d846e9a..203df8e 100755
--- a/abump.in
+++ b/abump.in
@@ -35,11 +35,11 @@ do_bump() {
 		# verify APKBUILD
 		(
 		. "$a" || exit 1
-		[ "$pkgname" = "$name" ] || die "$name: APKBUILD has different \$pkgname"
-		type package | grep -q function || die "$name: missing package()"
+		[ "$pkgname" = "$name" ] || die "APKBUILD has different \$pkgname for $name"
+		type package | grep -q function || die "missing package() for $name"
 		case $(apk version --test "$pkgver" "$ver") in
-		'=') die "$pkgname: already at version $pkgver";;
-		'>') die "$pkgname: already at newer version $pkgver";;
+		'=') die "$pkgname is already at version $pkgver";;
+		'>') die "$pkgname is already at newer version $pkgver";;
 		'<') exit 0;;
 		*) exit 1;;
 		esac
@@ -59,7 +59,7 @@ do_bump() {
 fixes #${fixes#\#}
 "
 		fi
-		echo "$message"
+		msg "$message"
 
 		sed -i -e "s/^pkgver=.*/pkgver=$ver/" \
 			-e "s/^pkgrel=.*/pkgrel=0/" \
diff --git a/apkgrel.in b/apkgrel.in
index 7e33e34..1d178aa 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -25,7 +25,7 @@ show_plain() {
 show_pretty() {
 	(
 	. "$1" || exit 1
-	[ -n "$pkgname" ] || die "$1: no pkgname"
+	[ -n "$pkgname" ] || die "no \$pkgname for $1"
 	printf '%s: r%s\n' "$pkgname" "${pkgrel:-?}"
 	)
 }
@@ -63,7 +63,7 @@ do_verify() {
 	for f; do
 		[ -d "$f" ] && f="$f/APKBUILD"
 		if ! grep -q '^pkgrel=[0-9]' "$f"; then
-			echo "$f: Has no proper pkgrel" >&2
+			error "no proper \$pkgrel for $f"
 			rc=1
 		fi
 	done
diff --git a/checkapk.in b/checkapk.in
index 2953b8b..d3e2988 100644
--- a/checkapk.in
+++ b/checkapk.in
@@ -36,14 +36,14 @@ if ! [ -f "$abuild_conf" ] && ! [ -f "$abuild_userconf" ]; then
 fi
 
 if ! [ -f APKBUILD ]; then
-	die 'This must be run in the directory of a built package.'
+	die 'must be run in the directory of a built package'
 fi
 
 . ./APKBUILD
 
 startdir="$PWD"
 tmpdir=$(mktemp -d -t checkpkg-script.XXXXXX)
-cd "$tmpdir" || die "Failed to create temp dir"
+cd "$tmpdir" || die "failed to create temp dir"
 
 for i in $pkgname $subpackages; do
 	_pkgname=${i%:*}
@@ -57,19 +57,19 @@ for i in $pkgname $subpackages; do
 			break
 		fi
 	done
-	[ -f "$filepath" ] || die "could not find $pkgfile"
+	[ -f "$filepath" ] || die "can't find $pkgfile"
 
 	# generate a temp repositories file with only the http repos
 	grep ^http: /etc/apk/repositories > $tmpdir/repositories
 
 	oldpkg=$(apk fetch --repositories-file $tmpdir/repositories --simulate 2>&1 | sed 's/^Downloading //')
 	if [ "${oldpkg}" = "${pkg}" ]; then
-		die "The built package ($_pkgname) is the one in the repo right now!"
+		die "the built package ($_pkgname) is already in the repo"
 	fi
 
 	apk fetch --repositories-file $tmpdir/repositories --stdout $_pkgname \
 		| tar -zt | grep -v '^\.SIGN\.' | sort > filelist-$_pkgname-old \
-		|| die "Failed to download old pkg. Maybe run 'apk update'?"
+		|| die "failed to download old pkg, maybe run 'apk update'?"
 
 	tar -ztf "$filepath" | grep -v '^\.SIGN\.' | sort > "filelist-$_pkgname"
 
diff --git a/functions.sh.in b/functions.sh.in
index 96b0586..a25c39a 100644
--- a/functions.sh.in
+++ b/functions.sh.in
@@ -71,7 +71,7 @@ abuild)
 	}
 
 	error() {
-		echo "$@" >&2
+		echo "$prog: $@" >&2
 	}
 	;;
 esac
-- 
1.8.3.1

---

---

From: Dubiousjim <[email-masked]>
Date: Fri, 5 Jul 2013 00:21:36 -0400

---
 apkgrel.in | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/apkgrel.in b/apkgrel.in
index 83c89fd..7e33e34 100644
--- a/apkgrel.in
+++ b/apkgrel.in
@@ -49,7 +49,10 @@ do_add () {
 			&& continue
 		[ -d "$f" ] && f="$f/APKBUILD"
 		old=$(show_plain "$f")
-		setto=$(($old + 1))
+		case $old in
+		[0-9]*) setto=$((old + 1));;
+		*) setto=0;;
+		esac
 		do_set "$f" || return 1
 	done
 }
-- 
1.8.3.1

---

---

From: Natanael Copa <[email-masked]>
Date: Fri, 12 Jul 2013 14:04:54 +0200

On Fri,  5 Jul 2013 00:21:09 -0400

> hopefully some more robust behavior in places.

I pushed them all a fixed a few issues they introduced. I reverted one
abump change in the behaviour. I'd like it to not exit with error if
version is same because I sometimes re-run abump after fixing up issues
in apkbuild (as it git commits for me too with proper commit message)

Also tagged a new release.

Thanks!

---