git-gui: Allow the user to disable diff stat summary during pull.
[gitweb.git] / git-gui
diff --git a/git-gui b/git-gui
index 580110e629ec5f372c91ee2cecd8e749dbf88a18..761ce7551f8250fba693ecc8d516cb7f00303e6e 100755 (executable)
--- a/git-gui
+++ b/git-gui
@@ -24,24 +24,27 @@ proc is_many_config {name} {
        }
 }
 
-proc load_config {} {
+proc load_config {include_global} {
        global repo_config global_config default_config
 
        array unset global_config
-       array unset repo_config
-       catch {
-               set fd_rc [open "| git repo-config --global --list" r]
-               while {[gets $fd_rc line] >= 0} {
-                       if {[regexp {^([^=]+)=(.*)$} $line line name value]} {
-                               if {[is_many_config $name]} {
-                                       lappend global_config($name) $value
-                               } else {
-                                       set global_config($name) $value
+       if {$include_global} {
+               catch {
+                       set fd_rc [open "| git repo-config --global --list" r]
+                       while {[gets $fd_rc line] >= 0} {
+                               if {[regexp {^([^=]+)=(.*)$} $line line name value]} {
+                                       if {[is_many_config $name]} {
+                                               lappend global_config($name) $value
+                                       } else {
+                                               set global_config($name) $value
+                                       }
                                }
                        }
+                       close $fd_rc
                }
-               close $fd_rc
        }
+
+       array unset repo_config
        catch {
                set fd_rc [open "| git repo-config --list" r]
                while {[gets $fd_rc line] >= 0} {
@@ -91,7 +94,8 @@ proc save_config {} {
                        if {$value == $default_config($name)} {
                                catch {exec git repo-config --global --unset $name}
                        } else {
-                               catch {exec git repo-config --global $name $value}
+                               regsub -all "\[{}\]" $value {"} value
+                               exec git repo-config --global $name $value
                        }
                        set global_config($name) $value
                        if {$value == $repo_config($name)} {
@@ -107,7 +111,8 @@ proc save_config {} {
                        if {$value == $global_config($name)} {
                                catch {exec git repo-config --unset $name}
                        } else {
-                               catch {exec git repo-config $name $value}
+                               regsub -all "\[{}\]" $value {"} value
+                               exec git repo-config $name $value
                        }
                        set repo_config($name) $value
                }
@@ -167,6 +172,7 @@ if {$cdup != ""} {
 }
 unset cdup
 
+set single_commit 0
 if {$appname == {git-citool}} {
        set single_commit 1
 }
@@ -175,7 +181,6 @@ if {$appname == {git-citool}} {
 ##
 ## task management
 
-set single_commit 0
 set status_active 0
 set diff_active 0
 set commit_active 0
@@ -891,8 +896,7 @@ proc fetch_from {remote} {
 }
 
 proc pull_remote {remote branch} {
-       global HEAD commit_type
-       global file_states
+       global HEAD commit_type file_states repo_config
 
        if {![lock_index update]} return
 
@@ -928,6 +932,9 @@ Commit or throw away all changes before starting a pull operation.
        set w [new_console "pull $remote $branch" \
                "Pulling new changes from branch $branch in $remote"]
        set cmd [list git pull]
+       if {$repo_config(gui.pullsummary) == {false}} {
+               lappend cmd --no-summary
+       }
        lappend cmd $remote
        lappend cmd $branch
        console_exec $w $cmd [list post_pull_remote $remote $branch]
@@ -1709,7 +1716,7 @@ proc do_options {} {
        global repo_config global_config
        global repo_config_new global_config_new
 
-       load_config
+       load_config 1
        array unset repo_config_new
        array unset global_config_new
        foreach name [array names repo_config] {
@@ -1755,6 +1762,7 @@ proc do_options {} {
        pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5
 
        foreach option {
+               {pullsummary {Show Pull Summary}}
                {trustmtime {Trust File Modification Timestamps}}
                } {
                set name [lindex $option 0]
@@ -1803,7 +1811,7 @@ proc do_options {} {
 }
 
 proc do_restore_defaults {} {
-       global font_descs default_config
+       global font_descs default_config repo_config
        global repo_config_new global_config_new
 
        foreach name [array names default_config] {
@@ -1813,7 +1821,7 @@ proc do_restore_defaults {} {
 
        foreach option $font_descs {
                set name [lindex $option 0]
-               set repo_config($name) $default_config(gui.$name)
+               set repo_config(gui.$name) $default_config(gui.$name)
        }
        apply_config
 
@@ -1911,13 +1919,14 @@ proc apply_config {} {
 }
 
 set default_config(gui.trustmtime) false
+set default_config(gui.pullsummary) true
 set default_config(gui.fontui) [font configure font_ui]
 set default_config(gui.fontdiff) [font configure font_diff]
 set font_descs {
        {fontui   font_ui   {Main Font}}
        {fontdiff font_diff {Diff/Console Font}}
 }
-load_config
+load_config 0
 apply_config
 
 ######################################################################
@@ -1929,9 +1938,11 @@ menu .mbar -tearoff 0
 .mbar add cascade -label Project -menu .mbar.project
 .mbar add cascade -label Edit -menu .mbar.edit
 .mbar add cascade -label Commit -menu .mbar.commit
-.mbar add cascade -label Fetch -menu .mbar.fetch
-.mbar add cascade -label Pull -menu .mbar.pull
-.mbar add cascade -label Push -menu .mbar.push
+if {!$single_commit} {
+       .mbar add cascade -label Fetch -menu .mbar.fetch
+       .mbar add cascade -label Pull -menu .mbar.pull
+       .mbar add cascade -label Push -menu .mbar.push
+}
 . configure -menu .mbar
 
 # -- Project Menu
@@ -1939,9 +1950,11 @@ menu .mbar.project
 .mbar.project add command -label Visualize \
        -command do_gitk \
        -font font_ui
-.mbar.project add command -label {Repack Database} \
-       -command do_repack \
-       -font font_ui
+if {!$single_commit} {
+       .mbar.project add command -label {Repack Database} \
+               -command do_repack \
+               -font font_ui
+}
 .mbar.project add command -label Quit \
        -command do_quit \
        -accelerator $M1T-Q \
@@ -2015,14 +2028,16 @@ lappend disable_on_lock \
 lappend disable_on_lock \
        [list .mbar.commit entryconf [.mbar.commit index last] -state]
 
-# -- Fetch Menu
-menu .mbar.fetch
+if {!$single_commit} {
+       # -- Fetch Menu
+       menu .mbar.fetch
 
-# -- Pull Menu
-menu .mbar.pull
+       # -- Pull Menu
+       menu .mbar.pull
 
-# -- Push Menu
-menu .mbar.push
+       # -- Push Menu
+       menu .mbar.push
+}
 
 # -- Main Window Layout
 panedwindow .vpane -orient vertical
@@ -2068,7 +2083,7 @@ $ui_index tag conf in_diff -font font_uibold
 $ui_other tag conf in_diff -font font_uibold
 
 # -- Diff and Commit Area
-frame .vpane.lower -height 400 -width 400
+frame .vpane.lower -height 300 -width 400
 frame .vpane.lower.commarea
 frame .vpane.lower.diff -relief sunken -borderwidth 1
 pack .vpane.lower.commarea -side top -fill x
@@ -2254,6 +2269,9 @@ $ui_diff.ctxm add command -label "Decrease Font Size" \
 $ui_diff.ctxm add command -label "Increase Font Size" \
        -font font_ui \
        -command {incr_font_size font_diff 1}
+$ui_diff.ctxm add command -label {Options...} \
+       -font font_ui \
+       -command do_options
 bind_button3 $ui_diff "tk_popup $ui_diff.ctxm %X %Y"
 
 # -- Status Bar
@@ -2330,9 +2348,10 @@ set file_lists($ui_other) [list]
 
 wm title . "$appname ([file normalize [file dirname $gitdir]])"
 focus -force $ui_comm
-load_all_remotes
-populate_remote_menu .mbar.fetch From fetch_from
-populate_remote_menu .mbar.push To push_to
-populate_pull_menu .mbar.pull
-tkwait visibility .
-update_status
+if {!$single_commit} {
+       load_all_remotes
+       populate_remote_menu .mbar.fetch From fetch_from
+       populate_remote_menu .mbar.push To push_to
+       populate_pull_menu .mbar.pull
+}
+after 1 update_status