NOTE: This series uses (ar/submodule-add-config): https://lore.kernel.org/git/20210806140431.92018-1-raykar.ath@xxxxxxxxx/ Since v4: * Rename a local variable in 'compute_submodule_clone_url()' to reduce ambiguity. * Add a new patch that renames 'compute_submodule_clone_url()' to 'resolve_relative_url()' to better convey its use. We add it at the end after the 'resolve-relative-url' subcommand is removed so that there is no confusion as to what that function name binds to. * Fix incorrect example in the docstring for 'git_url_basename()'. Also add another example for more clarity. Also since this query of mine got buried in the revisions, I shall include it here again: Questions about the cache API used in [PATCH 5/9]: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. What is the difference between 'read_cache()' and 'read_cache_preload()'? From what I can tell, the latter optimistically preloads the index stat data. Is there any reason to use 'read_cache()' over 'read_cache_preload()'? 2. Which one is more appropriate for use in 'die_on_index_match()'? Fetch-it-Via: git fetch https://github.com/tfidfwastaken/git submodule-helper-add-list-5 Atharva Raykar (9): submodule--helper: add options for compute_submodule_clone_url() submodule--helper: refactor resolve_relative_url() helper submodule--helper: remove repeated code in sync_submodule() dir: libify and export helper functions from clone.c submodule--helper: convert the bulk of cmd_add() to C submodule--helper: remove add-clone subcommand submodule--helper: remove add-config subcommand submodule--helper: remove resolve-relative-url subcommand submodule--helper: rename compute_submodule_clone_url() builtin/clone.c | 118 +------------- builtin/submodule--helper.c | 307 +++++++++++++++++++----------------- dir.c | 114 +++++++++++++ dir.h | 11 ++ git-submodule.sh | 96 +---------- 5 files changed, 291 insertions(+), 355 deletions(-) Range-diff against v4: 1: 75edf24186 ! 1: 78e19c4b01 submodule--helper: add options for compute_submodule_clone_url() @@ Commit message `resolve_relative_url()` by using this function, something we will do in the next patch. + We also rename the local variable 'relurl' to avoid potential confusion + with the 'rel_url' parameter while we are at it. + Having this functionality factored out will be useful for converting the rest of `submodule add` in subsequent patches. @@ builtin/submodule--helper.c: static int module_foreach(int argc, const char **ar -static char *compute_submodule_clone_url(const char *rel_url) +static char *compute_submodule_clone_url(const char *rel_url, const char *up_path, int quiet) { - char *remoteurl, *relurl; +- char *remoteurl, *relurl; ++ char *remoteurl, *resolved_url; char *remote = get_default_remote(); -@@ builtin/submodule--helper.c: static char *compute_submodule_clone_url(const char *rel_url) + struct strbuf remotesb = STRBUF_INIT; strbuf_addf(&remotesb, "remote.%s.url", remote); if (git_config_get_string(remotesb.buf, &remoteurl)) { @@ builtin/submodule--helper.c: static char *compute_submodule_clone_url(const char remoteurl = xgetcwd(); } - relurl = relative_url(remoteurl, rel_url, NULL); -+ relurl = relative_url(remoteurl, rel_url, up_path); ++ resolved_url = relative_url(remoteurl, rel_url, up_path); free(remote); free(remoteurl); + strbuf_release(&remotesb); + +- return relurl; ++ return resolved_url; + } + + struct init_cb { @@ builtin/submodule--helper.c: static void init_submodule(const char *path, const char *prefix, if (starts_with_dot_dot_slash(url) || starts_with_dot_slash(url)) { 2: 8e7a3e727a ! 2: faadf74ec1 submodule--helper: refactor resolve_relative_url() helper @@ builtin/submodule--helper.c: static char *relative_url(const char *remote_url, +static char *compute_submodule_clone_url(const char *rel_url, const char *up_path, int quiet) { - char *remoteurl = NULL; -+ char *remoteurl, *relurl; ++ char *remoteurl, *resolved_url; char *remote = get_default_remote(); + struct strbuf remotesb = STRBUF_INIT; + @@ builtin/submodule--helper.c: static char *relative_url(const char *remote_url, + remotesb.buf); + remoteurl = xgetcwd(); + } -+ relurl = relative_url(remoteurl, rel_url, up_path); ++ resolved_url = relative_url(remoteurl, rel_url, up_path); + + free(remote); + free(remoteurl); + strbuf_release(&remotesb); + -+ return relurl; ++ return resolved_url; +} + +static int resolve_relative_url(int argc, const char **argv, const char *prefix) @@ builtin/submodule--helper.c: static int module_foreach(int argc, const char **ar -static char *compute_submodule_clone_url(const char *rel_url, const char *up_path, int quiet) -{ -- char *remoteurl, *relurl; +- char *remoteurl, *resolved_url; - char *remote = get_default_remote(); - struct strbuf remotesb = STRBUF_INIT; - @@ builtin/submodule--helper.c: static int module_foreach(int argc, const char **ar - remotesb.buf); - remoteurl = xgetcwd(); - } -- relurl = relative_url(remoteurl, rel_url, up_path); +- resolved_url = relative_url(remoteurl, rel_url, up_path); - - free(remote); - free(remoteurl); - strbuf_release(&remotesb); - -- return relurl; +- return resolved_url; -} - struct init_cb { 3: 82961ddd02 = 3: d2127bd09a submodule--helper: remove repeated code in sync_submodule() 4: fa97d6801e ! 4: 4b05f93def dir: libify and export helper functions from clone.c @@ dir.h: static inline int is_dot_or_dotdot(const char *name) + * + * For example: + * /path/to/repo.git => "repo" -+ * host.xz.foo/.git => "foo" ++ * host.xz:foo/.git => "foo" ++ * http://example.com/user/bar.baz => "bar.baz" + */ +char *git_url_basename(const char *repo, int is_bundle, int is_bare); +void strip_dir_trailing_slashes(char *dir); 5: a3aa25518d = 5: 1491a011b0 submodule--helper: convert the bulk of cmd_add() to C 6: 9667159d4b = 6: 5d5d07a6ba submodule--helper: remove add-clone subcommand 7: dc87b5627a = 7: 0ea27c2a15 submodule--helper: remove add-config subcommand 8: ea08e4fbad ! 8: 6bd2571f73 submodule--helper: remove resolve-relative-url subcommand @@ Commit message ## builtin/submodule--helper.c ## @@ builtin/submodule--helper.c: static char *compute_submodule_clone_url(const char *rel_url, const char *up_pat - return relurl; + return resolved_url; } -static int resolve_relative_url(int argc, const char **argv, const char *prefix) -: ---------- > 9: 14a05a0c1d submodule--helper: rename compute_submodule_clone_url() -- 2.32.0