On Sat, May 10, 2008 at 11:16 PM, Brandon Casey <drafnel@xxxxxxxxx> wrote: > I've got a thought. How about limiting how often auto repack repacks > by looking at the timestamp of the most recent pack? Wouldn't the > packs already be prepared in most cases i.e. prepare_packed_git() completely untested and hopefully not mangled by google... actually, this will do nothing for the case where there exists many loose unreachable objects and no loose reachable objects since we won't create a new pack with an updated timestamp to compare against. So git-gc will continue to spin its wheels without getting anywhere. Could we update the pack timestamp after running git-gc or use a timestamp from someplace else? -brandon diff --git a/builtin-gc.c b/builtin-gc.c index 48f7d95..16b1455 100644 --- a/builtin-gc.c +++ b/builtin-gc.c @@ -27,6 +27,7 @@ static int aggressive_window = -1; static int gc_auto_threshold = 6700; static int gc_auto_pack_limit = 50; static char *prune_expire = "2.weeks.ago"; +static time_t gc_auto_pack_frequency = 21600; /* 6 hours */ #define MAX_ADD 10 static const char *argv_pack_refs[] = {"pack-refs", "--all", "--prune", NULL}; @@ -56,6 +57,10 @@ static int gc_config(const char *var, const char *value) gc_auto_pack_limit = git_config_int(var, value); return 0; } + if (!strcmp(var, "gc.autopackfrequency")) { + gc_auto_pack_frequency = git_config_ulong(var, value); + return 0; + } if (!strcmp(var, "gc.pruneexpire")) { if (!value) return config_error_nonbool(var); @@ -205,6 +210,14 @@ static int need_to_gc(void) else if (!too_many_loose_objects()) return 0; + if (gc_auto_pack_frequency) { + prepare_packed_git(); + if (packed_git && + packed_git->mtime > + approxidate("now") - gc_auto_pack_frequency) + return 0; + } + if (run_hook()) return 0; return 1; -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html