diff options
-rwxr-xr-x | git-gui.sh | 4 | ||||
-rw-r--r-- | lib/index.tcl | 11 | ||||
-rw-r--r-- | lib/merge.tcl | 1 | ||||
-rw-r--r-- | lib/mergetool.tcl | 7 |
4 files changed, 17 insertions, 6 deletions
diff --git a/git-gui.sh b/git-gui.sh index 09ce4101f..4d52f02dc 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -2090,7 +2090,9 @@ proc toggle_or_diff {w x y} { if {$col == 0 && $y > 1} { # Conflicts need special handling if {[string first {U} $state] >= 0} { - merge_stage_workdir $path $w $lno + # $w must always be $ui_workdir, but... + if {$w ne $ui_workdir} { set lno {} } + merge_stage_workdir $path $lno return } diff --git a/lib/index.tcl b/lib/index.tcl index b045219a1..d33896a0c 100644 --- a/lib/index.tcl +++ b/lib/index.tcl @@ -298,11 +298,18 @@ proc add_helper {txt paths} { set after {} foreach path $paths { switch -glob -- [lindex $file_states($path) 0] { + _U - + U? { + if {$path eq $current_diff_path} { + unlock_index + merge_stage_workdir $path + return + } + } _O - ?M - ?D - - ?T - - U? { + ?T { lappend pathList $path if {$path eq $current_diff_path} { set after {reshow_diff;} diff --git a/lib/merge.tcl b/lib/merge.tcl index 5c01875b0..ac4c7ded1 100644 --- a/lib/merge.tcl +++ b/lib/merge.tcl @@ -40,6 +40,7 @@ The rescan will be automatically started now. _O { continue; # and pray it works! } + _U U? { error_popup [mc "You are in the middle of a conflicted merge. diff --git a/lib/mergetool.tcl b/lib/mergetool.tcl index 8d1ee5b11..eb2b4b56a 100644 --- a/lib/mergetool.tcl +++ b/lib/mergetool.tcl @@ -23,13 +23,14 @@ This operation can be undone only by restarting the merge." \ } } -proc merge_stage_workdir {path w lno} { +proc merge_stage_workdir {path {lno {}}} { global current_diff_path diff_active + global current_diff_side ui_workdir if {$diff_active} return - if {$path ne $current_diff_path} { - show_diff $path $w $lno {} [list do_merge_stage_workdir $path] + if {$path ne $current_diff_path || $ui_workdir ne $current_diff_side} { + show_diff $path $ui_workdir $lno {} [list do_merge_stage_workdir $path] } else { do_merge_stage_workdir $path } |