From: Mark Levedahl <mlevedahl@gmail•com>
To: git@vger•kernel.org
Cc: j6t@kdbg•org, egg_mushroomcow@foxmail•com, bootaina702@gmail•com,
Mark Levedahl <mlevedahl@gmail•com>
Subject: [PATCH v3 04/12] git-gui: do not change global vars in choose_repository::pick
Date: Sun, 31 May 2026 19:02:17 -0400 [thread overview]
Message-ID: <20260531230225.126817-5-mlevedahl@gmail.com> (raw)
In-Reply-To: <20260531230225.126817-1-mlevedahl@gmail.com>
The repository picker (choose_repository::pick, AKA pick) on success
always returns with the current directory at the root of the selected
worktree, with the global variable _gitdir holding the name of the
git repository, possibly as a relative path, and _prefix {}. The
worktree root (_gitworktree) is not filled out, and if the selection was
from the "recent" list, no validation has occurred beyond testing that
the worktree root exists. So, repository and worktree validation are
still needed to be sure the new repo + worktree is usable.
pick only supports worktrees with a .git entry in the worktree root, so
git repository and worktree discovery will work starting in the current
directory on return. In cases of error, or user abort, pick exits the
process rather than returning.
So, let's change pick to not alter any global values, with success
indicated by the process returning to the caller. In this case, the
current directory is the worktree root, with a .git entry. The caller
then proceeds with normal discovery to find and validate both repository
and worktree.
With this, pick now returns 1 in the success case, but additional work
would be necessary to return from conditions where 0 should be returned.
Checking this return value would be superfluous.
Signed-off-by: Mark Levedahl <mlevedahl@gmail•com>
---
git-gui.sh | 7 ++++++-
lib/choose_repository.tcl | 21 ++++++++-------------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/git-gui.sh b/git-gui.sh
index 2cf14d0dd5..44914bddcf 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -1153,9 +1153,14 @@ if {[catch {
load_config 1
apply_config
choose_repository::pick
- if {![file isdirectory $_gitdir]} {
+ if {[catch {
+ set _gitdir [git rev-parse --git-dir]
+ } err]} {
+ catch {wm withdraw .}
+ error_popup [strcat [mc "Unusable repo/worktree:"] " [pwd] \n\n$err"]
exit 1
}
+ set _prefix {}
set picked 1
}
diff --git a/lib/choose_repository.tcl b/lib/choose_repository.tcl
index 7e1462a20c..4b06afee93 100644
--- a/lib/choose_repository.tcl
+++ b/lib/choose_repository.tcl
@@ -15,7 +15,7 @@ field w_recentlist ; # Listbox containing recent repositories
field w_localpath ; # Entry widget bound to local_path
field done 0 ; # Finished picking the repository?
-field clone_ok false ; # clone succeeeded
+field pick_ok 0 ; # true if repo pick/clone succeeded
field local_path {} ; # Where this repository is locally
field origin_url {} ; # Where we are cloning from
field origin_name origin ; # What we shall call 'origin'
@@ -220,6 +220,8 @@ constructor pick {} {
if {$top eq {.}} {
eval destroy [winfo children $top]
}
+
+ return $pick_ok
}
method _center {} {
@@ -327,8 +329,7 @@ method _git_init {} {
}
_append_recentrepos [pwd]
- set ::_gitdir .git
- set ::_prefix {}
+ set pick_ok 1
return 1
}
@@ -409,6 +410,7 @@ method _do_new2 {} {
if {![_git_init $this]} {
return
}
+ set pick_ok 1
set done 1
}
@@ -621,7 +623,7 @@ method _do_clone2 {} {
}
tkwait variable @done
- if {!$clone_ok} {
+ if {!$pick_ok} {
error_popup [mc "Clone failed."]
return
}
@@ -632,18 +634,12 @@ method _do_clone2_done {ok} {
if {$ok} {
if {[catch {
cd $local_path
- set ::_gitdir .git
- set ::_prefix {}
_append_recentrepos [pwd]
} err]} {
set ok 0
}
}
- if {!$ok} {
- set ::_gitdir {}
- set ::_prefix {}
- }
- set clone_ok $ok
+ set pick_ok $ok
set done 1
}
@@ -721,8 +717,7 @@ method _do_open2 {} {
}
_append_recentrepos [pwd]
- set ::_gitdir $actualgit
- set ::_prefix {}
+ set pick_ok 1
set done 1
}
--
2.54.0.99.14
next prev parent reply other threads:[~2026-05-31 23:03 UTC|newest]
Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-21 16:28 [PATCH] git-gui: handle bare repo or missing worktree Shroom Moo
2026-04-29 6:58 ` Johannes Sixt
2026-04-29 17:32 ` [PATCH v2 1/1] git-gui: protect rev-parse --show-toplevel call Shroom Moo
2026-04-29 20:14 ` Mark Levedahl
2026-04-30 10:02 ` [PATCH v3 1/1] git-gui: handle missing worktree and separated gitdir Shroom Moo
2026-04-30 16:18 ` Mark Levedahl
2026-05-01 10:22 ` [PATCH v3 1/1] git-gui: handle missing worktree and separated Shroom Moo
2026-05-01 13:13 ` [PATCH v3 1/1] git-gui: handle missing worktree and separated gitdir Johannes Sixt
2026-05-01 16:42 ` Mark Levedahl
2026-05-02 21:51 ` Mark Levedahl
2026-05-03 8:53 ` Johannes Sixt
2026-05-04 15:13 ` Mark Levedahl
2026-05-05 3:40 ` Mark Levedahl
2026-05-06 7:32 ` Johannes Sixt
2026-05-06 11:27 ` Mark Levedahl
2026-05-06 12:57 ` Johannes Sixt
2026-05-06 14:05 ` Mark Levedahl
2026-05-07 5:09 ` Mark Levedahl
2026-05-01 10:54 ` [PATCH v4 " Shroom Moo
2026-05-04 14:59 ` [PATCH v5 1/1] git-gui: restructure repository startup Shroom Moo
2026-05-06 7:15 ` Johannes Sixt
2026-05-06 20:27 ` [PATCH v6 0/3] git-gui: robustify startup and fix environment handling Shroom Moo
2026-05-09 13:37 ` [PATCH v7 " Shroom Moo
2026-05-14 14:28 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 00/11] Improve git gui operation without a worktree Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 01/11] git-gui: allow specifying path '.' to the browser Mark Levedahl
2026-05-15 15:54 ` Johannes Sixt
2026-05-16 13:38 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 02/11] git-gui: refactor browser / blame argument parsing Mark Levedahl
2026-05-15 15:56 ` Johannes Sixt
2026-05-16 14:21 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 03/11] git-gui: guard set/unset of GIT_DIR and GIT_WORK_TREE Mark Levedahl
2026-05-15 15:58 ` Johannes Sixt
2026-05-16 14:25 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 04/11] git-gui: put choose_repository::pick in a proc Mark Levedahl
2026-05-15 11:00 ` Aina Boot
2026-05-15 13:33 ` Mark Levedahl
2026-05-15 15:59 ` Johannes Sixt
2026-05-16 14:29 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 05/11] git-gui: use --absolute-git-dir Mark Levedahl
2026-05-15 16:00 ` Johannes Sixt
2026-05-16 14:33 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 06/11] git gui: GIT_DIR / GIT_WORK_TREE make any discovery error fatal Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 07/11] git-gui: use rev-parse exclusively to find a repository Mark Levedahl
2026-05-15 16:06 ` Johannes Sixt
2026-05-16 14:38 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 08/11] git-gui: simplify [is_bare] to report if a worktree is known Mark Levedahl
2026-05-16 8:12 ` Johannes Sixt
2026-05-14 14:33 ` [PATCH v1 09/11] git-gui: support using repository parent dir as a worktree Mark Levedahl
2026-05-16 8:14 ` Johannes Sixt
2026-05-16 14:48 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 10/11] git-gui: improve worktree discovery Mark Levedahl
2026-05-16 8:16 ` Johannes Sixt
2026-05-16 15:28 ` Mark Levedahl
2026-05-19 8:16 ` Johannes Sixt
2026-05-19 19:00 ` Mark Levedahl
2026-05-14 14:33 ` [PATCH v1 11/11] git-gui: add gui and pick as explicit subcommands Mark Levedahl
2026-05-16 8:18 ` Johannes Sixt
2026-05-16 15:42 ` Mark Levedahl
2026-05-19 8:21 ` Johannes Sixt
2026-05-19 18:45 ` Mark Levedahl
2026-05-19 21:15 ` Johannes Sixt
2026-05-16 8:28 ` [PATCH v1 00/11] Improve git gui operation without a worktree Johannes Sixt
2026-05-20 20:23 ` [PATCH v2 " Mark Levedahl
2026-05-20 20:24 ` [PATCH v2 01/11] git-gui: guard set/unset of GIT_DIR and GIT_WORK_TREE Mark Levedahl
2026-05-22 8:06 ` Johannes Sixt
2026-05-22 11:54 ` Mark Levedahl
2026-05-23 8:18 ` Johannes Sixt
2026-05-23 11:46 ` Aina Boot
2026-05-23 16:08 ` Mark Levedahl
2026-05-20 20:24 ` [PATCH v2 02/11] git-gui: return status from choose_repository::pick Mark Levedahl
2026-05-22 8:18 ` Johannes Sixt
2026-05-20 20:24 ` [PATCH v2 03/11] git-gui: use --absolute-git-dir Mark Levedahl
2026-05-22 8:25 ` Johannes Sixt
2026-05-20 20:24 ` [PATCH v2 04/11] git-gui: use rev-parse exclusively to find a repository Mark Levedahl
2026-05-22 8:46 ` Johannes Sixt
2026-05-22 12:04 ` Mark Levedahl
2026-05-22 23:00 ` Mark Levedahl
2026-05-20 20:24 ` [PATCH v2 05/11] git-gui: simplify [is_bare] to report if a worktree is known Mark Levedahl
2026-05-20 20:24 ` [PATCH v2 06/11] git-gui: use git rev-parse for worktree discovery Mark Levedahl
2026-05-23 13:26 ` Johannes Sixt
2026-05-20 20:24 ` [PATCH v2 07/11] git-gui: try harder to find worktree from gitdir Mark Levedahl
2026-05-21 4:55 ` Shroom Moo
2026-05-21 17:45 ` Mark Levedahl
2026-05-22 15:09 ` Shroom Moo
2026-05-22 16:57 ` Mark Levedahl
2026-05-23 8:01 ` Johannes Sixt
2026-05-23 11:47 ` Shroom Moo
2026-05-23 14:06 ` Johannes Sixt
2026-05-23 15:33 ` Mark Levedahl
2026-05-20 20:24 ` [PATCH v2 08/11] git-gui: use HEAD as current branch when detached (bug fix) Mark Levedahl
2026-05-23 14:08 ` Johannes Sixt
2026-05-20 20:24 ` [PATCH v2 09/11] git-gui: allow specifying path '.' to the browser Mark Levedahl
2026-05-23 14:23 ` Johannes Sixt
2026-05-23 15:43 ` Mark Levedahl
2026-05-20 20:24 ` [PATCH v2 10/11] git-gui: adapt blame/browser parsing for bare operation Mark Levedahl
2026-05-21 5:02 ` Shroom Moo
2026-05-21 17:35 ` Mark Levedahl
2026-05-22 15:05 ` Shroom Moo
2026-05-23 18:19 ` [PATCH] fixup git-gui: allow blame to show uncommitted changes Mark Levedahl
2026-05-23 20:31 ` [PATCH v2 10/11] git-gui: adapt blame/browser parsing for bare operation Johannes Sixt
2026-05-20 20:24 ` [PATCH v2 11/11] git-gui: add gui and pick as explicit subcommands Mark Levedahl
2026-05-24 7:00 ` Johannes Sixt
2026-05-24 7:16 ` [PATCH v2 00/11] Improve git gui operation without a worktree Johannes Sixt
2026-05-25 16:02 ` Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 00/12] " Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 01/12] git-gui: use HEAD as current branch when detached Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 02/12] git-gui: remove unnecessary 'cd $_gitworktree' from do_gitk Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 03/12] git-gui: guard set/unset of GIT_DIR and GIT_WORK_TREE Mark Levedahl
2026-05-31 23:02 ` Mark Levedahl [this message]
2026-05-31 23:02 ` [PATCH v3 05/12] git-gui: use --absolute-git-dir Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 06/12] git-gui: use rev-parse exclusively to find a repository Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 07/12] git-gui: use git rev-parse for worktree discovery Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 08/12] git-gui: simplify [is_bare] to report if a worktree is known Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 09/12] git-gui: try harder to find worktree from gitdir Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 10/12] git-gui: allow specifying path '.' to the browser Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 11/12] git-gui: check browser/blame arguments carefully Mark Levedahl
2026-05-31 23:02 ` [PATCH v3 12/12] git-gui: add gui and pick as explicit subcommands Mark Levedahl
2026-06-02 17:34 ` [PATCH v3 00/12] Improve git gui operation without a worktree Johannes Sixt
2026-06-02 18:54 ` Mark Levedahl
2026-06-02 21:05 ` Johannes Sixt
[not found] ` <20260509133756.1367-1-egg_mushroomcow@foxmail.com>
2026-05-09 13:37 ` [PATCH v7 1/3] git-gui: restructure repository startup Shroom Moo
2026-05-15 8:26 ` Johannes Sixt
2026-05-09 13:37 ` [PATCH v7 2/3] git-gui: disable gitk visualization when no worktree available Shroom Moo
2026-05-15 8:28 ` Johannes Sixt
2026-05-09 13:37 ` [PATCH v7 3/3] git-gui: handle GIT_DIR and GIT_WORK_TREE early Shroom Moo
2026-05-15 8:28 ` Johannes Sixt
[not found] ` <20260506202751.3294-1-egg_mushroomcow@foxmail.com>
2026-05-06 20:27 ` [PATCH v6 1/3] git-gui: restructure repository startup Shroom Moo
2026-05-06 20:27 ` [PATCH v6 2/3] git-gui: disable gitk visualization when no worktree available Shroom Moo
2026-05-06 20:27 ` [PATCH v6 3/3] git-gui: handle GIT_DIR and GIT_WORK_TREE early Shroom Moo
2026-05-07 15:50 ` Mark Levedahl
2026-05-09 8:46 ` Aina Boot
2026-05-09 9:55 ` Shroom Moo
2026-04-29 18:28 ` [PATCH] git-gui: handle bare repo or missing worktree Shroom Moo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260531230225.126817-5-mlevedahl@gmail.com \
--to=mlevedahl@gmail$(echo .)com \
--cc=bootaina702@gmail$(echo .)com \
--cc=egg_mushroomcow@foxmail$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=j6t@kdbg$(echo .)org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox