[PATCH 4/5] Ensure builtin-fetch honors {fetch,transfer}.unpackLimit

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The only way to configure the unpacking limit is currently through
the .git/config (or ~/.gitconfig) mechanism as we have no existing
command line option interface to control this threshold on a per
invocation basis.  This was intentional by design as the storage
policy of the repository should be a repository-wide decision and
should not be subject to variations made on individual command
executions.

Earlier builtin-fetch was bypassing the unpacking limit chosen by
the user through the configuration file as it did not reread the
configuration options through fetch_pack_config if we called the
internal fetch_pack() API directly.  We now ensure we always run the
config file through fetch_pack_config at least once in this process,
thereby setting our unpackLimit properly.

Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx>
---
 builtin-fetch-pack.c |   19 +++++++++++++------
 transport.c          |    9 ---------
 transport.h          |    3 ---
 3 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/builtin-fetch-pack.c b/builtin-fetch-pack.c
index 77eb181..d128915 100644
--- a/builtin-fetch-pack.c
+++ b/builtin-fetch-pack.c
@@ -670,18 +670,24 @@ static int fetch_pack_config(const char *var, const char *value)
 
 static struct lock_file lock;
 
-int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
+static void fetch_pack_setup()
 {
-	int i, ret, nr_heads;
-	struct ref *ref;
-	char *dest = NULL, **heads;
-
+	static int did_setup;
+	if (did_setup)
+		return;
 	git_config(fetch_pack_config);
-
 	if (0 <= transfer_unpack_limit)
 		unpack_limit = transfer_unpack_limit;
 	else if (0 <= fetch_unpack_limit)
 		unpack_limit = fetch_unpack_limit;
+	did_setup = 1;
+}
+
+int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
+{
+	int i, ret, nr_heads;
+	struct ref *ref;
+	char *dest = NULL, **heads;
 
 	nr_heads = 0;
 	heads = NULL;
@@ -760,6 +766,7 @@ struct ref *fetch_pack(struct fetch_pack_args *my_args,
 	struct ref *ref;
 	struct stat st;
 
+	fetch_pack_setup();
 	memcpy(&args, my_args, sizeof(args));
 	if (args.depth > 0) {
 		if (stat(git_path("shallow"), &st))
diff --git a/transport.c b/transport.c
index 85f5b1e..a1d0a3c 100644
--- a/transport.c
+++ b/transport.c
@@ -242,11 +242,7 @@ static int close_bundle(struct transport *transport)
 struct git_transport_data {
 	unsigned thin : 1;
 	unsigned keep : 1;
-
-	int unpacklimit;
-
 	int depth;
-
 	const char *uploadpack;
 	const char *receivepack;
 };
@@ -267,9 +263,6 @@ static int set_git_option(struct transport *connection,
 	} else if (!strcmp(name, TRANS_OPT_KEEP)) {
 		data->keep = !!value;
 		return 0;
-	} else if (!strcmp(name, TRANS_OPT_UNPACKLIMIT)) {
-		data->unpacklimit = atoi(value);
-		return 0;
 	} else if (!strcmp(name, TRANS_OPT_DEPTH)) {
 		if (!value)
 			data->depth = 0;
@@ -318,7 +311,6 @@ static int fetch_refs_via_pack(struct transport *transport,
 	args.uploadpack = data->uploadpack;
 	args.keep_pack = data->keep;
 	args.lock_pack = 1;
-	args.unpacklimit = data->unpacklimit;
 	args.use_thin_pack = data->thin;
 	args.verbose = transport->verbose;
 	args.depth = data->depth;
@@ -435,7 +427,6 @@ struct transport *transport_get(struct remote *remote, const char *url)
 		data->receivepack = "git-receive-pack";
 		if (remote && remote->receivepack)
 			data->receivepack = remote->receivepack;
-		data->unpacklimit = -1;
 	}
 
 	return ret;
diff --git a/transport.h b/transport.h
index 3e332ff..6e318e4 100644
--- a/transport.h
+++ b/transport.h
@@ -47,9 +47,6 @@ struct transport *transport_get(struct remote *, const char *);
 /* Keep the pack that was transferred if not null */
 #define TRANS_OPT_KEEP "keep"
 
-/* Unpack the objects if fewer than this number of objects are fetched */
-#define TRANS_OPT_UNPACKLIMIT "unpacklimit"
-
 /* Limit the depth of the fetch if not null */
 #define TRANS_OPT_DEPTH "depth"
 
-- 
1.5.3.1.195.gadd6

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux