Merge branch 'tt/gc'
* tt/gc: Add --aggressive option to 'git gc'
This commit is contained in:
@ -384,6 +384,11 @@ format.suffix::
|
|||||||
`.patch`. Use this variable to change that suffix (make sure to
|
`.patch`. Use this variable to change that suffix (make sure to
|
||||||
include the dot if you want it).
|
include the dot if you want it).
|
||||||
|
|
||||||
|
gc.aggressiveWindow::
|
||||||
|
The window size parameter used in the delta compression
|
||||||
|
algorithm used by 'git gc --aggressive'. This defaults
|
||||||
|
to 10.
|
||||||
|
|
||||||
gc.packrefs::
|
gc.packrefs::
|
||||||
`git gc` does not run `git pack-refs` in a bare repository by
|
`git gc` does not run `git pack-refs` in a bare repository by
|
||||||
default so that older dumb-transport clients can still fetch
|
default so that older dumb-transport clients can still fetch
|
||||||
|
@ -8,7 +8,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
'git-gc' [--prune]
|
'git-gc' [--prune] [--aggressive]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
@ -35,6 +35,13 @@ OPTIONS
|
|||||||
repository at the same time (e.g. never use this option
|
repository at the same time (e.g. never use this option
|
||||||
in a cron script).
|
in a cron script).
|
||||||
|
|
||||||
|
--aggressive::
|
||||||
|
Usually 'git-gc' runs very quickly while providing good disk
|
||||||
|
space utilization and performance. This option will cause
|
||||||
|
git-gc to more aggressive optimize the repository at the expense
|
||||||
|
of taking much more time. The effects of this optimization are
|
||||||
|
persistent, so this option only needs to be sporadically; every
|
||||||
|
few hundred changesets or so.
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
@ -67,6 +74,13 @@ The optional configuration variable 'gc.packrefs' determines if
|
|||||||
is not run in bare repositories by default, to allow older dumb-transport
|
is not run in bare repositories by default, to allow older dumb-transport
|
||||||
clients fetch from the repository, but this will change in the future.
|
clients fetch from the repository, but this will change in the future.
|
||||||
|
|
||||||
|
The optional configuration variable 'gc.aggressiveWindow' controls how
|
||||||
|
much time is spent optimizing the delta compression of the objects in
|
||||||
|
the repository when the --aggressive option is specified. The larger
|
||||||
|
the value, the more time is spent optimizing the delta compression. See
|
||||||
|
the documentation for the --window' option in gitlink:git-repack[1] for
|
||||||
|
more details. This defaults to 10.
|
||||||
|
|
||||||
See Also
|
See Also
|
||||||
--------
|
--------
|
||||||
gitlink:git-prune[1]
|
gitlink:git-prune[1]
|
||||||
|
32
builtin-gc.c
32
builtin-gc.c
@ -15,13 +15,15 @@
|
|||||||
|
|
||||||
#define FAILED_RUN "failed to run %s"
|
#define FAILED_RUN "failed to run %s"
|
||||||
|
|
||||||
static const char builtin_gc_usage[] = "git-gc [--prune]";
|
static const char builtin_gc_usage[] = "git-gc [--prune] [--aggressive]";
|
||||||
|
|
||||||
static int pack_refs = -1;
|
static int pack_refs = -1;
|
||||||
|
static int aggressive_window = -1;
|
||||||
|
|
||||||
|
#define MAX_ADD 10
|
||||||
static const char *argv_pack_refs[] = {"pack-refs", "--prune", NULL};
|
static const char *argv_pack_refs[] = {"pack-refs", "--prune", NULL};
|
||||||
static const char *argv_reflog[] = {"reflog", "expire", "--all", NULL};
|
static const char *argv_reflog[] = {"reflog", "expire", "--all", NULL};
|
||||||
static const char *argv_repack[] = {"repack", "-a", "-d", "-l", NULL};
|
static const char *argv_repack[MAX_ADD] = {"repack", "-a", "-d", "-l", NULL};
|
||||||
static const char *argv_prune[] = {"prune", NULL};
|
static const char *argv_prune[] = {"prune", NULL};
|
||||||
static const char *argv_rerere[] = {"rerere", "gc", NULL};
|
static const char *argv_rerere[] = {"rerere", "gc", NULL};
|
||||||
|
|
||||||
@ -34,13 +36,31 @@ static int gc_config(const char *var, const char *value)
|
|||||||
pack_refs = git_config_bool(var, value);
|
pack_refs = git_config_bool(var, value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(var, "gc.aggressivewindow")) {
|
||||||
|
aggressive_window = git_config_int(var, value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return git_default_config(var, value);
|
return git_default_config(var, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void append_option(const char **cmd, const char *opt, int max_length)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; cmd[i]; i++)
|
||||||
|
;
|
||||||
|
|
||||||
|
if (i + 2 >= max_length)
|
||||||
|
die("Too many options specified");
|
||||||
|
cmd[i++] = opt;
|
||||||
|
cmd[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int cmd_gc(int argc, const char **argv, const char *prefix)
|
int cmd_gc(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int prune = 0;
|
int prune = 0;
|
||||||
|
char buf[80];
|
||||||
|
|
||||||
git_config(gc_config);
|
git_config(gc_config);
|
||||||
|
|
||||||
@ -53,6 +73,14 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
|
|||||||
prune = 1;
|
prune = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(arg, "--aggressive")) {
|
||||||
|
append_option(argv_repack, "-f", MAX_ADD);
|
||||||
|
if (aggressive_window > 0) {
|
||||||
|
sprintf(buf, "--window=%d", aggressive_window);
|
||||||
|
append_option(argv_repack, buf, MAX_ADD);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
/* perhaps other parameters later... */
|
/* perhaps other parameters later... */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user