From: Mark Levedahl Date: Thu, 14 May 2026 14:33:18 GMT Subject: [PATCH v1 07/11] git-gui: use rev-parse exclusively to find a repository Message-ID: <20260514143322.865587-8-mlevedahl@gmail.com> In-Reply-To: <20260514143322.865587-1-mlevedahl@gmail.com> git-gui attempts to use env(GIT_DIR) directly as the git repository, accepting GIT_DIR if it is a directory. Only if that fails is git rev-parse used to discover the repository. But, this avoids all of git-core's validity checking on a repository, thus possibly deferring an error to a later step, possibly unexpected. Repository validation should be part of initial setup so that later processing does not need error trapping for configuration errors. Let's just invoke rev-parse so all error checking is done. Stop here if the user set GIT_DIR or GIT_WORK_TREE. Otherwise, continue the existing behavior and show the repository picker. Also, remove a later check on whether _gitdir is a directory: that code cannot be reached without rev-parse having validating the repository. Signed-off-by: Mark Levedahl --- git-gui.sh | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/git-gui.sh b/git-gui.sh index 2e2ddc0..81789dd 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -374,6 +374,7 @@ set _gitdir {} set _gitworktree {} set _isbare {} set _githtmldir {} +set _prefix {} set _reponame {} set _shellpath {@@SHELL_PATH@@} @@ -1167,19 +1168,18 @@ proc pick_repo {} { set picked 1 } +# find repository. if {[catch { - set _gitdir $env(GIT_DIR) - set _prefix {} - }] - && [catch { - # beware that from the .git dir this sets _gitdir to . - # and _prefix to the empty string - set _gitdir [git rev-parse --absolute-git-dir] - set _prefix [git rev-parse --show-prefix] - } err]} { + set _gitdir [git rev-parse --absolute-git-dir] +} err]} { + if {[is_gitvars_error $err]} { + exit 1 + } else { pick_repo + } } + # Use object format as hash algorithm (either "sha1" or "sha256") set hashalgorithm [git rev-parse --show-object-format] if {$hashalgorithm eq "sha1"} { @@ -1191,12 +1191,6 @@ if {$hashalgorithm eq "sha1"} { exit 1 } -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 -- 2.54.0.99.14