Browse Source

git-rerere: add 'gc' command.

Over time, unresolved rr-cache entries are accumulated and they
tend to get less and less likely to be useful as the tips of
branches advance.

Reorder documentation page to show the subcommand section earlier
than the discussion section.

Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Junio C Hamano 18 years ago
parent
commit
cda2d3c112
  1. 56
      Documentation/git-rerere.txt
  2. 25
      git-rerere.perl

56
Documentation/git-rerere.txt

@ -26,6 +26,38 @@ results and applying the previously recorded hand resolution.
You need to create `$GIT_DIR/rr-cache` directory to enable this You need to create `$GIT_DIR/rr-cache` directory to enable this
command. command.



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.

'gc'::

This command is used to prune records of conflicted merge that
occurred long time ago.


DISCUSSION DISCUSSION
---------- ----------


@ -166,30 +198,6 @@ would conflict the same way the test merge you resolved earlier.
`git-rerere` is run by `git rebase` to help you resolve this `git-rerere` is run by `git rebase` to help you resolve this
conflict. 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 Author
------ ------

25
git-rerere.perl

@ -169,6 +169,28 @@ sub merge {
return 0; return 0;
} }


sub garbage_collect_rerere {
# We should allow specifying these from the command line and
# that is why the caller gives @ARGV to us, but I am lazy.

my $cutoff_noresolve = 15; # two weeks
my $cutoff_resolve = 60; # two months
my @to_remove;
while (<$rr_dir/*/preimage>) {
my ($dir) = /^(.*)\/preimage$/;
my $cutoff = ((-f "$dir/postimage")
? $cutoff_resolve
: $cutoff_noresolve);
my $age = -M "$_";
if ($cutoff <= $age) {
push @to_remove, $dir;
}
}
if (@to_remove) {
rmtree(\@to_remove);
}
}

-d "$rr_dir" || exit(0); -d "$rr_dir" || exit(0);


read_rr(); read_rr();
@ -198,6 +220,9 @@ if (@ARGV) {
"$rr_dir/$name/preimage", $path); "$rr_dir/$name/preimage", $path);
} }
} }
elsif ($arg eq 'gc') {
garbage_collect_rerere(@ARGV);
}
else { else {
die "$0 unknown command: $arg\n"; die "$0 unknown command: $arg\n";
} }

Loading…
Cancel
Save