Skip to content

Commit

Permalink
git-gui: handle bare repos correctly
Browse files Browse the repository at this point in the history
Refactor checking for a bare repository into its own proc, that relies
on git rev-parse --is-bare-repository if possible. For older versions of
git we fall back to a logic such that the repository is considered bare
if:
 * either the core.bare setting is true
 * or the worktree is not set and the directory name ends with .git
The error message for the case of an unhandled bare repository is also
updated to reflect the fact that the problem is not the funny name but
the bareness.

The new refactored proc is also used to disable the menu entry to
explore the working copy, and to skip changing to the worktree before
the gitk invocation.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
  • Loading branch information
Giuseppe Bilotta authored and Shawn O. Pearce committed Jan 23, 2010
1 parent 21985a1 commit 29e5573
Showing 1 changed file with 36 additions and 7 deletions.
43 changes: 36 additions & 7 deletions git-gui.sh
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ unset oguimsg
set _appname {Git Gui}
set _gitdir {}
set _gitworktree {}
set _isbare {}
set _gitexec {}
set _githtmldir {}
set _reponame {}
Expand Down Expand Up @@ -277,6 +278,32 @@ proc get_config {name} {
}
}

proc is_bare {} {
global _isbare
global _gitdir
global _gitworktree

if {$_isbare eq {}} {
if {[catch {
set _bare [git rev-parse --is-bare-repository]
switch -- $_bare {
true { set _isbare 1 }
false { set _isbare 0}
default { throw }
}
}]} {
if {[is_config_true core.bare]
|| ($_gitworktree eq {}
&& [lindex [file split $_gitdir] end] ne {.git})} {
set _isbare 1
} else {
set _isbare 0
}
}
}
return $_isbare
}

######################################################################
##
## handy utils
Expand Down Expand Up @@ -1122,9 +1149,9 @@ if {$_prefix ne {}} {
set _gitworktree [pwd]
unset cdup
} elseif {![is_enabled bare]} {
if {[lindex [file split $_gitdir] end] ne {.git}} {
if {[is_bare]} {
catch {wm withdraw .}
error_popup [strcat [mc "Cannot use funny .git directory:"] "\n\n$_gitdir"]
error_popup [strcat [mc "Cannot use bare repository:"] "\n\n$_gitdir"]
exit 1
}
if {$_gitworktree eq {}} {
Expand Down Expand Up @@ -1973,7 +2000,7 @@ proc do_gitk {revs {is_submodule false}} {
set pwd [pwd]
if {!$is_submodule} {
if {$_gitworktree ne {}} {
if {![is_bare]} {
cd $_gitworktree
}
set env(GIT_DIR) [file normalize [gitdir]]
Expand Down Expand Up @@ -2457,10 +2484,12 @@ if {[is_enabled multicommit] || [is_enabled singlecommit]} {
#
menu .mbar.repository
.mbar.repository add command \
-label [mc "Explore Working Copy"] \
-command {do_explore}
.mbar.repository add separator
if {![is_bare]} {
.mbar.repository add command \
-label [mc "Explore Working Copy"] \
-command {do_explore}
.mbar.repository add separator
}
.mbar.repository add command \
-label [mc "Browse Current Branch's Files"] \
Expand Down

0 comments on commit 29e5573

Please sign in to comment.