git-gui: Make Ctrl-T safe to use for conflicting files.
A previous patch added a check for conflict markers, which is done when the file is about to be staged due to a click on the icon. However, pressing Ctrl-T still immediately stages the file without confirmation. This patch fixes it. The check requires a loaded diff, so staging multiple files at once won't work if they are unmerged. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
d3bcf55d67
commit
0aea2842d9
@ -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
|
||||
}
|
||||
|
||||
|
@ -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;}
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user