From: Johannes Sixt Date: Fri, 15 May 2026 16:00:51 GMT Subject: Re: [PATCH v1 05/11] git-gui: use --absolute-git-dir Message-ID: <948f9f9f-8225-4bfe-be7d-e9b03c912aeb@kdbg.org> In-Reply-To: <20260514143322.865587-6-mlevedahl@gmail.com> Am 14.05.26 um 16:33 schrieb Mark Levedahl: > 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. Nice! However, the patch is incomplete. We set _gitdir also from lib/choose_repository.tcl. I think it would be best to swap this patch with patch 4/11, remove the _gitdir setters from the picker implementation, and call `rev-parse --absolute-git-dir` like you did in 4/11. This depends on that the picker sets the current directory to the top-level of the working tree with the embeded .git directory. BTW, missing sign-off. > --- > git-gui.sh | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/git-gui.sh b/git-gui.sh > index 0b73c35..c2cf5f1 100755 > --- a/git-gui.sh > +++ b/git-gui.sh > @@ -1156,7 +1156,7 @@ if {[catch { > && [catch { > # beware that from the .git dir this sets _gitdir to . > # and _prefix to the empty string > - set _gitdir [git rev-parse --git-dir] > + set _gitdir [git rev-parse --absolute-git-dir] > set _prefix [git rev-parse --show-prefix] > } err]} { > pick_repo > @@ -1173,18 +1173,12 @@ 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"] > exit 1 > } > + > # _gitdir exists, so try loading the config > load_config 0 > apply_config -- Hannes