aboutsummaryrefslogtreecommitdiffstats
path: root/git-gui
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2006-11-07 04:26:02 -0500
committerShawn O. Pearce <spearce@spearce.org>2006-11-07 04:26:02 -0500
commit0d4f3eb5f330a53300e630c1ffe4ea1fa61f5dd9 (patch)
tree3d4671c82bc890310a211c30b209e2b5c21fb97f /git-gui
parent37af79d10d980418eaeca953c4ba1c08a85d37e9 (diff)
downloadgit-0d4f3eb5f330a53300e630c1ffe4ea1fa61f5dd9.tar.gz
git-gui: Cache all repo-config data in an array.
We're likely going to need key/value pairs from the repo-config beyond just remote.*.url, so cache them all up front into a Tcl array where we have fast access to them without needing to refork a repo-config --list process. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'git-gui')
-rwxr-xr-xgit-gui24
1 files changed, 19 insertions, 5 deletions
diff --git a/git-gui b/git-gui
index adc89474a7..de67aa2a68 100755
--- a/git-gui
+++ b/git-gui
@@ -791,8 +791,23 @@ proc toggle_mode {path} {
##
## config (fetch push pull)
+proc load_repo_config {} {
+ global repo_config
+
+ array unset repo_config
+ catch {
+ set fd_rc [open "| git repo-config --list" r]
+ while {[gets $fd_rc line] >= 0} {
+ if {[regexp {^([^=]+)=(.*)$} $line line name value]} {
+ lappend repo_config($name) $value
+ }
+ }
+ close $fd_rc
+ }
+}
+
proc load_all_remotes {} {
- global gitdir all_remotes
+ global gitdir all_remotes repo_config
set all_remotes [list]
set rm_dir [file join $gitdir remotes]
@@ -804,13 +819,11 @@ proc load_all_remotes {} {
-directory $rm_dir *]]
}
- set fd_rc [open "| git repo-config --list" r]
- while {[gets $fd_rc line] >= 0} {
- if {[regexp ^remote\.(.*)\.url= $line line name]} {
+ foreach line [array names repo_config remote.*.url] {
+ if {[regexp ^remote\.(.*)\.url\$ $line line name]} {
lappend all_remotes $name
}
}
- close $fd_rc
set all_remotes [lsort -unique $all_remotes]
}
@@ -1541,6 +1554,7 @@ if {$appname == {git-citool}} {
wm title . "$appname ([file normalize [file dirname $gitdir]])"
focus -force $ui_comm
+load_repo_config
load_all_remotes
populate_remote_menu .mbar.fetch From fetch_from
populate_remote_menu .mbar.push To push_to