git-gui: Make Ctrl-T safe to use for conflicting files.
[gitweb.git] / git-gui.sh
index 4a762355d64f41e89af3aa1ceab713ba16eae380..4d52f02dcec076d2d1af1c2e542068dbe2fcffde 100755 (executable)
@@ -678,6 +678,7 @@ set default_config(merge.verbosity) 2
 set default_config(user.name) {}
 set default_config(user.email) {}
 
+set default_config(gui.encoding) [encoding system]
 set default_config(gui.matchtrackingbranch) false
 set default_config(gui.pruneduringfetch) false
 set default_config(gui.trustmtime) false
@@ -1058,6 +1059,7 @@ set current_branch {}
 set is_detached 0
 set current_diff_path {}
 set is_3way_diff 0
+set is_conflict_diff 0
 set selected_commit_type new
 
 set nullid "0000000000000000000000000000000000000000"
@@ -2077,19 +2079,23 @@ proc toggle_or_diff {w x y} {
        $ui_index tag remove in_sel 0.0 end
        $ui_workdir tag remove in_sel 0.0 end
 
-       # Do not stage files with conflicts
+       # Determine the state of the file
        if {[info exists file_states($path)]} {
                set state [lindex $file_states($path) 0]
        } else {
                set state {__}
        }
 
-       if {[string first {U} $state] >= 0} {
-               set col 1
-       }
-
        # Restage the file, or simply show the diff
        if {$col == 0 && $y > 1} {
+               # Conflicts need special handling
+               if {[string first {U} $state] >= 0} {
+                       # $w must always be $ui_workdir, but...
+                       if {$w ne $ui_workdir} { set lno {} }
+                       merge_stage_workdir $path $lno
+                       return
+               }
+
                if {[string index $state 1] eq {O}} {
                        set mmask {}
                } else {
@@ -2409,7 +2415,7 @@ if {[is_enabled multicommit] || [is_enabled singlecommit]} {
 
        .mbar.commit add separator
 
-       if {![is_enabled nocommit]} {
+       if {![is_enabled nocommitmsg]} {
                .mbar.commit add command -label [mc "Sign Off"] \
                        -command do_signoff \
                        -accelerator $M1T-S
@@ -2739,7 +2745,7 @@ pack .vpane.lower.commarea.buttons.incall -side top -fill x
 lappend disable_on_lock \
        {.vpane.lower.commarea.buttons.incall conf -state}
 
-if {![is_enabled nocommit]} {
+if {![is_enabled nocommitmsg]} {
        button .vpane.lower.commarea.buttons.signoff -text [mc "Sign Off"] \
                -command do_signoff
        pack .vpane.lower.commarea.buttons.signoff -side top -fill x
@@ -3009,6 +3015,14 @@ proc create_common_diff_popup {ctxm} {
                -command {incr_font_size font_diff 1}
        lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
        $ctxm add separator
+       set emenu $ctxm.enc
+       menu $emenu
+       build_encoding_menu $emenu [list force_diff_encoding]
+       $ctxm add cascade \
+               -label [mc "Encoding"] \
+               -menu $emenu
+       lappend diff_actions [list $ctxm entryconf [$ctxm index last] -state]
+       $ctxm add separator
        $ctxm add command -label [mc "Options..."] \
                -command do_options
 }
@@ -3048,11 +3062,6 @@ $ctxmmg add command \
        -command {merge_resolve_one 1}
 lappend diff_actions [list $ctxmmg entryconf [$ctxmmg index last] -state]
 $ctxmmg add separator
-$ctxmmg add command \
-       -label [mc "Stage Working Copy"] \
-       -command {merge_resolve_one 0}
-lappend diff_actions [list $ctxmmg entryconf [$ctxmmg index last] -state]
-$ctxmmg add separator
 create_common_diff_popup $ctxmmg
 
 proc popup_diff_menu {ctxm ctxmmg x y X Y} {