diff options
author | Eric Wong <normalperson@yhbt.net> | 2006-12-08 13:29:55 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-12-09 11:09:27 -0800 |
commit | d9671b75ad3bbf2f95f11a8571e9beaa12ccf6dd (patch) | |
tree | 77927d02162907505221d58d57c0af972fb6a1cd | |
parent | 4cfeccc75d6ab1ccc433770bac6bf3b15ab486d6 (diff) | |
download | git-d9671b75ad3bbf2f95f11a8571e9beaa12ccf6dd.tar.gz git-d9671b75ad3bbf2f95f11a8571e9beaa12ccf6dd.tar.xz |
rerere: add clear, diff, and status commands
git-am and git-rebase will be updated to use 'clear', and
diff/status can be used to aid the user in tracking progress in
the resolution process.
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | Documentation/git-rerere.txt | 27 | ||||
-rwxr-xr-x | git-rerere.perl | 32 |
2 files changed, 57 insertions, 2 deletions
diff --git a/Documentation/git-rerere.txt b/Documentation/git-rerere.txt index 8b6b65123..22494b2b2 100644 --- a/Documentation/git-rerere.txt +++ b/Documentation/git-rerere.txt @@ -7,8 +7,7 @@ git-rerere - Reuse recorded resolve SYNOPSIS -------- -'git-rerere' - +'git-rerere' [clear|diff|status] DESCRIPTION ----------- @@ -167,6 +166,30 @@ would conflict the same way the test merge you resolved earlier. `git-rerere` is run by `git rebase` to help you resolve this conflict. +COMMANDS +-------- + +Normally, git-rerere is run without arguments or user-intervention. +However, it has several commands that allow it to interact with +its working state. + +'clear':: + +This resets the metadata used by rerere if a merge resolution is to be +is aborted. Calling gitlink:git-am[1] --skip or gitlink:git-rebase[1] +[--skip|--abort] will automatcally invoke this command. + +'diff':: + +This displays diffs for the current state of the resolution. It is +useful for tracking what has changed while the user is resolving +conflicts. Additional arguments are passed directly to the system +diff(1) command installed in PATH. + +'status':: + +Like diff, but this only prints the filenames that will be tracked +for resolutions. Author ------ diff --git a/git-rerere.perl b/git-rerere.perl index d3664ff49..b2550bb2e 100755 --- a/git-rerere.perl +++ b/git-rerere.perl @@ -172,6 +172,38 @@ sub merge { -d "$rr_dir" || exit(0); read_rr(); + +if (@ARGV) { + my $arg = shift @ARGV; + if ($arg eq 'clear') { + for my $path (keys %merge_rr) { + my $name = $merge_rr{$path}; + if (-d "$rr_dir/$name" && + ! -f "$rr_dir/$name/postimage") { + rmtree(["$rr_dir/$name"]); + } + } + unlink $merge_rr; + } + elsif ($arg eq 'status') { + for my $path (keys %merge_rr) { + print $path, "\n"; + } + } + elsif ($arg eq 'diff') { + for my $path (keys %merge_rr) { + my $name = $merge_rr{$path}; + system('diff', ((@ARGV == 0) ? ('-u') : @ARGV), + '-L', "a/$path", '-L', "b/$path", + "$rr_dir/$name/preimage", $path); + } + } + else { + die "$0 unknown command: $arg\n"; + } + exit 0; +} + my %conflict = map { $_ => 1 } find_conflict(); # MERGE_RR records paths with conflicts immediately after merge |