[PATCH] gittrack.sh accepts invalid branch names
- From
- Pavel Roskin <proski@gnu.org>
- Date
- Apr 20, 2005, 19:48 UTC
- Message-ID
- <1114026510.15186.15.camel@dv>
Hello, Petr and everybody!
gittrack.sh allows abbreviated branch names, e.g. it's possible to run "git track lin" when there is a branch called "linus".
I believe it's a bug, not a feature. Please look at this line from gittrack.sh:
grep -q $(echo -e "^$name\t" | sed 's/\./\\./g') .git/remotes
The result of command expansion is subjected to word splitting, which means the trailing tab is removed as a space. So grep doesn't see the tab.
The way to avoid word splitting would be to quote "$()", but it would make the shell code too hairy. I'm not even sure all shells would interpret "$("$name")" correctly.
So I decided to use tab directly in the sed expression. I cannot think of any portable way to avoid grep completely ("q" is a GNU sed extension, and we want to support BSD, I think), so it's still there, looking for any output from sed.
Signed-off-by: Pavel Roskin <proski@gnu.org>
--- a/gittrack.sh +++ b/gittrack.sh @@ -35,7 +35,7 @@ die () { mkdir -p .git/heads if [ "$name" ]; then - grep -q $(echo -e "^$name\t" | sed 's/\./\\./g') .git/remotes || \ + sed -ne "/^$name\t/p" .git/remotes | grep -q . || \ [ -s ".git/heads/$name" ] || \ die "unknown branch \"$name\""
-- Regards, Pavel Roskin