mirror of
https://github.com/git/git.git
synced 2024-11-18 00:43:56 +01:00
gc: config option for running --auto in background
`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@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
de0957ce2e
commit
9f673f9477
@ -1167,6 +1167,10 @@ gc.autopacklimit::
|
|||||||
--auto` consolidates them into one larger pack. The
|
--auto` consolidates them into one larger pack. The
|
||||||
default value is 50. Setting this to 0 disables it.
|
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::
|
gc.packrefs::
|
||||||
Running `git pack-refs` in a repository renders it
|
Running `git pack-refs` in a repository renders it
|
||||||
unclonable by Git versions prior to 1.5.1.2 over dumb
|
unclonable by Git versions prior to 1.5.1.2 over dumb
|
||||||
|
23
builtin/gc.c
23
builtin/gc.c
@ -29,6 +29,7 @@ static int pack_refs = 1;
|
|||||||
static int aggressive_window = 250;
|
static int aggressive_window = 250;
|
||||||
static int gc_auto_threshold = 6700;
|
static int gc_auto_threshold = 6700;
|
||||||
static int gc_auto_pack_limit = 50;
|
static int gc_auto_pack_limit = 50;
|
||||||
|
static int detach_auto = 1;
|
||||||
static const char *prune_expire = "2.weeks.ago";
|
static const char *prune_expire = "2.weeks.ago";
|
||||||
|
|
||||||
static struct argv_array pack_refs_cmd = ARGV_ARRAY_INIT;
|
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);
|
gc_auto_pack_limit = git_config_int(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(var, "gc.autodetach")) {
|
||||||
|
detach_auto = git_config_bool(var, value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (!strcmp(var, "gc.pruneexpire")) {
|
if (!strcmp(var, "gc.pruneexpire")) {
|
||||||
if (value && strcmp(value, "now")) {
|
if (value && strcmp(value, "now")) {
|
||||||
unsigned long now = approxidate("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())
|
if (!need_to_gc())
|
||||||
return 0;
|
return 0;
|
||||||
if (!quiet)
|
if (!quiet) {
|
||||||
fprintf(stderr,
|
if (detach_auto)
|
||||||
_("Auto packing the repository for optimum performance. You may also\n"
|
fprintf(stderr, _("Auto packing the repository in background for optimum performance.\n"));
|
||||||
"run \"git gc\" manually. See "
|
else
|
||||||
"\"git help gc\" for more information.\n"));
|
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();
|
||||||
} else
|
} else
|
||||||
add_repack_all_option();
|
add_repack_all_option();
|
||||||
|
|
||||||
|
@ -164,6 +164,7 @@ test_expect_success 'receive-pack runs auto-gc in remote repo' '
|
|||||||
# Set the child to auto-pack if more than one pack exists
|
# Set the child to auto-pack if more than one pack exists
|
||||||
cd child &&
|
cd child &&
|
||||||
git config gc.autopacklimit 1 &&
|
git config gc.autopacklimit 1 &&
|
||||||
|
git config gc.autodetach false &&
|
||||||
git branch test_auto_gc &&
|
git branch test_auto_gc &&
|
||||||
# And create a file that follows the temporary object naming
|
# And create a file that follows the temporary object naming
|
||||||
# convention for the auto-gc to remove
|
# convention for the auto-gc to remove
|
||||||
|
Loading…
Reference in New Issue
Block a user