Skip to content

Commit

Permalink
rerere: add clear, diff, and status commands
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Eric Wong authored and Junio C Hamano committed Dec 9, 2006
1 parent 4cfeccc commit d9671b7
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 2 deletions.
27 changes: 25 additions & 2 deletions Documentation/git-rerere.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ git-rerere - Reuse recorded resolve

SYNOPSIS
--------
'git-rerere'

'git-rerere' [clear|diff|status]

DESCRIPTION
-----------
Expand Down Expand Up @@ -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
------
Expand Down
32 changes: 32 additions & 0 deletions git-rerere.perl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit d9671b7

Please sign in to comment.