Re: [GSoC] [PATCH 2/2] submodule--helper: introduce add-config subcommand

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Jun 5, 2021 at 1:42 PM Atharva Raykar <raykar.ath@xxxxxxxxx> wrote:
>
> Add a new "add-config" subcommand to `git submodule--helper` with the
> goal of converting part of the shell code in git-submodule.sh related to
> `git submodule add` into C code. This new subcommand sets the
> configuration variables of a newly added submodule, by registering the
> url in local git config, as well as the submodule name and path in the
> .gitmodules file. It also sets 'submodule.<name>.active' to "true" if
> the submodule path has not already been covered by any pathspec
> specified in 'submodule.active'.
>
> This is meant to be a faithful conversion from shell to C, with only one
> minor change: A warning is emitted if no value is specified in
> 'submodule.active', ie, the config looks like: "[submodule] active\n".

Maybe explaining a bit how this warning is useful could help reviewers
here. Especially what could happen if no value is specified in
'submodule.active'?

> The structure of the conditional to check if we need to set the 'active'
> toggle looks different from the shell version -- but behaves the same.
> The change was made to decrease code duplication. A comment has been
> added to explain that only one value of 'submodule.active' is obtained
> to check if we need to call is_submodule_active() at all.
>
> This is part of a series of changes that will result in all of
> 'submodule add' being converted to C.

[...]


> +       /*
> +        * NEEDSWORK: In a multi-working-tree world this needs to be
> +        * set in the per-worktree config.
> +        */
> +       pathspec_key_exists = !git_config_get_string("submodule.active",
> +                                                    &submod_pathspec);
> +       if (pathspec_key_exists && !submod_pathspec)
> +               warning(_("The submodule.active configuration exists, but "
> +                         "no pathspec was specified. Setting the value of "
> +                         "submodule.%s.active to 'true'."), add_data->sm_name);

It's not very clear that we will actually set
'submodule.<name>.active' to true below as it depends on the result of
calling is_submodule_active(), and anyway is_submodule_active() will
check again if "submodule.active" is set, which is wasteful.

Maybe we could set a variable, called for example "activate" here,
with something like:

       if (pathspec_key_exists && !submod_pathspec) {
               warning(...);
               activate = 1;
      }

and below use a check like:

       if (!pathspec_key_exists || activate ||
           !is_submodule_active(the_repository, add_data->sm_path)) {
...

> +       /*
> +        * If submodule.active does not exist, we will activate this
> +        * module unconditionally.
> +        *
> +        * Otherwise, we ask is_submodule_active(), which iterates
> +        * through all the values of 'submodule.active' to determine
> +        * if this module is already active.
> +        */
> +       if (!pathspec_key_exists ||
> +           !is_submodule_active(the_repository, add_data->sm_path)) {
> +               key = xstrfmt("submodule.%s.active", add_data->sm_name);
> +               git_config_set_gently(key, "true");
> +               free(key);
> +       }
> +}

The rest looks good to me! Thanks!



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux