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>maint
parent
d3bcf55d67
commit
0aea2842d9
|
@ -2090,7 +2090,9 @@ proc toggle_or_diff {w x y} {
|
||||||
if {$col == 0 && $y > 1} {
|
if {$col == 0 && $y > 1} {
|
||||||
# Conflicts need special handling
|
# Conflicts need special handling
|
||||||
if {[string first {U} $state] >= 0} {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -298,11 +298,18 @@ proc add_helper {txt paths} {
|
||||||
set after {}
|
set after {}
|
||||||
foreach path $paths {
|
foreach path $paths {
|
||||||
switch -glob -- [lindex $file_states($path) 0] {
|
switch -glob -- [lindex $file_states($path) 0] {
|
||||||
|
_U -
|
||||||
|
U? {
|
||||||
|
if {$path eq $current_diff_path} {
|
||||||
|
unlock_index
|
||||||
|
merge_stage_workdir $path
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
_O -
|
_O -
|
||||||
?M -
|
?M -
|
||||||
?D -
|
?D -
|
||||||
?T -
|
?T {
|
||||||
U? {
|
|
||||||
lappend pathList $path
|
lappend pathList $path
|
||||||
if {$path eq $current_diff_path} {
|
if {$path eq $current_diff_path} {
|
||||||
set after {reshow_diff;}
|
set after {reshow_diff;}
|
||||||
|
|
|
@ -40,6 +40,7 @@ The rescan will be automatically started now.
|
||||||
_O {
|
_O {
|
||||||
continue; # and pray it works!
|
continue; # and pray it works!
|
||||||
}
|
}
|
||||||
|
_U
|
||||||
U? {
|
U? {
|
||||||
error_popup [mc "You are in the middle of a conflicted merge.
|
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_path diff_active
|
||||||
|
global current_diff_side ui_workdir
|
||||||
|
|
||||||
if {$diff_active} return
|
if {$diff_active} return
|
||||||
|
|
||||||
if {$path ne $current_diff_path} {
|
if {$path ne $current_diff_path || $ui_workdir ne $current_diff_side} {
|
||||||
show_diff $path $w $lno {} [list do_merge_stage_workdir $path]
|
show_diff $path $ui_workdir $lno {} [list do_merge_stage_workdir $path]
|
||||||
} else {
|
} else {
|
||||||
do_merge_stage_workdir $path
|
do_merge_stage_workdir $path
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue