aboutsummaryrefslogtreecommitdiff
path: root/fetch-pack.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-01-24 16:47:24 -0800
committerJunio C Hamano <junkio@cox.net>2007-01-24 18:08:02 -0800
commitaf7cf268f0bf8d4216f9c11d1cb0082cb3550f61 (patch)
treefb4cc3c94a6c793122e02c3797b04f6716549e62 /fetch-pack.c
parent9e10fd1ac0bb50202138efb9291568160dacd7ab (diff)
downloadgit-af7cf268f0bf8d4216f9c11d1cb0082cb3550f61.tar.gz
git-af7cf268f0bf8d4216f9c11d1cb0082cb3550f61.tar.xz
fetch-pack: remove --keep-auto and make it the default.
This makes git-fetch over git native protocol to automatically decide to keep the downloaded pack if the fetch results in more than 100 objects, just like receive-pack invoked by git-push does. This logic is disabled when --keep is explicitly given from the command line, so that a very small clone still keeps the downloaded pack as before. The 100 threshold can be adjusted with fetch.unpacklimit configuration. We might want to introduce transfer.unpacklimit to consolidate the two unpacklimit variables, which will be a topic for the next patch. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'fetch-pack.c')
-rw-r--r--fetch-pack.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/fetch-pack.c b/fetch-pack.c
index dd67e48fc..fc0534ce0 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)) {