From: Shawn O. Pearce Date: Tue, 7 Nov 2006 09:26:02 +0000 (-0500) Subject: git-gui: Cache all repo-config data in an array. X-Git-Tag: gitgui-0.6.0~285 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=0d4f3eb5f330a53300e630c1ffe4ea1fa61f5dd9;p=git.git 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 --- diff --git a/git-gui b/git-gui index adc89474a..de67aa2a6 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