On Sat, Feb 8, 2014 at 8:08 AM, Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> wrote: > `gc --auto` takes time and can block the user temporarily (but not any > less annoyingly). Make it run in background on systems that support > it. The only thing lost with running in background is printouts. But > gc output is not really interesting. You can keep it in foreground by > changing gc.autodetach. > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > Documentation/config.txt | 4 ++++ > builtin/gc.c | 23 ++++++++++++++++++----- > t/t5400-send-pack.sh | 1 + > 3 files changed, 23 insertions(+), 5 deletions(-) > > diff --git a/Documentation/config.txt b/Documentation/config.txt > index 5f4d793..4781773 100644 > --- a/Documentation/config.txt > +++ b/Documentation/config.txt > @@ -1167,6 +1167,10 @@ gc.autopacklimit:: > --auto` consolidates them into one larger pack. The > default value is 50. Setting this to 0 disables it. > > +gc.autodetach:: > + Make `git gc --auto` return immediately andrun in background > + if the system supports it. Default is true. > + > gc.packrefs:: > Running `git pack-refs` in a repository renders it > unclonable by Git versions prior to 1.5.1.2 over dumb > diff --git a/builtin/gc.c b/builtin/gc.c > index c19545d..ed5cc3c 100644 > --- a/builtin/gc.c > +++ b/builtin/gc.c > @@ -29,6 +29,7 @@ static int pack_refs = 1; > static int aggressive_window = 250; > static int gc_auto_threshold = 6700; > static int gc_auto_pack_limit = 50; > +static int detach_auto = 1; > static const char *prune_expire = "2.weeks.ago"; > > static struct argv_array pack_refs_cmd = ARGV_ARRAY_INIT; > @@ -73,6 +74,10 @@ static int gc_config(const char *var, const char *value, void *cb) > gc_auto_pack_limit = git_config_int(var, value); > return 0; > } > + if (!strcmp(var, "gc.autodetach")) { > + detach_auto = git_config_bool(var, value); > + return 0; > + } > if (!strcmp(var, "gc.pruneexpire")) { > if (value && strcmp(value, "now")) { > unsigned long now = approxidate("now"); > @@ -301,11 +306,19 @@ int cmd_gc(int argc, const char **argv, const char *prefix) > */ > if (!need_to_gc()) > return 0; > - if (!quiet) > - fprintf(stderr, > - _("Auto packing the repository for optimum performance. You may also\n" > - "run \"git gc\" manually. See " > - "\"git help gc\" for more information.\n")); > + if (!quiet) { > + if (detach_auto) > + fprintf(stderr, _("Auto packing the repository in background for optimum performance.\n")); > + else > + fprintf(stderr, _("Auto packing the repository for optimum performance.\n")); > + fprintf(stderr, _("See \"git help gc\" for manual housekeeping.\n")); > + } > + if (detach_auto) > + /* > + * failure to daemonize is ok, we'll continue > + * in foreground > + */ > + daemonize(); While I agree that it should be OK, shouldn't we warn the user? -- 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