[GSoC] [PATCH v2 0/2] submodule--helper: introduce subcommands for sh to C conversion
- From
Atharva Raykar <raykar.ath@gmail.com>
- Date
- Jun 8, 2021, 09:56 UTC
- Message-ID
- <20210608095655.47324-1-raykar.ath@gmail.com>
- In-Reply-To
- <20210605113913.29005-1-raykar.ath@gmail.com>
I have elaborated the commit message more, to explain why a warning is emitted for an empty value in 'submodule.active'. The warning has been worded more accurately than before.
An unnecessary extra check for 'submodule.active' has been avoided.
I have included a range diff, in case that is useful.
My fork containing these changes can be found at: https://github.com/tfidfwastaken/git/commits/submodule-add-in-c
Emily and Jonathan: To be on the safe side, I have CC'd you so you know where I keep my changes, and we can avoid potential conflicts, as I believe you are working on this area as well. Just so you know, every week, I update the link to all my ongoing work at: https://atharvaraykar.me/gitnotes/#my-public-gitgit-branches
Atharva Raykar (2): submodule--helper: introduce add-clone subcommand submodule--helper: introduce add-config subcommand
builtin/submodule--helper.c | 315 ++++++++++++++++++++++++++++++++++++ git-submodule.sh | 66 +------- 2 files changed, 317 insertions(+), 64 deletions(-)
Range-diff against v1:
1: 398bfa713d = 1: 4374ebb6b1 submodule--helper: introduce add-clone subcommand
2: f9954cfcf7 ! 2: 406022d0f7 submodule--helper: introduce add-config subcommand
@@ Commit message
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".
+ 'submodule.active', ie, the config looks like: "[submodule] active\n",
+ because it is an invalid configuration. It would be helpful to let the
+ user know that the pathspec is unset, and the value of
+ 'submodule.<name>.active' might be set to 'true' so that they can
+ rectify their configuration and prevent future surprises (especially
+ given that the latter variable has a higher priority than the former).
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.
@@ builtin/submodule--helper.c: static int add_clone(int argc, const char **argv, c
+ char *key, *submod_pathspec = NULL;
+ struct child_process add_submod = CHILD_PROCESS_INIT;
+ struct child_process add_gitmodules = CHILD_PROCESS_INIT;
-+ int pathspec_key_exists;
++ int pathspec_key_exists, activate = 0;
+
+ key = xstrfmt("submodule.%s.url", add_data->sm_name);
+ git_config_set_gently(key, add_data->realrepo);
@@ builtin/submodule--helper.c: static int add_clone(int argc, const char **argv, c
+ */
+ 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);
++ if (pathspec_key_exists && !submod_pathspec) {
++ warning(_("The submodule.active configuration exists, but the "
++ "pathspec was unset. If the submodule is not already "
++ "active, the value of submodule.%s.active will be "
++ "be set to 'true'."), add_data->sm_name);
++ activate = 1;
++ }
+
+ /*
-+ * If submodule.active does not exist, we will activate this
-+ * module unconditionally.
++ * If submodule.active does not exist, or if the pathspec was unset,
++ * 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 ||
++ if (!pathspec_key_exists || activate ||
+ !is_submodule_active(the_repository, add_data->sm_path)) {
+ key = xstrfmt("submodule.%s.active", add_data->sm_name);
+ git_config_set_gently(key, "true");-- 2.31.1