git-gui: Implement system-wide configuration handling.

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>
This commit is contained in:
Alexander Gavrilov
2008-11-16 21:46:47 +03:00
committed by Shawn O. Pearce
parent d1f2b362b7
commit 153ad78b50
2 changed files with 15 additions and 9 deletions

View File

@ -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)
}
}
}