summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/autobuild.sh174
1 files changed, 97 insertions, 77 deletions
diff --git a/bin/autobuild.sh b/bin/autobuild.sh
index 0787c70..fdcfb3d 100755
--- a/bin/autobuild.sh
+++ b/bin/autobuild.sh
@@ -14,81 +14,101 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Get the date as the *very* first thing
-newpkgver_date=$(LC_ALL=C date -u +%Y%m%d)
-
export PATH # because of setuid safety, path may be currently un-exported
-. "$(librelib messages)"
-setup_traps
-
-# Next: get the gitver as soon as possible, we don't want another commit to
-# change it
-if [[ $PWD != *.git ]]; then
- die "should be run as a hook from a git repository"
-fi
-newgitver=$(git log -n1 --format='%H' master -- blacklist.txt)
-
-# Option parsing ###############################################################
-
-if [[ $# != 1 ]]; then
- die "%q takes exactly 1 argument" "$0"
-fi
-PACKAGE=$1
-package_re='^[^/]+/[^/]+$'
-if ! [[ $PACKAGE =~ $package_re ]]; then
- die "PACKAGE must be in the format REPO/PKGBASE: %s" "$PACKAGE"
-fi
-
-# It doesn't seem like it, but this is the earliest we can possibly lock
-lock 9 "${HOME}/packages/lockdir/${PACKAGE}" \
- "Waiting for previous run of %q to finish" "$0"
-
-################################################################################
-
-. "$(librelib conf)" || exit 1
-load_files libretools || exit 1
-check_vars libretools WORKDIR ABSLIBRERECV ABSLIBRESEND || exit 1
-
-# Get the ABSLibre tree
-gitget -f -p "$ABSLIBRESEND" checkout "$ABSLIBRERECV" "$WORKDIR/abslibre"
-if ! [[ -f "${WORKDIR}/abslibre/${PACKAGE}/PKGBUILD" ]]; then
- die "package does not exist in abslibre.git: %s" "$PACKAGE"
-fi
-cd "$WORKDIR/abslibre/${PACKAGE}"
-
-# Figure out info about the last version
-oldgitver=$(sed -n 's/^_gitver=//p' PKGBUILD)
-oldpkgver=$(sed -n 's/^pkgver=//p' PKGBUILD)
-oldpkgver_date=${oldpkgver%%.*}
-oldpkgver_rel=${oldpkgver#${oldpkgver_date}}; oldpkgver_rel=${oldpkgver_rel#.}; oldpkgver_rel=${oldpkgver_rel:-0}
-
-# Make sure we actually have changes
-if [[ "$newgitver" == "$oldgitver" ]]; then
- msg 'blacklist.txt has not changed, nothing to do'
- exit 0
-fi
-
-# Handle doing multiple versions in the same day
-if [[ "$newpkgver_date" == "$oldpkgver_date" ]]; then
- declare -i newpkgver_rel=${oldpkgver_rel}+1
- newpkgver=${newpkgver_date}.${newpkgver_rel}
-else
- newpkgver=${newpkgver_date}
-fi
-
-# Update the PKGBUILD
-sed -i -e "s|^pkgver=.*|pkgver=${newpkgver}|" \
- -e "s|^_gitver=.*|_gitver=${newgitver}|" \
- -e 's|^pkgrel=.*|pkgrel=1|' \
- PKGBUILD
-updpkgsums
-git add PKGBUILD
-git commit -m 'Update libre/your-freedom'
-
-# Build the new package
-makepkg -c
-librestage "${PACKAGE%/*}"
-
-# Publish the updates
-git push
-librerelease
+
+
+usage() {
+ print "Usage: %q REPO/PKGBASE [FILES...]" "${0##*/}"
+ print "When run from a git directory, automatically updates the package based on FILES in the git repo"
+}
+
+main() {
+ . "$(librelib messages)"
+ setup_traps
+
+ # Get the date as the *very* first thing
+ # We get the current date instead of getting a date from git because git time is
+ # non-monotonic. I mean, the system time is also non-monotonic. But at
+ # day-granularity, I don't expect this to ever come up. A git-rebase or weird
+ # merge could easily break things if we get the git time.
+ newpkgver_date=$(LC_ALL=C date -u +%Y%m%d)
+
+ # Confirm that we are in a valid directory, and lock it.
+ if [[ $PWD != *.git ]]; then
+ die "%q should be run as a hook from a git repository" "$0"
+ fi
+ lock 9 "$PWD/autobuild.lock" "Waiting for previous run of %q to finish" "$0"
+
+ # Option parsing ###############################################################
+
+ if [[ $# -lt 1 ]]; then
+ error "%q takes at least 1 argument" "$0"
+ usage >&2
+ exit 1
+ fi
+
+ package=$1
+ package_re='^[^/]+/[^/]+$'
+ if ! [[ $package =~ $package_re ]]; then
+ error "The first argument must be in the format REPO/PKGBASE: %s" "$package"
+ usage >&2
+ exit 1
+ fi
+ unset package_re
+
+ newgitver=$(git log -n1 --format='%H' master -- "${@:2}")
+
+ # Configuration parsing ########################################################
+
+ . "$(librelib conf)"
+ load_files libretools
+ check_vars libretools WORKDIR ABSLIBRERECV ABSLIBRESEND
+
+ # The real work begins! ########################################################
+
+ # Get the ABSLibre tree
+ gitget -f -p "$ABSLIBRESEND" checkout "$ABSLIBRERECV" "$WORKDIR/abslibre"
+ if ! [[ -f "${WORKDIR}/abslibre/${package}/PKGBUILD" ]]; then
+ die "package does not exist in abslibre.git: %s" "$package"
+ fi
+ cd "$WORKDIR/abslibre/${package}"
+
+ # Figure out info about the last version
+ oldgitver=$(sed -n 's/^_gitver=//p' PKGBUILD)
+ oldpkgver=$(sed -n 's/^pkgver=//p' PKGBUILD)
+ oldpkgver_date=${oldpkgver%%.*}
+ oldpkgver_rel=${oldpkgver#${oldpkgver_date}}; oldpkgver_rel=${oldpkgver_rel#.}; oldpkgver_rel=${oldpkgver_rel:-0}
+
+ # Make sure we actually have changes
+ if [[ "$newgitver" == "$oldgitver" ]]; then
+ msg 'blacklist.txt has not changed, nothing to do'
+ exit 0
+ fi
+
+ # Handle doing multiple versions in the same day
+ if [[ "$newpkgver_date" == "$oldpkgver_date" ]]; then
+ declare -i newpkgver_rel=${oldpkgver_rel}+1
+ newpkgver=${newpkgver_date}.${newpkgver_rel}
+ else
+ newpkgver=${newpkgver_date}
+ fi
+
+ # Update the PKGBUILD
+ sed -i -e "s|^pkgver=.*|pkgver=${newpkgver}|" \
+ -e "s|^_gitver=.*|_gitver=${newgitver}|" \
+ -e 's|^pkgrel=.*|pkgrel=1|' \
+ PKGBUILD
+ updpkgsums
+ git add PKGBUILD
+ git commit -m 'Update libre/your-freedom'
+
+ # Build the new package
+ makepkg -c
+ librestage "${package%/*}"
+
+ # Publish the updates
+ git push
+ librerelease
+}
+
+main "$@"