diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2007-07-05 19:19:37 -0400 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2007-07-08 21:12:56 -0400 |
commit | 311e02a4a5c7b82c996214f06d58e2b51b3ecc22 (patch) | |
tree | 6036fbe6fc3fe2a621ba7d7cf235ab6d987947f6 /git-gui.sh | |
parent | ba1964be26b8b9e3441591257a2c87f5811d6b50 (diff) | |
download | git-311e02a4a5c7b82c996214f06d58e2b51b3ecc22.tar.gz git-311e02a4a5c7b82c996214f06d58e2b51b3ecc22.tar.xz |
git-gui: Better handling of detached HEAD
If the current branch is not a symbolic-ref that points to a
name in the refs/heads/ namespace we now just assume that the
head is a detached head. In this case we return the special
branch name of HEAD rather than empty string, as HEAD is a
valid revision specification and the empty string is not.
I have also slightly improved the current-branch function by
using string functions to parse the symbolic-ref data. This
should be slightly faster than using a regsub. I think the
code is clearer too.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'git-gui.sh')
-rwxr-xr-x | git-gui.sh | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/git-gui.sh b/git-gui.sh index 99df2d948..516bd972e 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -285,14 +285,24 @@ proc git {args} { } proc current-branch {} { - set ref {} set fd [open [gitdir HEAD] r] - if {[gets $fd ref] <16 - || ![regsub {^ref: refs/heads/} $ref {} ref]} { + if {[gets $fd ref] < 1} { set ref {} } close $fd - return $ref + + set pfx {ref: refs/heads/} + set len [string length $pfx] + if {[string equal -length $len $pfx $ref]} { + # We're on a branch. It might not exist. But + # HEAD looks good enough to be a branch. + # + return [string range $ref $len end] + } else { + # Assume this is a detached head. + # + return HEAD + } } auto_load tk_optionMenu |