From: Atharva Raykar <raykar.ath@gmail.com> To: git@vger.kernel.org Cc: Atharva Raykar <raykar.ath@gmail.com>, Emily Shaffer <emilyshaffer@google.com>, Jonathan Nieder <jrnieder@gmail.com>, Junio C Hamano <gitster@pobox.com>, Christian Couder <christian.couder@gmail.com>, Shourya Shukla <periperidip@gmail.com>, Kaartic Sivaraam <kaartic.sivaraam@gmail.com> Subject: [GSoC] [PATCH v4 0/3] submodule--helper: introduce subcommands for sh to C conversion Date: Mon, 14 Jun 2021 18:21:54 +0530 [thread overview] Message-ID: <20210614125157.99426-1-raykar.ath@gmail.com> (raw) In-Reply-To: <20210610083916.96243-1-raykar.ath@gmail.com> This version modifies 'module_clone()' and separates the flag parsing from the actual cloning logic. This allows us to use the functionality of 'submodule--helper clone' without needing to push arguments to a strvec from 'add_submodule'. We use a new struct called `module_clone_data` instead. Because this change involves moving the contents of 'module_clone()' to 'clone_submodule()', the whole function had to be relocated further down so that all the helpers it calls are available to it. Other changes include making error output match more closely to the shell version, and better usage of the C API ('is_directory()' -> 'is_nonbare_repo_dir()') Atharva Raykar (3): submodule--helper: refactor module_clone() submodule--helper: introduce add-clone subcommand submodule--helper: introduce add-config subcommand builtin/submodule--helper.c | 536 ++++++++++++++++++++++++++++-------- git-submodule.sh | 66 +---- 2 files changed, 425 insertions(+), 177 deletions(-) Range-diff against v3: -: ---------- > 1: 11d035ce75 submodule--helper: refactor module_clone() 1: 3b5f7bec7c ! 2: c85701b79a submodule--helper: introduce add-clone subcommand @@ builtin/submodule--helper.c: static int module_set_branch(int argc, const char * +static int add_submodule(const struct add_data *add_data) +{ + char *submod_gitdir_path; ++ struct module_clone_data clone_data = MODULE_CLONE_DATA_INIT; + + /* perhaps the path already exists and is already a git repo, else clone it */ + if (is_directory(add_data->sm_path)) { ++ struct strbuf sm_path = STRBUF_INIT; ++ strbuf_addstr(&sm_path, add_data->sm_path); + submod_gitdir_path = xstrfmt("%s/.git", add_data->sm_path); -+ if (is_directory(submod_gitdir_path) || file_exists(submod_gitdir_path)) -+ printf(_("Adding existing path at '%s' to index\n"), ++ if (is_nonbare_repository_dir(&sm_path)) ++ printf(_("Adding existing repo at '%s' to the index\n"), + add_data->sm_path); + else + die(_("'%s' already exists and is not a valid git repo"), + add_data->sm_path); ++ strbuf_release(&sm_path); + free(submod_gitdir_path); + } else { -+ struct strvec clone_args = STRVEC_INIT; + struct child_process cp = CHILD_PROCESS_INIT; + submod_gitdir_path = xstrfmt(".git/modules/%s", add_data->sm_name); + + if (is_directory(submod_gitdir_path)) { + if (!add_data->force) { -+ error(_("a git directory for '%s' is found " -+ "locally with remote(s):"), add_data->sm_name); ++ fprintf(stderr, _("A git directory for '%s' is found " ++ "locally with remote(s):"), ++ add_data->sm_name); + show_fetch_remotes(stderr, add_data->sm_name, + submod_gitdir_path); -+ fprintf(stderr, -+ _("If you want to reuse this local git " -+ "directory instead of cloning again from\n" -+ " %s\n" -+ "use the '--force' option. If the local git " -+ "directory is not the correct repo\n" -+ "or if you are unsure what this means, choose " -+ "another name with the '--name' option.\n"), -+ add_data->realrepo); + free(submod_gitdir_path); -+ return 1; ++ die(_("If you want to reuse this local git " ++ "directory instead of cloning again from\n" ++ " %s\n" ++ "use the '--force' option. If the local git " ++ "directory is not the correct repo\n" ++ "or if you are unsure what this means, choose " ++ "another name with the '--name' option.\n"), ++ add_data->realrepo); + } else { + printf(_("Reactivating local git directory for " + "submodule '%s'\n"), add_data->sm_name); @@ builtin/submodule--helper.c: static int module_set_branch(int argc, const char * + } + free(submod_gitdir_path); + -+ strvec_pushl(&clone_args, "clone", "--path", add_data->sm_path, "--name", -+ add_data->sm_name, "--url", add_data->realrepo, NULL); -+ if (add_data->quiet) -+ strvec_push(&clone_args, "--quiet"); -+ if (add_data->progress) -+ strvec_push(&clone_args, "--progress"); -+ if (add_data->prefix) -+ strvec_pushl(&clone_args, "--prefix", add_data->prefix, NULL); ++ clone_data.prefix = add_data->prefix; ++ clone_data.path = add_data->sm_path; ++ clone_data.name = add_data->sm_name; ++ clone_data.url = add_data->realrepo; ++ clone_data.quiet = add_data->quiet; ++ clone_data.progress = add_data->progress; + if (add_data->reference_path) -+ strvec_pushl(&clone_args, "--reference", -+ add_data->reference_path, NULL); -+ if (add_data->dissociate) -+ strvec_push(&clone_args, "--dissociate"); ++ string_list_append(&clone_data.reference, ++ xstrdup(add_data->reference_path)); ++ clone_data.dissociate = add_data->dissociate; + if (add_data->depth >= 0) -+ strvec_pushf(&clone_args, "--depth=%d", add_data->depth); ++ clone_data.depth = xstrfmt("%d", add_data->depth); + -+ if (module_clone(clone_args.nr, clone_args.v, add_data->prefix)) { -+ strvec_clear(&clone_args); ++ if (clone_submodule(&clone_data)) + return -1; -+ } -+ strvec_clear(&clone_args); + + prepare_submodule_repo_env(&cp.env_array); + cp.git_cmd = 1; 2: a2a6b4d74c = 3: 6532b4ae11 submodule--helper: introduce add-config subcommand -- 2.31.1
next prev parent reply other threads:[~2021-06-14 12:54 UTC|newest] Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-06-05 11:39 [GSoC] [PATCH 0/2] " Atharva Raykar 2021-06-05 11:39 ` [GSoC] [PATCH 1/2] submodule--helper: introduce add-clone subcommand Atharva Raykar 2021-06-06 3:38 ` Bagas Sanjaya 2021-06-06 9:06 ` Christian Couder 2021-06-05 11:39 ` [GSoC] [PATCH 2/2] submodule--helper: introduce add-config subcommand Atharva Raykar 2021-06-07 9:24 ` Christian Couder 2021-06-07 11:24 ` Atharva Raykar 2021-06-08 9:56 ` [GSoC] [PATCH v2 0/2] submodule--helper: introduce subcommands for sh to C conversion Atharva Raykar 2021-06-08 9:56 ` [GSoC] [PATCH v2 1/2] submodule--helper: introduce add-clone subcommand Atharva Raykar 2021-06-08 12:32 ` Đoàn Trần Công Danh 2021-06-09 10:31 ` Atharva Raykar 2021-06-09 13:06 ` Đoàn Trần Công Danh 2021-06-09 13:10 ` Atharva Raykar 2021-06-09 4:24 ` Junio C Hamano 2021-06-09 10:31 ` Atharva Raykar 2021-06-08 9:56 ` [GSoC] [PATCH v2 2/2] submodule--helper: introduce add-config subcommand Atharva Raykar 2021-06-10 8:39 ` [GSoC] [PATCH v3 0/2] submodule--helper: introduce subcommands for sh to C conversion Atharva Raykar 2021-06-10 8:39 ` [PATCH v3 1/2] submodule--helper: introduce add-clone subcommand Atharva Raykar 2021-06-11 6:10 ` Junio C Hamano 2021-06-11 7:32 ` Atharva Raykar 2021-06-11 7:59 ` Junio C Hamano 2021-06-10 8:39 ` [PATCH v3 2/2] submodule--helper: introduce add-config subcommand Atharva Raykar 2021-06-14 12:51 ` Atharva Raykar [this message] 2021-06-14 12:51 ` [PATCH v4 1/3] submodule--helper: refactor module_clone() Atharva Raykar 2021-06-15 3:51 ` Junio C Hamano 2021-06-15 9:03 ` Atharva Raykar 2021-06-14 12:51 ` [PATCH v4 2/3] submodule--helper: introduce add-clone subcommand Atharva Raykar 2021-06-14 12:51 ` [PATCH v4 3/3] submodule--helper: introduce add-config subcommand Atharva Raykar 2021-06-14 19:51 ` Rafael Silva 2021-06-14 20:12 ` Eric Sunshine 2021-06-15 9:37 ` Rafael Silva 2021-06-15 7:09 ` Atharva Raykar 2021-06-15 9:38 ` [GSoC] [PATCH v5 0/3] submodule--helper: introduce subcommands for sh to C conversion Atharva Raykar 2021-06-15 9:38 ` [PATCH v5 1/3] submodule--helper: refactor module_clone() Atharva Raykar 2021-06-15 9:38 ` [PATCH v5 2/3] submodule--helper: introduce add-clone subcommand Atharva Raykar 2021-06-15 9:38 ` [PATCH v5 3/3] submodule--helper: introduce add-config subcommand Atharva Raykar 2021-06-15 14:57 ` [GSoC] [PATCH v6 0/3] submodule--helper: introduce subcommands for sh to C conversion Atharva Raykar 2021-06-15 14:57 ` [PATCH v6 1/3] submodule--helper: refactor module_clone() Atharva Raykar 2021-06-15 14:57 ` [PATCH v6 2/3] submodule--helper: introduce add-clone subcommand Atharva Raykar 2021-06-15 14:57 ` [PATCH v6 3/3] submodule--helper: introduce add-config subcommand Atharva Raykar
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210614125157.99426-1-raykar.ath@gmail.com \ --to=raykar.ath@gmail.com \ --cc=christian.couder@gmail.com \ --cc=emilyshaffer@google.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=jrnieder@gmail.com \ --cc=kaartic.sivaraam@gmail.com \ --cc=periperidip@gmail.com \ --subject='Re: [GSoC] [PATCH v4 0/3] submodule--helper: introduce subcommands for sh to C conversion' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).