diff options
author | Junio C Hamano <gitster@pobox.com> | 2016-07-11 20:44:12 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-07-11 20:44:12 +0300 |
commit | 1a88ca99db81b0a5d0f43b57df4a265055d81436 (patch) | |
tree | 17c974f6af5538a62965a50031f0afa44f9a6db4 | |
parent | 4212e483a927138019206a5e682349d6867b7d89 (diff) | |
parent | 18a74a092bff41f1ffe10bd2463d3eed9a04435d (diff) |
Merge branch 'sb/clone-shallow-passthru' into maint
Fix an unintended regression in v2.9 that breaks "clone --depth"
that recurses down to submodules by forcing the submodules to also
be cloned shallowly, which many server instances that host upstream
of the submodules are not prepared for.
* sb/clone-shallow-passthru:
clone: do not let --depth imply --shallow-submodules
-rw-r--r-- | Documentation/git-clone.txt | 5 | ||||
-rw-r--r-- | builtin/clone.c | 5 | ||||
-rwxr-xr-x | t/t5614-clone-submodules.sh | 19 |
3 files changed, 21 insertions, 8 deletions
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt index 1b15cd7b16..ec41d3d698 100644 --- a/Documentation/git-clone.txt +++ b/Documentation/git-clone.txt @@ -191,9 +191,8 @@ objects from the source repository into a pack in the cloned repository. Create a 'shallow' clone with a history truncated to the specified number of commits. Implies `--single-branch` unless `--no-single-branch` is given to fetch the histories near the - tips of all branches. This implies `--shallow-submodules`. If - you want to have a shallow superproject clone, but full submodules, - also pass `--no-shallow-submodules`. + tips of all branches. If you want to clone submodules shallowly, + also pass `--shallow-submodules`. --[no-]single-branch:: Clone only the history leading to the tip of a single branch, diff --git a/builtin/clone.c b/builtin/clone.c index 5f867e67d8..8f7db98af6 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -40,7 +40,7 @@ static const char * const builtin_clone_usage[] = { static int option_no_checkout, option_bare, option_mirror, option_single_branch = -1; static int option_local = -1, option_no_hardlinks, option_shared, option_recursive; -static int option_shallow_submodules = -1; +static int option_shallow_submodules; static char *option_template, *option_depth; static char *option_origin = NULL; static char *option_branch = NULL; @@ -738,8 +738,7 @@ static int checkout(void) struct argv_array args = ARGV_ARRAY_INIT; argv_array_pushl(&args, "submodule", "update", "--init", "--recursive", NULL); - if (option_shallow_submodules == 1 - || (option_shallow_submodules == -1 && option_depth)) + if (option_shallow_submodules == 1) argv_array_push(&args, "--depth=1"); if (max_jobs != -1) diff --git a/t/t5614-clone-submodules.sh b/t/t5614-clone-submodules.sh index 62044c5a02..a9aaa018ed 100755 --- a/t/t5614-clone-submodules.sh +++ b/t/t5614-clone-submodules.sh @@ -37,9 +37,9 @@ test_expect_success 'nonshallow clone implies nonshallow submodule' ' ) ' -test_expect_success 'shallow clone implies shallow submodule' ' +test_expect_success 'shallow clone with shallow submodule' ' test_when_finished "rm -rf super_clone" && - git clone --recurse-submodules --depth 2 "file://$pwd/." super_clone && + git clone --recurse-submodules --depth 2 --shallow-submodules "file://$pwd/." super_clone && ( cd super_clone && git log --oneline >lines && @@ -52,6 +52,21 @@ test_expect_success 'shallow clone implies shallow submodule' ' ) ' +test_expect_success 'shallow clone does not imply shallow submodule' ' + test_when_finished "rm -rf super_clone" && + git clone --recurse-submodules --depth 2 "file://$pwd/." super_clone && + ( + cd super_clone && + git log --oneline >lines && + test_line_count = 2 lines + ) && + ( + cd super_clone/sub && + git log --oneline >lines && + test_line_count = 3 lines + ) +' + test_expect_success 'shallow clone with non shallow submodule' ' test_when_finished "rm -rf super_clone" && git clone --recurse-submodules --depth 2 --no-shallow-submodules "file://$pwd/." super_clone && |