Browse Source

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>
maint
Eric Wong 18 years ago committed by Junio C Hamano
parent
commit
d9671b75ad
  1. 27
      Documentation/git-rerere.txt
  2. 32
      git-rerere.perl

27
Documentation/git-rerere.txt

@ -7,8 +7,7 @@ git-rerere - Reuse recorded resolve @@ -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. @@ -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
------

32
git-rerere.perl

@ -172,6 +172,38 @@ sub merge { @@ -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

Loading…
Cancel
Save