aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-04-03 12:38:46 -0700
committerJunio C Hamano <gitster@pobox.com>2014-04-03 12:38:47 -0700
commit8815d8aa7ccab3798fa5513821ab110c209b0ae7 (patch)
tree2f60257a462e3a3548a8363dd431b1b40ba8e856
parent7b6bc4d8350029fed82824a33ea9039f22788eec (diff)
parent8640d496823b0aa1d35523b98d8b3f21b54004cd (diff)
downloadgit-8815d8aa7ccab3798fa5513821ab110c209b0ae7.tar.gz
Merge branch 'nd/gc-aggressive'
Allow tweaking the maximum length of the delta-chain produced by "gc --aggressive". * nd/gc-aggressive: environment.c: fix constness for odb_pack_keep() gc --aggressive: make --depth configurable
-rw-r--r--Documentation/config.txt5
-rw-r--r--Documentation/git-gc.txt3
-rw-r--r--builtin/gc.c8
-rw-r--r--environment.c2
-rw-r--r--git-compat-util.h2
5 files changed, 17 insertions, 3 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt
index c415aadbbc..84c7e3f11a 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1156,6 +1156,11 @@ filter.<driver>.smudge::
object to a worktree file upon checkout. See
linkgit:gitattributes[5] for details.
+gc.aggressiveDepth::
+ The depth parameter used in the delta compression
+ algorithm used by 'git gc --aggressive'. This defaults
+ to 250.
+
gc.aggressiveWindow::
The window size parameter used in the delta compression
algorithm used by 'git gc --aggressive'. This defaults
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt
index e158a3b31f..273c4663c8 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.txt
@@ -124,6 +124,9 @@ the value, the more time is spent optimizing the delta compression. See
the documentation for the --window' option in linkgit:git-repack[1] for
more details. This defaults to 250.
+Similarly, the optional configuration variable 'gc.aggressiveDepth'
+controls --depth option in linkgit:git-repack[1]. This defaults to 250.
+
The optional configuration variable 'gc.pruneExpire' controls how old
the unreferenced loose objects have to be before they are pruned. The
default is "2 weeks ago".
diff --git a/builtin/gc.c b/builtin/gc.c
index 11cf295515..85f5c2bc62 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -26,6 +26,7 @@ static const char * const builtin_gc_usage[] = {
};
static int pack_refs = 1;
+static int aggressive_depth = 250;
static int aggressive_window = 250;
static int gc_auto_threshold = 6700;
static int gc_auto_pack_limit = 50;
@@ -66,6 +67,10 @@ static int gc_config(const char *var, const char *value, void *cb)
aggressive_window = git_config_int(var, value);
return 0;
}
+ if (!strcmp(var, "gc.aggressivedepth")) {
+ aggressive_depth = git_config_int(var, value);
+ return 0;
+ }
if (!strcmp(var, "gc.auto")) {
gc_auto_threshold = git_config_int(var, value);
return 0;
@@ -294,7 +299,8 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
if (aggressive) {
argv_array_push(&repack, "-f");
- argv_array_push(&repack, "--depth=250");
+ if (aggressive_depth > 0)
+ argv_array_pushf(&repack, "--depth=%d", aggressive_depth);
if (aggressive_window > 0)
argv_array_pushf(&repack, "--window=%d", aggressive_window);
}
diff --git a/environment.c b/environment.c
index c3c860603d..5c4815dbe1 100644
--- a/environment.c
+++ b/environment.c
@@ -237,7 +237,7 @@ int odb_mkstemp(char *template, size_t limit, const char *pattern)
return xmkstemp_mode(template, mode);
}
-int odb_pack_keep(char *name, size_t namesz, unsigned char *sha1)
+int odb_pack_keep(char *name, size_t namesz, const unsigned char *sha1)
{
int fd;
diff --git a/git-compat-util.h b/git-compat-util.h
index 892032bc79..9158ed634a 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -536,7 +536,7 @@ extern FILE *xfdopen(int fd, const char *mode);
extern int xmkstemp(char *template);
extern int xmkstemp_mode(char *template, int mode);
extern int odb_mkstemp(char *template, size_t limit, const char *pattern);
-extern int odb_pack_keep(char *name, size_t namesz, unsigned char *sha1);
+extern int odb_pack_keep(char *name, size_t namesz, const unsigned char *sha1);
static inline size_t xsize_t(off_t len)
{