Code

Merge git://repo.or.cz/git-gui
[git.git] / git-gui / lib / mergetool.tcl
index 79c58bc7bc8c79a13acd1370b184a530d67eaa20..6ab5701d937b9a719570907e745609b60d1d56a8 100644 (file)
@@ -5,24 +5,51 @@ proc merge_resolve_one {stage} {
        global current_diff_path
 
        switch -- $stage {
-               1 { set target [mc "the base version"] }
-               2 { set target [mc "this branch"] }
-               3 { set target [mc "the other branch"] }
+               1 { set targetquestion [mc "Force resolution to the base version?"] }
+               2 { set targetquestion [mc "Force resolution to this branch?"] }
+               3 { set targetquestion [mc "Force resolution to the other branch?"] }
        }
 
-       set op_question [mc "Force resolution to %s?
-Note that the diff shows only conflicting changes.
+       set op_question [strcat $targetquestion "\n" \
+[mc "Note that the diff shows only conflicting changes.
 
 %s will be overwritten.
 
 This operation can be undone only by restarting the merge." \
-               $target [short_path $current_diff_path]]
+               [short_path $current_diff_path]]]
 
        if {[ask_popup $op_question] eq {yes}} {
                merge_load_stages $current_diff_path [list merge_force_stage $stage]
        }
 }
 
+proc merge_stage_workdir {path w lno} {
+       global current_diff_path diff_active
+
+       if {$diff_active} return
+
+       if {$path ne $current_diff_path} {
+               show_diff $path $w $lno {} [list do_merge_stage_workdir $path]
+       } else {
+               do_merge_stage_workdir $path
+       }
+}
+
+proc do_merge_stage_workdir {path} {
+       global current_diff_path is_conflict_diff
+
+       if {$path ne $current_diff_path} return;
+
+       if {$is_conflict_diff} {
+               if {[ask_popup [mc "File %s seems to have unresolved conflicts, still stage?" \
+                               [short_path $path]]] ne {yes}} {
+                       return
+               }
+       }
+
+       merge_add_resolution $path
+}
+
 proc merge_add_resolution {path} {
        global current_diff_path ui_workdir