On Wed, Mar 03, 2010 at 12:32:11PM -0800, Junio C Hamano wrote:
Jeff King [off-list ref] writes:
quoted
I did see it on my debian unstable box with with dash as /bin/sh (though
3deea89 (submodule summary: Don't barf when invoked in an empty repo,
2010-02-16) looks broken. It shifts $1 unconditionally when:
Yeah, I can confirm that the breakage was introduced there (and it looks
like for bash, an extra "shift" is a failing command but doesn't make
the shell barf, but for dash it is more serious, which explains why
tests passed for you).
- "git submodule summary", no arguments given and defaults to HEAD which
is _not_ unborn (we shouldn't shift in this case);
Yes, definitely a bug.
- "git submodule summary HEAD path...", which is not unborn (we should shift);
Yes, and I think we do that part right.
- "git submodule summary path...", defaults to HEAD which is _not_ unborn
(we shouldn't shift).
I don't think this is a problem. We do:
git rev-parse -q --verify --default HEAD path
and it correctly reports failure, so we never do the problematic shift.
So I think we just need
diff --git a/git-submodule.sh b/git-submodule.sh
index 1ea4143..bf5ea50 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -556,7 +556,7 @@ cmd_summary() {
if rev=$(git rev-parse -q --verify --default HEAD ${1+"$1"})
then
head=$rev
- shift
+ test -n "$1" && shift
elif test -z "$1" -o "$1" = "HEAD"
then
return
-Peff