git-gui: Reimplement and enhance auto-selection of diffs.

Generalize the next_diff system, and implement auto-reselection
for merge tool resolution and reshow_diff. Also add auto-selection
of diffs after rescan, if no diff is already selected.

New auto-select rules:

- Rescan auto-selects the first conflicting file, or if none
  a modified tracked file, if nothing was selected previously.
- Resolving a conflict auto-selects the nearest conflicting
  file, or nothing if everything is resolved.
- Staging the last remaining hunk auto-selects the nearest
  modified staged file.
- Staging a file through its icon auto-selects the nearest file.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Alexander Gavrilov
2008-08-31 01:02:56 +04:00
committed by Shawn O. Pearce
parent ff515d81fa
commit 29853b9010
3 changed files with 109 additions and 39 deletions

View File

@ -24,13 +24,9 @@ This operation can be undone only by restarting the merge." \
}
proc merge_add_resolution {path} {
global current_diff_path
global current_diff_path ui_workdir
if {$path eq $current_diff_path} {
set after {reshow_diff;}
} else {
set after {}
}
set after [next_diff_after_action $ui_workdir $path {} {^_?U}]
update_index \
[mc "Adding resolution for %s" [short_path $path]] \