]> asedeno.scripts.mit.edu Git - git.git/blobdiff - lib/mergetool.tcl
git-gui: mc cannot be used before msgcat has been loaded
[git.git] / lib / mergetool.tcl
index a44a7258bccc5bffea21b470eb297b02f0ad97af..3fe90e697002baaa1c5fa8df4c3d3eae199b062d 100644 (file)
@@ -5,12 +5,6 @@ proc merge_resolve_one {stage} {
        global current_diff_path
 
        switch -- $stage {
-               0 {     # Stage without confirmation, to minimize
-                       # disruption of the rerere workflow
-                       merge_add_resolution $current_diff_path
-                       return
-               }
-
                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?"] }
@@ -29,6 +23,34 @@ This operation can be undone only by restarting the merge." \
        }
 }
 
+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 || $ui_workdir ne $current_diff_side} {
+               show_diff $path $ui_workdir $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
 
@@ -66,7 +88,7 @@ proc merge_load_stages {path cont} {
        set merge_stages(3) {}
        set merge_stages_buf {}
 
-       set merge_stages_fd [eval git_read ls-files -u -z -- $path]
+       set merge_stages_fd [eval git_read ls-files -u -z -- {$path}]
 
        fconfigure $merge_stages_fd -blocking 0 -translation binary -encoding binary
        fileevent $merge_stages_fd readable [list read_merge_stages $merge_stages_fd $cont]
@@ -354,26 +376,18 @@ proc merge_tool_finish {fd} {
                }
        }
 
-       # Check the modification time of the target file
-       if {!$failed && [file mtime $mtool_target] eq $mtool_mtime} {
-               if {[ask_popup [mc "File %s unchanged, still accept as resolved?" \
-                               [short_path $mtool_target]]] ne {yes}} {
-                       set failed 1
-               }
-       }
-
        # Finish
        if {$failed} {
                file rename -force -- $backup $mtool_target
                delete_temp_files $mtool_tmpfiles
                ui_status [mc "Merge tool failed."]
        } else {
-               if {[is_config_true merge.keepbackup]} {
+               if {[is_config_true mergetool.keepbackup]} {
                        file rename -force -- $backup "$mtool_target.orig"
                }
 
                delete_temp_files $mtool_tmpfiles
 
-               merge_add_resolution $mtool_target
+               reshow_diff
        }
 }