On Sat, Feb 8, 2014 at 8:08 AM, Nguyễn Thái Ngọc Duy <pclo...@gmail.com> 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 <pclo...@gmail.com>
> ---
>  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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to