Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-12-09 00:03:12 +0300
committerJunio C Hamano <junkio@cox.net>2006-12-09 22:13:17 +0300
commitcda2d3c112a03079af9019c7d6617e65ab88ae7e (patch)
treeed268cd5dc9469feabae431764f1bcd8b8ed0681
parentd9671b75ad3bbf2f95f11a8571e9beaa12ccf6dd (diff)
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>
-rw-r--r--Documentation/git-rerere.txt56
-rwxr-xr-xgit-rerere.perl25
2 files changed, 57 insertions, 24 deletions
diff --git a/Documentation/git-rerere.txt b/Documentation/git-rerere.txt
index 22494b2b2e..116dca4c06 100644
--- a/Documentation/git-rerere.txt
+++ b/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
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
----------
@@ -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
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 b2550bb2ef..61eef575da 100755
--- a/git-rerere.perl
+++ b/git-rerere.perl
@@ -169,6 +169,28 @@ sub merge {
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);
read_rr();
@@ -198,6 +220,9 @@ if (@ARGV) {
"$rr_dir/$name/preimage", $path);
}
}
+ elsif ($arg eq 'gc') {
+ garbage_collect_rerere(@ARGV);
+ }
else {
die "$0 unknown command: $arg\n";
}