git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv2 2/2] git-gui: handle bare repos correctly

From
Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date
Feb 19, 2009, 01:15 UTC
Message-ID
<1235006145-16760-3-git-send-email-giuseppe.bilotta@gmail.com>
In-Reply-To
<1235006145-16760-1-git-send-email-giuseppe.bilotta@gmail.com>
Refactor checking for a bare repository into its own proc, with a new
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. ---

The only thing that I see no easy way to support is the "git --bare gui" syntax, which would probably require git setting up an appropriate environment variable.

 git-gui/git-gui.sh |   34 +++++++++++++++++++++++++++-------
 1 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
index 12c7ff3..a4c0d4b 100755
--- a/git-gui/git-gui.sh
+++ b/git-gui/git-gui.sh
@@ -122,6 +122,7 @@ unset oguimsg
 set _appname {Git Gui}
 set _gitdir {}
 set _gitworktree {}
+set _isbare {}
 set _gitexec {}
 set _reponame {}
 set _iscygwin {}
@@ -254,6 +255,23 @@ proc get_config {name} {
 	}
 }
 
+proc is_bare {} {
+	global _isbare
+	global _gitdir
+	global _gitworktree
+
+	if {$_isbare eq {}} {
+		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
@@ -1084,9 +1102,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 {}} {
@@ -1913,7 +1931,7 @@ proc do_gitk {revs} {
 		}
 
 		set pwd [pwd]
-		if { $_gitworktree ne {} } {
+		if { ![is_bare] } {
 			cd $_gitworktree
 		}
 		set env(GIT_DIR) [file normalize [gitdir]]
@@ -2317,10 +2335,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"] \
-- 
1.6.2.rc1.179.g17e82
Previous: Giuseppe BilottaNext: Johannes Schindelin
Message 7 of 10 in “[PATCHv2 0/2] git-gui: generic and robust worktree/gitdir support”
  1. Giuseppe BilottaFeb 19, 2009
  2. 1/2 git-gui: handle non-standard worktree locationsGiuseppe Bilotta, Feb 19, 2009
  3. Johannes SchindelinFeb 19, 2009
  4. Giuseppe BilottaFeb 20, 2009
  5. Johannes SchindelinFeb 20, 2009
  6. Giuseppe BilottaFeb 20, 2009
  7. 2/2 git-gui: handle bare repos correctlyGiuseppe Bilotta, Feb 19, 2009
  8. Johannes SchindelinFeb 19, 2009
  9. Giuseppe BilottaFeb 20, 2009
  10. 2/2 git-gui: handle bare repos correctlyGiuseppe Bilotta, Feb 20, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.