Hi Markus, On Tue, 4 Feb 2020, Markus Klein via GitGitGadget wrote: > From: Markus Klein <masmiseim@xxxxxx> > > Simplify cloning repositories with submodules when the option > submodules.recurse is set by the user. This makes it transparent to the > user if submodules are used. The user doesn’t have to know if he has to add > an extra parameter to get the full project including the used submodules. > This makes clone behave identical to other commands like fetch, pull, > checkout, ... which include the submodules automatically if this option is > set. > > It is implemented analog to the pull command by using an own config > function instead of using just the default config. In contrast to the pull > command, the submodule.recurse state is saved as an array of strings as it > can take an optionally pathspec argument which describes which submodules > should be recursively initialized and cloned. To recursively initialize and > clone all submodules a pathspec of "." has to be used. > The regression test is simplified compared to the test for "git clone > --recursive" as the general functionality is already checked there. > > Changes since v1: > * Fixed the commit author to match the Signed-off-by line This changelog should go... > > Signed-off-by: Markus Klein <masmiseim@xxxxxx> > --- ... after the `---`. I.e. it should go into the PR description (which is the first comment on the PR) instead of the commit message. Ciao, Johannes > Add the usage of the submodules.recurse parameter on clone > > I try to finish the pullrequest #573 from Maddimax. This adds the usage > of the submodules.recurse parameter on clone > > Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-695%2FMasmiseim36%2Fdev%2FCloneWithSubmodule-v2 > Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-695/Masmiseim36/dev/CloneWithSubmodule-v2 > Pull-Request: https://github.com/git/git/pull/695 > > Range-diff vs v1: > > 1: 7fa8d19faf ! 1: c75835268a clone: use submodules.recurse option for automatically clone submodules > @@ -1,4 +1,4 @@ > -Author: Markus <masmiseim@xxxxxx> > +Author: Markus Klein <masmiseim@xxxxxx> > > clone: use submodules.recurse option for automatically clone submodules > > @@ -19,6 +19,9 @@ > The regression test is simplified compared to the test for "git clone > --recursive" as the general functionality is already checked there. > > + Changes since v1: > + * Fixed the commit author to match the Signed-off-by line > + > Signed-off-by: Markus Klein <masmiseim@xxxxxx> > > diff --git a/builtin/clone.c b/builtin/clone.c > > > builtin/clone.c | 16 +++++++++++++++- > t/t7407-submodule-foreach.sh | 11 +++++++++++ > 2 files changed, 26 insertions(+), 1 deletion(-) > > diff --git a/builtin/clone.c b/builtin/clone.c > index 0fc89ae2b9..21b9d927a2 100644 > --- a/builtin/clone.c > +++ b/builtin/clone.c > @@ -26,6 +26,8 @@ > #include "dir-iterator.h" > #include "iterator.h" > #include "sigchain.h" > +#include "submodule-config.h" > +#include "submodule.h" > #include "branch.h" > #include "remote.h" > #include "run-command.h" > @@ -929,6 +931,18 @@ static int path_exists(const char *path) > return !stat(path, &sb); > } > > +/** > + * Read config variables. > + */ > +static int git_clone_config(const char *var, const char *value, void *cb) > +{ > + if (!strcmp(var, "submodule.recurse") && git_config_bool(var, value)) { > + string_list_append(&option_recurse_submodules, "true"); > + return 0; > + } > + return git_default_config(var, value, cb); > +} > + > int cmd_clone(int argc, const char **argv, const char *prefix) > { > int is_bundle = 0, is_local; > @@ -1103,7 +1117,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix) > > write_config(&option_config); > > - git_config(git_default_config, NULL); > + git_config(git_clone_config, NULL); > > if (option_bare) { > if (option_mirror) > diff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh > index 6b2aa917e1..44b32f7b27 100755 > --- a/t/t7407-submodule-foreach.sh > +++ b/t/t7407-submodule-foreach.sh > @@ -383,6 +383,17 @@ test_expect_success 'use "update --recursive nested1" to checkout all submodules > git rev-parse --resolve-git-dir nested1/nested2/nested3/submodule/.git > ) > ' > +test_expect_success 'use "git clone" with submodule.recurse=true to checkout all submodules' ' > + git clone -c submodule.recurse=true super clone7 && > + ( > + git -C clone7 rev-parse --resolve-git-dir .git --resolve-git-dir nested1/nested2/nested3/submodule/.git >actual && > + cat >expect <<-EOF && > + .git > + $(pwd)/clone7/.git/modules/nested1/modules/nested2/modules/nested3/modules/submodule > + EOF > + test_cmp expect actual > + ) > +' > > test_expect_success 'command passed to foreach retains notion of stdin' ' > ( > > base-commit: d0654dc308b0ba76dd8ed7bbb33c8d8f7aacd783 > -- > gitgitgadget >