Re: [PATCHv5 4/8] submodule--helper update-clone: allow multiple references
- From
Jacob Keller <jacob.keller@gmail.com>
- Date
- Aug 23, 2016, 22:20 UTC
- Message-ID
- <CA+P7+xq9_kx7d5NMk2QxwZRQn8o6qgkJq5ryZL2FVrHaUmqKQQ@mail.gmail.com>
- In-Reply-To
- <20160815215327.15682-5-sbeller@google.com>
On Mon, Aug 15, 2016 at 2:53 PM, Stefan Beller <sbeller@google.com> wrote:
Show 18 quoted lines
> Allow the user to pass in multiple references to update_clone. > Currently this is only internal API, but once the shell script is > replaced by a C version, this is needed. > > This fixes an API bug between the shell script and the helper. > Currently the helper accepts "--reference" "--reference=foo" > as a OPT_STRING whose value happens to be "--reference=foo", and > then uses > > if (suc->reference) > argv_array_push(&child->args, suc->reference) > > where suc->reference _is_ "--reference=foo" when invoking the > underlying "git clone", it cancels out. > > With this change we omit one of the "--reference" arguments when > passing references from the shell script to the helper. >
Yep, I see the API fix, and it looks correct. Makes use of the helper easier and more likely to be done correctly.
Show 35 quoted lines
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
> builtin/submodule--helper.c | 14 +++++++++-----
> git-submodule.sh | 2 +-
> 2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
> index ce9b3e9..7096848 100644
> --- a/builtin/submodule--helper.c
> +++ b/builtin/submodule--helper.c
> @@ -584,7 +584,7 @@ struct submodule_update_clone {
> /* configuration parameters which are passed on to the children */
> int quiet;
> int recommend_shallow;
> - const char *reference;
> + struct string_list references;
> const char *depth;
> const char *recursive_prefix;
> const char *prefix;
> @@ -600,7 +600,8 @@ struct submodule_update_clone {
> int failed_clones_nr, failed_clones_alloc;
> };
> #define SUBMODULE_UPDATE_CLONE_INIT {0, MODULE_LIST_INIT, 0, \
> - SUBMODULE_UPDATE_STRATEGY_INIT, 0, -1, NULL, NULL, NULL, NULL, \
> + SUBMODULE_UPDATE_STRATEGY_INIT, 0, -1, STRING_LIST_INIT_DUP, \
> + NULL, NULL, NULL, \
> STRING_LIST_INIT_DUP, 0, NULL, 0, 0}
>
>
> @@ -710,8 +711,11 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
> argv_array_pushl(&child->args, "--path", sub->path, NULL);
> argv_array_pushl(&child->args, "--name", sub->name, NULL);
> argv_array_pushl(&child->args, "--url", url, NULL);
> - if (suc->reference)
> - argv_array_push(&child->args, suc->reference);Here, you now no longer pass in the reference as a whole, but assume that it is actually just the value to pass to --reference. And below you correctly replace the extra --reference. Ok so I see how you fixed the API bug.
Show 10 quoted lines
> diff --git a/git-submodule.sh b/git-submodule.sh
> index c90dc33..3b412f5 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -575,7 +575,7 @@ cmd_update()
> ${wt_prefix:+--prefix "$wt_prefix"} \
> ${prefix:+--recursive-prefix "$prefix"} \
> ${update:+--update "$update"} \
> - ${reference:+--reference "$reference"} \
> + ${reference:+"$reference"} \From above, I see how you fixed this to assume (as above) that $reference is "--reference <value>" and pass it directly. It worked before but was definitely a bit "brittle" in that direct calling of the helper function would not behave as expected. Nice!
Regards, Jake