Re: [PATCH] clone: use submodules.recurse option for automatically clone submodules
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Feb 1, 2020, 21:19 UTC
- Message-ID
- <nycvar.QRO.7.76.6.2002012218410.46@tvgsbejvaqbjf.bet>
- In-Reply-To
- <pull.695.git.git.1580505092071.gitgitgadget@gmail.com>
Hi Markus,
On Fri, 31 Jan 2020, Markus Klein via GitGitGadget wrote:
> From: Markus <masmiseim@gmx.de>
This line should probably match...
Show 19 quoted lines
> > 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. > > Signed-off-by: Markus Klein <masmiseim@gmx.de>
... this line. I.e. you will want to run `git config --global user.name "Markus Klein"` and then `git commit --amend --reset-author`.
Ciao, Johannes
Show 82 quoted lines
> ---
> 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-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-695/Masmiseim36/dev/CloneWithSubmodule-v1
> Pull-Request: https://github.com/git/git/pull/695
>
> 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
>