summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/config.txt10
-rw-r--r--fetch-pack.c31
-rwxr-xr-xt/t5500-fetch-pack.sh3
3 files changed, 29 insertions, 15 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt
index d8244b1510..383ff29f82 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -295,6 +295,16 @@ diff.renames::
will enable basic rename detection. If set to "copies" or
"copy", it will detect copies, as well.
+fetch.unpackLimit::
+ If the number of objects fetched over the git native
+ transfer is below this
+ limit, then the objects will be unpacked into loose object
+ files. However if the number of received objects equals or
+ exceeds this limit then the received pack will be stored as
+ a pack, after adding any missing delta bases. Storing the
+ pack from a push can make the push operation complete faster,
+ especially on slow filesystems.
+
format.headers::
Additional email headers to include in a patch to be submitted
by mail. See gitlink:git-format-patch[1].
diff --git a/fetch-pack.c b/fetch-pack.c
index dd67e48fc7..fc0534ce03 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -8,7 +8,7 @@
#include "sideband.h"
static int keep_pack;
-static int keep_auto;
+static int unpack_limit = 100;
static int quiet;
static int verbose;
static int fetch_all;
@@ -503,14 +503,14 @@ static int get_pack(int xd[2])
av = argv;
*hdr_arg = 0;
- if (keep_auto) {
+ if (unpack_limit) {
struct pack_header header;
if (read_pack_header(fd[0], &header))
die("protocol error: bad pack header");
snprintf(hdr_arg, sizeof(hdr_arg), "--pack_header=%u,%u",
ntohl(header.hdr_version), ntohl(header.hdr_entries));
- if (ntohl(header.hdr_entries) < keep_auto)
+ if (ntohl(header.hdr_entries) < unpack_limit)
do_keep = 0;
else
do_keep = 1;
@@ -523,7 +523,7 @@ static int get_pack(int xd[2])
*av++ = "-v";
if (use_thin_pack)
*av++ = "--fix-thin";
- if (keep_pack > 1 || keep_auto) {
+ if (keep_pack > 1 || unpack_limit) {
int s = sprintf(keep_arg,
"--keep=fetch-pack %d on ", getpid());
if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
@@ -642,6 +642,16 @@ static int remove_duplicates(int nr_heads, char **heads)
return dst;
}
+static int fetch_pack_config(const char *var, const char *value)
+{
+ if (strcmp(var, "fetch.unpacklimit") == 0) {
+ unpack_limit = git_config_int(var, value);
+ return 0;
+ }
+
+ return git_default_config(var, value);
+}
+
static struct lock_file lock;
int main(int argc, char **argv)
@@ -653,6 +663,8 @@ int main(int argc, char **argv)
struct stat st;
setup_git_directory();
+ setup_ident();
+ git_config(fetch_pack_config);
nr_heads = 0;
heads = NULL;
@@ -674,16 +686,7 @@ int main(int argc, char **argv)
}
if (!strcmp("--keep", arg) || !strcmp("-k", arg)) {
keep_pack++;
- continue;
- }
- if (!strcmp("--keep-auto", arg)) {
- keep_auto = 100;
- continue;
- }
- if (!strncmp("--keep-auto=", arg, 12)) {
- keep_auto = strtoul(arg + 12, NULL, 0);
- if (keep_auto < 20)
- keep_auto = 20;
+ unpack_limit = 0;
continue;
}
if (!strcmp("--thin", arg)) {
diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh
index ef78df67ea..7fd651b1c4 100755
--- a/t/t5500-fetch-pack.sh
+++ b/t/t5500-fetch-pack.sh
@@ -97,7 +97,8 @@ pull_to_client () {
(
mkdir client &&
cd client &&
- git-init 2>> log2.txt
+ git-init 2>> log2.txt &&
+ git repo-config fetch.unpacklimit 0
)
add A1