From: Jonathan Tan <jonathantanmy@google.com>
To: git@vger.kernel.org
Cc: Jonathan Tan <jonathantanmy@google.com>,
gitster@pobox.com, git@jeffhostetler.com, peartben@gmail.com,
christian.couder@gmail.com
Subject: [PATCH 16/18] clone: configure blobmaxbytes in created repos
Date: Fri, 29 Sep 2017 13:11:52 -0700 [thread overview]
Message-ID: <407a298b52a9e0a2ee4135fe844e35b9a14c0f7b.1506714999.git.jonathantanmy@google.com> (raw)
In-Reply-To: <cover.1506714999.git.jonathantanmy@google.com>
In-Reply-To: <cover.1506714999.git.jonathantanmy@google.com>
Teach clone to configure blobmaxbytes in any repos that it generates
when the --blob-max-bytes parameter is set. Also teach fetch to use this
parameter.
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
---
builtin/clone.c | 1 +
builtin/fetch.c | 4 ++++
remote.c | 2 ++
remote.h | 2 ++
t/t5500-fetch-pack.sh | 64 ++++++++++++++++++++++++++++++++++++++++++++++-----
5 files changed, 67 insertions(+), 6 deletions(-)
diff --git a/builtin/clone.c b/builtin/clone.c
index 4c2193dc4..58cbc8ae3 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -1179,6 +1179,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
git_config_set("core.repositoryformatversion", "1");
git_config_set("extensions.partialclone", "origin");
repository_format_partial_clone = "origin";
+ git_config_set("remote.origin.blobmaxbytes", blob_max_bytes);
}
if (is_local)
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 07beaf5b5..ace238554 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -1050,6 +1050,10 @@ static struct transport *prepare_transport(struct remote *remote, int deepen)
if (blob_max_bytes) {
set_option(transport, TRANS_OPT_BLOB_MAX_BYTES, blob_max_bytes);
set_option(transport, TRANS_OPT_FROM_PROMISOR, "1");
+ } else if (remote->blob_max_bytes) {
+ set_option(transport, TRANS_OPT_BLOB_MAX_BYTES,
+ remote->blob_max_bytes);
+ set_option(transport, TRANS_OPT_FROM_PROMISOR, "1");
}
return transport;
}
diff --git a/remote.c b/remote.c
index 411309006..eade3c312 100644
--- a/remote.c
+++ b/remote.c
@@ -440,6 +440,8 @@ static int handle_config(const char *key, const char *value, void *cb)
key, value);
} else if (!strcmp(subkey, "vcs")) {
return git_config_string(&remote->foreign_vcs, key, value);
+ } else if (!strcmp(subkey, "blobmaxbytes")) {
+ return git_config_string(&remote->blob_max_bytes, key, value);
}
return 0;
}
diff --git a/remote.h b/remote.h
index 2ecf4c8c7..3d56e62b7 100644
--- a/remote.h
+++ b/remote.h
@@ -56,6 +56,8 @@ struct remote {
*/
char *http_proxy;
char *http_proxy_authmethod;
+
+ const char *blob_max_bytes;
};
struct remote *remote_get(const char *name);
diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh
index b2682862f..ee533ea32 100755
--- a/t/t5500-fetch-pack.sh
+++ b/t/t5500-fetch-pack.sh
@@ -782,9 +782,9 @@ test_expect_success '--blob-max-bytes has no effect if support for it is not adv
test_i18ngrep "blob-max-bytes not recognized by server" err
'
-fetch_blob_max_bytes () {
- SERVER="$1"
- URL="$2"
+setup_blob_max_bytes () {
+ SERVER="$1" &&
+ URL="$2" &&
rm -rf "$SERVER" client &&
test_create_repo "$SERVER" &&
@@ -794,7 +794,11 @@ fetch_blob_max_bytes () {
git clone "$URL" client &&
test_config -C client extensions.partialclone origin &&
- test_commit -C "$SERVER" two &&
+ test_commit -C "$SERVER" two
+}
+
+do_blob_max_bytes() {
+ SERVER="$1" &&
git -C client fetch --blob-max-bytes=0 origin HEAD:somewhere &&
@@ -805,14 +809,62 @@ fetch_blob_max_bytes () {
}
test_expect_success 'fetch with --blob-max-bytes' '
- fetch_blob_max_bytes server server
+ setup_blob_max_bytes server server &&
+ do_blob_max_bytes server
+'
+
+test_expect_success 'fetch respects configured blobmaxbytes' '
+ setup_blob_max_bytes server server &&
+
+ test_config -C client remote.origin.blobmaxbytes 0 &&
+
+ git -C client fetch origin HEAD:somewhere &&
+
+ # Ensure that commit is fetched, but blob is not
+ test_config -C client extensions.partialclone "arbitrary string" &&
+ git -C client cat-file -e $(git -C server rev-parse two) &&
+ test_must_fail git -C client cat-file -e $(git hash-object server/two.t)
+'
+
+test_expect_success 'pull respects configured blobmaxbytes' '
+ setup_blob_max_bytes server server &&
+
+ # Hide two.t from tip so that client does not load it upon the
+ # automatic checkout that pull performs
+ git -C server rm two.t &&
+ test_commit -C server three &&
+
+ test_config -C server uploadpack.allowanysha1inwant 1 &&
+ test_config -C client remote.origin.blobmaxbytes 0 &&
+
+ git -C client pull origin &&
+
+ # Ensure that commit is fetched, but blob is not
+ test_config -C client extensions.partialclone "arbitrary string" &&
+ git -C client cat-file -e $(git -C server rev-parse two) &&
+ test_must_fail git -C client cat-file -e $(git hash-object server/two.t)
+'
+
+test_expect_success 'clone configures blobmaxbytes' '
+ rm -rf server client &&
+ test_create_repo server &&
+ test_commit -C server one &&
+ test_commit -C server two &&
+ test_config -C server uploadpack.allowanysha1inwant 1 &&
+
+ git clone --blob-max-bytes=12345 server client &&
+
+ # Ensure that we can, for example, checkout HEAD^
+ rm -rf client/.git/objects/* &&
+ git -C client checkout HEAD^
'
. "$TEST_DIRECTORY"/lib-httpd.sh
start_httpd
test_expect_success 'fetch with --blob-max-bytes and HTTP' '
- fetch_blob_max_bytes "$HTTPD_DOCUMENT_ROOT_PATH/server" "$HTTPD_URL/smart/server"
+ setup_blob_max_bytes "$HTTPD_DOCUMENT_ROOT_PATH/server" "$HTTPD_URL/smart/server" &&
+ do_blob_max_bytes "$HTTPD_DOCUMENT_ROOT_PATH/server"
'
stop_httpd
--
2.14.2.822.g60be5d43e6-goog
next prev parent reply other threads:[~2017-09-29 20:12 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-29 20:11 [PATCH 00/18] Partial clone (from clone to lazy fetch in 18 patches) Jonathan Tan
2017-09-29 20:11 ` [PATCH 01/18] fsck: introduce partialclone extension Jonathan Tan
2017-09-29 20:11 ` [PATCH 02/18] fsck: support refs pointing to promisor objects Jonathan Tan
2017-09-29 20:11 ` [PATCH 03/18] fsck: support referenced " Jonathan Tan
2017-09-29 20:11 ` [PATCH 04/18] fsck: support promisor objects as CLI argument Jonathan Tan
2017-09-29 20:11 ` [PATCH 05/18] index-pack: refactor writing of .keep files Jonathan Tan
2017-09-29 20:11 ` [PATCH 06/18] introduce fetch-object: fetch one promisor object Jonathan Tan
2017-09-29 20:11 ` [PATCH 07/18] sha1_file: support lazily fetching missing objects Jonathan Tan
2017-10-12 14:42 ` Christian Couder
2017-10-12 15:45 ` Christian Couder
2017-09-29 20:11 ` [PATCH 08/18] rev-list: support termination at promisor objects Jonathan Tan
2017-09-29 20:11 ` [PATCH 09/18] gc: do not repack promisor packfiles Jonathan Tan
2017-09-29 20:11 ` [PATCH 10/18] pack-objects: rename want_.* to ignore_.* Jonathan Tan
2017-09-29 20:11 ` [PATCH 11/18] pack-objects: support --blob-max-bytes Jonathan Tan
2017-09-29 20:11 ` [PATCH 12/18] fetch-pack: support excluding large blobs Jonathan Tan
2017-09-29 20:11 ` [PATCH 13/18] fetch: refactor calculation of remote list Jonathan Tan
2017-09-29 20:11 ` [PATCH 14/18] fetch: support excluding large blobs Jonathan Tan
2017-09-29 20:11 ` [PATCH 15/18] clone: " Jonathan Tan
2017-09-29 20:11 ` Jonathan Tan [this message]
2017-09-29 20:11 ` [PATCH 17/18] unpack-trees: batch fetching of missing blobs Jonathan Tan
2017-09-29 20:11 ` [PATCH 18/18] fetch-pack: restore save_commit_buffer after use Jonathan Tan
2017-09-29 21:08 ` [PATCH 00/18] Partial clone (from clone to lazy fetch in 18 patches) Johannes Schindelin
2017-10-02 4:23 ` Junio C Hamano
2017-10-03 6:15 ` Christian Couder
2017-10-03 8:50 ` Junio C Hamano
2017-10-03 14:39 ` Jeff Hostetler
2017-10-03 23:42 ` Jonathan Tan
2017-10-04 13:30 ` Jeff Hostetler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=407a298b52a9e0a2ee4135fe844e35b9a14c0f7b.1506714999.git.jonathantanmy@google.com \
--to=jonathantanmy@google.com \
--cc=christian.couder@gmail.com \
--cc=git@jeffhostetler.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peartben@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).