Changes since v3: * Rename the libified dir helper and update the docstring. Atharva Raykar (8): 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 builtin/clone.c | 118 +------------- builtin/submodule--helper.c | 307 +++++++++++++++++++----------------- dir.c | 114 +++++++++++++ dir.h | 10 ++ git-submodule.sh | 96 +---------- 5 files changed, 290 insertions(+), 355 deletions(-) Range-diff against v3: -: ---------- > 1: 75edf24186 submodule--helper: add options for compute_submodule_clone_url() -: ---------- > 2: 8e7a3e727a submodule--helper: refactor resolve_relative_url() helper -: ---------- > 3: 82961ddd02 submodule--helper: remove repeated code in sync_submodule() 1: 99d139375d ! 4: fa97d6801e dir: libify and export helper functions from clone.c @@ builtin/clone.c: int cmd_clone(int argc, const char **argv, const char *prefix) else - dir = guess_dir_name(repo_name, is_bundle, option_bare); - strip_trailing_slashes(dir); -+ dir = guess_target_dir_from_git_url(repo_name, is_bundle, option_bare); ++ dir = git_url_basename(repo_name, is_bundle, option_bare); + strip_dir_trailing_slashes(dir); dest_exists = path_exists(dir); @@ dir.c: int is_empty_dir(const char *path) return ret; } -+char *guess_target_dir_from_git_url(const char *repo, int is_bundle, int is_bare) ++char *git_url_basename(const char *repo, int is_bundle, int is_bare) +{ + const char *end = repo + strlen(repo), *start, *ptr; + size_t len; @@ dir.h: static inline int is_dot_or_dotdot(const char *name) int is_empty_dir(const char *dir); +/* -+ * Retrieve a target directory name by reading "humanish" part of the -+ * given Git URL. ++ * Retrieve the "humanish" basename of the given Git URL. + * + * For example: + * /path/to/repo.git => "repo" + * host.xz.foo/.git => "foo" + */ -+char *guess_target_dir_from_git_url(const char *repo, int is_bundle, int is_bare); ++char *git_url_basename(const char *repo, int is_bundle, int is_bare); +void strip_dir_trailing_slashes(char *dir); + void setup_standard_excludes(struct dir_struct *dir); 2: 11eea777ba ! 5: a3aa25518d submodule--helper: convert the bulk of cmd_add() to C @@ builtin/submodule--helper.c: static int add_config(int argc, const char **argv, + + add_data.repo = argv[0]; + if (argc == 1) -+ add_data.sm_path = guess_target_dir_from_git_url(add_data.repo, 0, 0); ++ add_data.sm_path = git_url_basename(add_data.repo, 0, 0); + else + add_data.sm_path = xstrdup(argv[1]); + 3: 51393cd99b = 6: 9667159d4b submodule--helper: remove add-clone subcommand 4: 50cedcd8a8 = 7: dc87b5627a submodule--helper: remove add-config subcommand 5: 02558da532 = 8: ea08e4fbad submodule--helper: remove resolve-relative-url subcommand -- 2.32.0