Re: [PATCH] gc: make --prune useful again by accepting an optional parameter
Thanks for both of your sets of comments.
This is the interdiff.
---
Documentation/git-gc.txt | 7 ++++---
builtin-gc.c | 2 +-
t/t5304-prune.sh | 24 +++++++++++++++++++++---
3 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt
index fcef5fb..b292e98 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.txt
@@ -8,7 +8,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository
SYNOPSIS
--------
-'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date>]
+'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]
DESCRIPTION
-----------
@@ -60,8 +60,9 @@ are consolidated into a single pack by using the `-A` option of
automatic consolidation of packs.
--prune=<date>::
- Prune loose objects older than date (default is 2 weeks ago).
- This option is on by default.
+ Prune loose objects older than date (default is 2 weeks ago,
+ overrideable by the config variable `gc.pruneExpire`). This
+ option is on by default.
--no-prune::
Do not prune any loose objects.
diff --git a/builtin-gc.c b/builtin-gc.c
index 06bc83c..fc556ed 100644
--- a/builtin-gc.c
+++ b/builtin-gc.c
@@ -181,7 +181,7 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
struct option builtin_gc_options[] = {
{ OPTION_STRING, 0, "prune", &prune_expire, "date",
- "prune unreferenced objects (deprecated)",
+ "prune unreferenced objects",
PARSE_OPT_OPTARG, NULL, (intptr_t)prune_expire },
OPT_BOOLEAN(0, "aggressive", &aggressive, "be more thorough (increased runtime)"),
OPT_BOOLEAN(0, "auto", &auto_gc, "enable auto-gc mode"),
diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh
index 2e9c4a9..55ed7c7 100755
--- a/t/t5304-prune.sh
+++ b/t/t5304-prune.sh
@@ -112,7 +112,7 @@ test_expect_success 'prune: do not prune heads listed as an argument' '
'
-test_expect_success 'gc --no-prune && gc --prune=<date>' '
+test_expect_success 'gc --no-prune' '
before=$(git count-objects | sed "s/ .*//") &&
BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
@@ -120,14 +120,32 @@ test_expect_success 'gc --no-prune && gc --prune=<date>' '
test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
test -f $BLOB_FILE &&
test-chmtime =-$((86400*5001)) $BLOB_FILE &&
+ git config gc.pruneExpire 2.days.ago &&
git gc --no-prune &&
test 1 = $(git count-objects | sed "s/ .*//") &&
+ test -f $BLOB_FILE
+
+'
+
+test_expect_success 'gc respects gc.pruneExpire' '
+
+ git config gc.pruneExpire 5002.days.ago &&
+ git gc &&
test -f $BLOB_FILE &&
+ git config gc.pruneExpire 5000.days.ago &&
+ git gc &&
+ test ! -f $BLOB_FILE
+
+'
+
+test_expect_success 'gc --prune=<date>' '
+
+ BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
+ BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
+ test-chmtime =-$((86400*5001)) $BLOB_FILE &&
git gc --prune=5002.days.ago &&
- test 1 = $(git count-objects | sed "s/ .*//") &&
test -f $BLOB_FILE &&
git gc --prune=5000.days.ago &&
- test 0 = $(git count-objects | sed "s/ .*//") &&
test ! -f $BLOB_FILE
'
--
1.6.2.rc0.367.g7f9a5