Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- Documentation/technical/pack-protocol.txt | 3 +++ builtin/fetch-pack.c | 3 +-- remote-curl.c | 4 +++- t/t5536-fetch-shallow.sh | 27 +++++++++++++++++++++++++++ upload-pack.c | 2 -- 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/Documentation/technical/pack-protocol.txt b/Documentation/technical/pack-protocol.txt index a1672bc..5013652 100644 --- a/Documentation/technical/pack-protocol.txt +++ b/Documentation/technical/pack-protocol.txt @@ -574,6 +574,7 @@ respectively. The output is in pkt-line format. advertised-refs = service flush-pkt (no-refs / list-of-refs) + *shallow flush-pkt service = PKT-LINE("# service=" service-name) @@ -590,6 +591,8 @@ respectively. The output is in pkt-line format. other-tip = obj-id SP refname LF other-peeled = obj-id SP refname "^{}" LF + shallow = PKT-LINE("shallow" SP obj-id) + capability-list = capability *(SP capability) capability = 1*(LC_ALPHA / DIGIT / "-" / "_") LC_ALPHA = %x61-7A diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index f6a6d76..b89d753 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -146,8 +146,7 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) } memset(&shallow, 0, sizeof(shallow)); - get_remote_heads(fd[0], NULL, 0, &ref, 0, NULL, - args.stateless_rpc ? NULL : &shallow); + get_remote_heads(fd[0], NULL, 0, &ref, 0, NULL, &shallow); ref = fetch_pack(&args, fd, conn, ref, dest, sought, nr_sought, &shallow, pack_lockfile_ptr); diff --git a/remote-curl.c b/remote-curl.c index c329bd3..de2cc8a 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -78,6 +78,7 @@ struct discovery { char *buf; size_t len; struct ref *refs; + struct extra_have_objects shallow; unsigned proto_git : 1; }; static struct discovery *last_discovery; @@ -86,7 +87,7 @@ static struct ref *parse_git_refs(struct discovery *heads, int for_push) { struct ref *list = NULL; get_remote_heads(-1, heads->buf, heads->len, &list, - for_push ? REF_NORMAL : 0, NULL, NULL); + for_push ? REF_NORMAL : 0, NULL, &heads->shallow); return list; } @@ -146,6 +147,7 @@ static void free_discovery(struct discovery *d) if (d) { if (d == last_discovery) last_discovery = NULL; + free(d->shallow.array); free(d->buf_alloc); free_refs(d->refs); free(d); diff --git a/t/t5536-fetch-shallow.sh b/t/t5536-fetch-shallow.sh index 15a8208..6ea6347 100755 --- a/t/t5536-fetch-shallow.sh +++ b/t/t5536-fetch-shallow.sh @@ -102,4 +102,31 @@ EOF ' +if test -n "$NO_CURL" -o -z "$GIT_TEST_HTTPD"; then + say 'skipping remaining tests, git built without http support' + test_done +fi + +LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5536'} +. "$TEST_DIRECTORY"/lib-httpd.sh +start_httpd + +test_expect_success 'clone http repository' ' + git clone --bare --no-local shallow "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + git clone --quiet $HTTPD_URL/smart/repo.git clone && + ( + cd clone && + git fsck && + git log --format=%s origin/master >actual && + cat <<EOF >expect && +6 +5 +4 +3 +EOF + test_cmp expect actual + ) +' + +stop_httpd test_done diff --git a/upload-pack.c b/upload-pack.c index c3e68ae..263ae08 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -770,8 +770,6 @@ int main(int argc, char **argv) if (!enter_repo(dir, strict)) die("'%s' does not appear to be a git repository", dir); - if (is_repository_shallow() && stateless_rpc) - die("attempt to push into a shallow repository"); git_config(upload_pack_config, NULL); upload_pack(); -- 1.8.2.83.gc99314b -- 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