Hi Jonathan,
On Sun, Jan 2, 2011 at 10:34 AM, Jonathan Nieder <[email protected]> wrote:
> Were you been able to reproduce that outside the script?
No, I was blind to the invocation. You found it. I was looking
without seeing. Thank you.
Given that shells without functions can be considered sufficiently
obsolete to not be a consideration, perhaps a better solution is
to put the I-don't-care-about-error-messages code into a separate
function with stderr redirected. Doing that turned out messier
than I had hoped....
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
index c278f6a..8a238b0 100755
--- a/build-aux/git-version-gen
+++ b/build-aux/git-version-gen
@@ -1,6 +1,6 @@
#!/bin/sh
# Print a version string.
-scriptversion=2010-10-13.20; # UTC
+scriptversion=2011-01-03.00; # UTC
# Copyright (C) 2007-2011 Free Software Foundation, Inc.
#
@@ -78,76 +78,96 @@ tag_sed_script="${2:-s/x/x/}"
nl='
'
-# Avoid meddling by environment variable of the same name.
-v=
+get_ver()
+{
+ local PS4='>gv> '
+ git status >/dev/null 2>&1 || {
+ printf UNKNOWN
+ exit 0
+ }
-# First see if there is a tarball-only version file.
-# then try "git describe", then default.
-if test -f $tarball_version_file
-then
- v=`cat $tarball_version_file` || exit 1
- case $v in
- *$nl*) v= ;; # reject multi-line output
- [0-9]*) ;;
- *) v= ;;
+ test "`git log -1 --pretty=format:x . 2>&1`" = x || {
+ printf UNKNOWN
+ exit 0
+ }
+
+ X=`git describe --abbrev=4 --match='v*' HEAD || \
+ git describe --abbrev=4 HEAD` || {
+ printf UNKNOWN
+ exit 0
+ }
+
+ case "$X" in
+ v[0-9]* ) : ;;
+ * )
+ printf UNKNOWN
+ exit 0
+ ;;
esac
- test -z "$v" \
- && echo "$0: WARNING: $tarball_version_file seems to be damaged" 1>&2
-fi
-if test -n "$v"
-then
- : # use $v
-# Otherwise, if there is at least one git commit involving the working
-# directory, and "git describe" output looks sensible, use that to
-# derive a version string.
-elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
- && v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \
- || git describe --abbrev=4 HEAD 2>/dev/null` \
- && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
- && case $v in
- v[0-9]*) ;;
- *) (exit 1) ;;
- esac
-then
# Is this a new git that lists number of commits since the last
# tag or the previous older version that did not?
# Newer: v6.10-77-g0f8faeb
# Older: v6.10-g0f8faeb
- case $v in
+ case $X in
*-*-*) : git describe is okay three part flavor ;;
*-*)
: git describe is older two part flavor
# Recreate the number of commits and rewrite such that the
# result is the same as if we were using the newer version
# of git describe.
- vtag=`echo "$v" | sed 's/-.*//'`
+ vtag=`echo "$X" | sed 's/-.*//'`
numcommits=`git rev-list "$vtag"..HEAD | wc -l`
- v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+ X=`echo "$X" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
;;
esac
+ # Don't declare a version "dirty" merely because a time stamp has changed.
+ silent_git update-index --refresh >/dev/null 2>&1
+
+ dirty=`git diff-index --name-only HEAD` || dirty=
+ case "$dirty" in
+ '') ;;
+ *) # Append the suffix only if there isn't one already.
+ case $X in
+ *-dirty) ;;
+ *) X="$X-dirty" ;;
+ esac
+ ;;
+ esac
+
# Change the first '-' to a '.', so version-comparing tools work properly.
# Remove the "g" in git describe's output string, to save a byte.
- v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
+ echo "$X" | sed 's/^v//;s/-/./;s/\(.*\)-g/\1-/'
+}
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+ v=`cat $tarball_version_file` || exit 1
+ case $v in
+ *$nl*) v= ;; # reject multi-line output
+ [0-9]*) ;;
+ *) v= ;;
+ esac
+ test -z "$v" \
+ && echo "$0: WARNING: $tarball_version_file seems to be damaged" 1>&2
else
- v=UNKNOWN
+ v=
fi
-v=`echo "$v" |sed 's/^v//'`
-
-# Don't declare a version "dirty" merely because a time stamp has changed.
-git update-index --refresh > /dev/null 2>&1
+if test -n "$v"
+then
+ : # use $v
-dirty=`sh -c 'git diff-index --name-only HEAD' 2>/dev/null` || dirty=
-case "$dirty" in
- '') ;;
- *) # Append the suffix only if there isn't one already.
- case $v in
- *-dirty) ;;
- *) v="$v-dirty" ;;
- esac ;;
-esac
+else
+ # Otherwise, if there is at least one git commit involving the
+ # working directory, and "git describe" output looks sensible, use
+ # that to derive a version string.
+ #
+ v=`get_ver` 2>/dev/null
+fi
# Omit the trailing newline, so that m4_esyscmd can use the result directly.
echo "$v" | tr -d "$nl"
_______________________________________________
Autoconf mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/autoconf