Skip to content

Commit

Permalink
git-gui: Implement system-wide configuration handling.
Browse files Browse the repository at this point in the history
With the old implementation any system-wide options appear
to be set locally in the current repository. This commit
adds explicit handling of system options, essentially
interpreting them as customized default_config.

The difficulty in interpreting system options stems from
the fact that simple 'git config' lists all values, while
'git config --global' only values set in ~/.gitconfig,
excluding both local and system options.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
  • Loading branch information
Alexander Gavrilov authored and Shawn O. Pearce committed Nov 16, 2008
1 parent d1f2b36 commit 153ad78
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
12 changes: 9 additions & 3 deletions git-gui.sh
Original file line number Diff line number Diff line change
Expand Up @@ -940,19 +940,25 @@ git-version proc _parse_config {arr_name args} {
}
proc load_config {include_global} {
global repo_config global_config default_config
global repo_config global_config system_config default_config
if {$include_global} {
_parse_config system_config --system
_parse_config global_config --global
}
_parse_config repo_config
foreach name [array names default_config] {
if {[catch {set v $system_config($name)}]} {
set system_config($name) $default_config($name)
}
}
foreach name [array names system_config] {
if {[catch {set v $global_config($name)}]} {
set global_config($name) $default_config($name)
set global_config($name) $system_config($name)
}
if {[catch {set v $repo_config($name)}]} {
set repo_config($name) $default_config($name)
set repo_config($name) $system_config($name)
}
}
}
Expand Down
12 changes: 6 additions & 6 deletions lib/option.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ proc config_check_encodings {} {

proc save_config {} {
global default_config font_descs
global repo_config global_config
global repo_config global_config system_config
global repo_config_new global_config_new
global ui_comm_spell

Expand All @@ -49,7 +49,7 @@ proc save_config {} {
foreach name [array names default_config] {
set value $global_config_new($name)
if {$value ne $global_config($name)} {
if {$value eq $default_config($name)} {
if {$value eq $system_config($name)} {
catch {git config --global --unset $name}
} else {
regsub -all "\[{}\]" $value {"} value
Expand Down Expand Up @@ -284,17 +284,17 @@ proc do_options {} {
}

proc do_restore_defaults {} {
global font_descs default_config repo_config
global font_descs default_config repo_config system_config
global repo_config_new global_config_new

foreach name [array names default_config] {
set repo_config_new($name) $default_config($name)
set global_config_new($name) $default_config($name)
set repo_config_new($name) $system_config($name)
set global_config_new($name) $system_config($name)
}

foreach option $font_descs {
set name [lindex $option 0]
set repo_config(gui.$name) $default_config(gui.$name)
set repo_config(gui.$name) $system_config(gui.$name)
}
apply_config

Expand Down

0 comments on commit 153ad78

Please sign in to comment.