]> git.ipfire.org Git - thirdparty/git.git/commitdiff
git-gui: use --absolute-git-dir
authorMark Levedahl <mlevedahl@gmail.com>
Sun, 31 May 2026 23:02:18 +0000 (19:02 -0400)
committerJohannes Sixt <j6t@kdbg.org>
Tue, 2 Jun 2026 17:13:13 +0000 (19:13 +0200)
git-gui uses git rev-parse --git-dir to get the pathname of the
discovered git repository. The returned value can be relative, and is
'.' if the current directory is the top of the repository directory
itself.  git-gui has code to change '.' to [pwd] in this case so that
subsequent logic runs.

But, git rev-parse supports --absolute-git-dir from fac60b8925
("rev-parse: add option for absolute or relative path formatting",
2020-12-13), and included in git 2.31. git-gui requires git >= 2.36, so
this more useful form is always available. Use --absolute-git-dir to
always get an absolute path, avoiding the need for other checks, and
delete the now unneeded code to fix a relative _gitdir.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
git-gui.sh

index efa745dc48fb63a6795ba24797f7049c0d64f92c..84385c09a25de9248adebe98e79f85f18b7f6112 100755 (executable)
@@ -1145,16 +1145,15 @@ if {[catch {
                set _prefix {}
                }]
        && [catch {
-               # beware that from the .git dir this sets _gitdir to .
-               # and _prefix to the empty string
-               set _gitdir [git rev-parse --git-dir]
+               # beware that from the .git dir this sets _prefix to the empty string
+               set _gitdir [git rev-parse --absolute-git-dir]
                set _prefix [git rev-parse --show-prefix]
        } err]} {
        load_config 1
        apply_config
        choose_repository::pick
        if {[catch {
-                       set _gitdir [git rev-parse --git-dir]
+                       set _gitdir [git rev-parse --absolute-git-dir]
                } err]} {
                catch {wm withdraw .}
                error_popup [strcat [mc "Unusable repo/worktree:"] " [pwd] \n\n$err"]
@@ -1175,13 +1174,6 @@ if {$hashalgorithm eq "sha1"} {
        exit 1
 }
 
-# we expand the _gitdir when it's just a single dot (i.e. when we're being
-# run from the .git dir itself) lest the routines to find the worktree
-# get confused
-if {$_gitdir eq "."} {
-       set _gitdir [pwd]
-}
-
 if {![file isdirectory $_gitdir]} {
        catch {wm withdraw .}
        error_popup [strcat [mc "Git directory not found:"] "\n\n$_gitdir"]