Ben Jackson <ben@xxxxxxx> writes: > Ash (used as /bin/sh on many distros) has a shell expansion bug > for the form ${var:+word word}. The result is a single argument > "word word". Work around by using ${var:+word} ${var:+word} or > equivalent. > > Signed-off-by: Ben Jackson <ben@xxxxxxx> > --- > > I found this by accident while testing another trivial git-am patch. > It was broken about a week ago in git-am.sh by f79d4c8a and one of the > test cases caught it on FreeBSD. > > The other instance has been around longer and I found it by grepping. > I added a new testcase (none too exciting) which exposes the problem. > There are more instances of ${x:+alt} which don't have spaces which I > did not touch. > > For the curious: > > bash on linux: > $ parent=ok > $ echo ${parent:+-p $parent} > -p ok > $ for i in ${parent:+-p $parent} ; do echo .$i; done > .-p > .ok > > ash (/bin/sh) on freebsd: > $ parent=ok > $ echo ${parent:+-p $parent} > -p ok > $ for i in ${parent:+-p $parent} ; do echo .$i; done > .-p ok > > This is probably a bug in ash. It does expand ${foo:+*} into many words. > > git-am.sh | 2 +- > git-submodule.sh | 2 +- > t/t7400-submodule-basic.sh | 8 ++++++++ > 3 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/git-am.sh b/git-am.sh > index bfc50c9..e539c60 100755 > --- a/git-am.sh > +++ b/git-am.sh > @@ -570,7 +570,7 @@ do > GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE" > export GIT_COMMITTER_DATE > fi && > - git commit-tree $tree ${parent:+-p $parent} <"$dotest/final-commit" > + git commit-tree $tree ${parent:+-p} $parent <"$dotest/final-commit" > ) && > git update-ref -m "$GIT_REFLOG_ACTION: $FIRSTLINE" HEAD $commit $parent || > stop_here $this I do not mind this one, but > diff --git a/git-submodule.sh b/git-submodule.sh > index 7c2e060..bb3766d 100755 > --- a/git-submodule.sh > +++ b/git-submodule.sh > @@ -204,7 +204,7 @@ cmd_add() > else > > module_clone "$path" "$realrepo" || exit > - (unset GIT_DIR; cd "$path" && git checkout -f -q ${branch:+-b "$branch" "origin/$branch"}) || > + (unset GIT_DIR; cd "$path" && git checkout -f -q ${branch:+-b} ${branch:+"$branch"} ${branch:+"origin/$branch"}) || this is too ugly to live in our codebase, and without an accompanying code comment, I am sure somebody (if not myself) will "fix" it again. ( unset GIT_DIR cd "$path" && # BSD ash mishandles ${branch:+-b "$branch" ...}, sheesh. case "$branch" in '') git checkout -f -q ;; ?*) git checkout -f -q -b "$branch" "origin/$branch" ;; esac ) || ... -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html