do-release-commit-and-tag: fix the previous commit
authorAkim Demaille <akim@lrde.epita.fr>
Thu, 5 Jul 2012 13:41:20 +0000 (15:41 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Thu, 5 Jul 2012 15:12:34 +0000 (17:12 +0200)
* build-aux/do-release-commit-and-tag: Actually the test was right,
but the comment and the error message were misleading.
Fix comment, and improve error message.
Perform check first, so that NEWS is not modified uselessly.

ChangeLog
build-aux/do-release-commit-and-tag

index c257cb2..5111040 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2012-07-05  Akim Demaille  <akim@lrde.epita.fr>
 
+       do-release-commit-and-tag: fix the previous commit
+       * build-aux/do-release-commit-and-tag: Actually the test was right,
+       but the comment and the error message were misleading.
+       Fix comment, and improve error message.
+       Perform check first, so that NEWS is not modified uselessly.
+
        do-release-commit-and-tag: fix typo
        * build-aux/do-release-commit-and-tag: Be sure that NEWS does
        _not_ start with a stub.
index 329d0eb..8beca86 100755 (executable)
@@ -3,7 +3,7 @@
 # controlled .prev-version file, automate the procedure by which we record
 # the date, release-type and version string in the NEWS file.  That commit
 # will serve to identify the release, so apply a signed tag to it as well.
-VERSION=2012-07-05.13 # UTC
+VERSION=2012-07-05.15 # UTC
 
 # Note: this is a bash script (could be zsh or dash)
 
@@ -77,6 +77,10 @@ EOF
   exit
 }
 
+## ------ ##
+## Main.  ##
+## ------ ##
+
 branch=master
 builddir=.
 
@@ -107,6 +111,11 @@ test $# = 2 \
 ver=$1
 type=$2
 
+
+## ---------------------- ##
+## First, sanity checks.  ##
+## ---------------------- ##
+
 # Verify that $ver looks like a version number, and...
 echo "$ver"|grep -E '^[0-9][0-9.]*[0-9]$' > /dev/null \
   || die "invalid version: $ver"
@@ -124,32 +133,36 @@ case $type in
   *) die "invalid release type: $type";;
 esac
 
+# No local modifications allowed.
+case $(git diff-index --name-only HEAD) in
+  '') ;;
+  *) die 'this tree is dirty; commit your changes first';;
+esac
+
+# Ensure the current branch name is correct:
+curr_br=$(git rev-parse --symbolic-full-name HEAD)
+test "$curr_br" = refs/heads/$branch || die not on branch $branch
+
 # Extract package name from Makefile.
 Makefile=$builddir/Makefile
 pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' "$Makefile") \
   || die "failed to determine package name from $Makefile"
 
-# simple check: no question marks on line 3 of NEWS
-test "$(sed -n 3p NEWS)" != "$noteworthy_stub" \
-  || die 'line 3 of NEWS looks fishy!'
+# Check that line 3 of NEWS is the stub line about to be replaced.
+test "$(sed -n 3p NEWS)" = "$noteworthy_stub" \
+  || die "line 3 of NEWS must be exactly '$noteworthy_stub'"
 
-# No dirt allowed.
-case $(git diff-index --name-only HEAD) in
-  '') ;;
-  *) die 'this tree is dirty; commit your changes first';;
-esac
+## --------------- ##
+## Then, changes.  ##
+## --------------- ##
 
-# update NEWS to have today's date, plus desired version number and $type
+# Update NEWS to have today's date, plus desired version number and $type.
 perl -MPOSIX -ni -e 'my $today = strftime "%F", localtime time;' \
  -e 'my ($type, $ver) = qw('"$type $ver"');' \
  -e 'my $pfx = "'"$noteworthy"'";' \
  -e 'print $.==3 ? "$pfx $ver ($today) [$type]\n" : $_' \
      NEWS || die 'failed to update NEWS'
 
-# Ensure the current branch name is correct:
-curr_br=$(git rev-parse --symbolic-full-name HEAD)
-test "$curr_br" = refs/heads/$branch || die not on branch $branch
-
 printf "version $ver\n\n* NEWS: Record release date.\n" \
     | git commit -F -  -a || die 'git commit failed'
 git tag -s -m "$pkg $ver" v$ver HEAD || die 'git tag failed'