diff options
-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 70d8213472..31ea247e3f 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 32d83e2694..ea78f1ff31 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 && |