* [PATCH] submodule--helper.c: remove duplicate code @ 2017-03-08 17:44 me 2017-03-08 18:53 ` Stefan Beller 0 siblings, 1 reply; 24+ messages in thread From: me @ 2017-03-08 17:44 UTC (permalink / raw) To: git; +Cc: Valery Tolstov From: Valery Tolstov <me@vtolstov.org> Remove code fragment from module_clone that duplicates functionality of connect_work_tree_and_git_dir in dir.c Signed-off-by: Valery Tolstov <me@vtolstov.org> --- >> I think we can reuse code from module_clone that writes .git link. >> Possibly this code fragment needs to be factored out from module_clone > > That fragment already exists, see dir.h: > connect_work_tree_and_git_dir(work_tree, git_dir); > Maybe another good microproject is to use that in module_clone. By suggestion of Stefan Beller I would like to make this micro improvement as my microproject for GSoc. builtin/submodule--helper.c | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 899dc334e..cda8a3bc1 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -579,7 +579,6 @@ static int module_clone(int argc, const char **argv, const char *prefix) const char *name = NULL, *url = NULL, *depth = NULL; int quiet = 0; int progress = 0; - FILE *submodule_dot_git; char *p, *path = NULL, *sm_gitdir; struct strbuf rel_path = STRBUF_INIT; struct strbuf sb = STRBUF_INIT; @@ -653,27 +652,12 @@ static int module_clone(int argc, const char **argv, const char *prefix) strbuf_reset(&sb); } - /* Write a .git file in the submodule to redirect to the superproject. */ - strbuf_addf(&sb, "%s/.git", path); - if (safe_create_leading_directories_const(sb.buf) < 0) - die(_("could not create leading directories of '%s'"), sb.buf); - submodule_dot_git = fopen(sb.buf, "w"); - if (!submodule_dot_git) - die_errno(_("cannot open file '%s'"), sb.buf); - - fprintf_or_die(submodule_dot_git, "gitdir: %s\n", - relative_path(sm_gitdir, path, &rel_path)); - if (fclose(submodule_dot_git)) - die(_("could not close file %s"), sb.buf); - strbuf_reset(&sb); - strbuf_reset(&rel_path); - - /* Redirect the worktree of the submodule in the superproject's config */ p = git_pathdup_submodule(path, "config"); if (!p) die(_("could not get submodule directory for '%s'"), path); - git_config_set_in_file(p, "core.worktree", - relative_path(path, sm_gitdir, &rel_path)); + + /* Connect module worktree and git dir */ + connect_work_tree_and_git_dir(path, sm_gitdir); /* setup alternateLocation and alternateErrorStrategy in the cloned submodule if needed */ git_config_get_string("submodule.alternateLocation", &sm_alternate); -- 2.12.0.190.g250ed7eaf ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH] submodule--helper.c: remove duplicate code 2017-03-08 17:44 [PATCH] submodule--helper.c: remove duplicate code me @ 2017-03-08 18:53 ` Stefan Beller 2017-03-08 19:59 ` Valery Tolstov 0 siblings, 1 reply; 24+ messages in thread From: Stefan Beller @ 2017-03-08 18:53 UTC (permalink / raw) To: Valery Tolstov; +Cc: git@vger.kernel.org On Wed, Mar 8, 2017 at 9:44 AM, <me@vtolstov.org> wrote: > From: Valery Tolstov <me@vtolstov.org> > > Remove code fragment from module_clone that duplicates functionality > of connect_work_tree_and_git_dir in dir.c > > Signed-off-by: Valery Tolstov <me@vtolstov.org> > --- >>> I think we can reuse code from module_clone that writes .git link. >>> Possibly this code fragment needs to be factored out from module_clone >> >> That fragment already exists, see dir.h: >> connect_work_tree_and_git_dir(work_tree, git_dir); >> Maybe another good microproject is to use that in module_clone. > > By suggestion of Stefan Beller I would like to make this micro > improvement as my microproject for GSoc. Thanks for looking into this code deduplication! Well these two parts of the code are subtly different, though. When applying this patch to origin/master (3bc53220cb2 is the last time I fetched from Junio), then $ make $ cd t $ prove --timer --jobs 25 ./t[0-8][0-9]*.sh ... lots of output... Test Summary Report ------------------- ./t3600-rm.sh (Wstat: 256 Tests: 79 Failed: 24) Failed tests: 39-40, 43-59, 61-65 Non-zero exit status: 1 ./t4059-diff-submodule-not-initialized.sh (Wstat: 256 Tests: 8 Failed: 5) Failed tests: 4-8 Non-zero exit status: 1 ./t7001-mv.sh (Wstat: 256 Tests: 47 Failed: 7) Failed tests: 39-45 Non-zero exit status: 1 ./t7412-submodule-absorbgitdirs.sh (Wstat: 256 Tests: 11 Failed: 6) Failed tests: 3-7, 9 Non-zero exit status: 1 ./t7400-submodule-basic.sh (Wstat: 256 Tests: 90 Failed: 13) Failed tests: 46-47, 49, 75, 79-87 Non-zero exit status: 1 ./t7406-submodule-update.sh (Wstat: 256 Tests: 52 Failed: 14) Failed tests: 5, 28-31, 33-34, 36-39, 43, 45-46 Non-zero exit status: 1 When then running one of them with debug output (See t/README for the debug flags, I remember divx, the video format as a sufficient set of flags to get enough debug output) $ ./t7406-submodule-update.sh -d -i -v -x ... ++ cd foo ++ git submodule deinit -f sub Cleared directory 'sub' Submodule 'foo/sub' (/usr/local/google/home/sbeller/OSS/git/t/trash directory.t7406-submodule-update/withsubs/../rebasing) unregistered for path 'sub' ++ git submodule update --init sub + test_eval_ret_=1 + want_trace + test t = t + test t = t + set +x error: last command exited with $?=1 not ok 5 - submodule update --init from and of subdirectory # # git init withsubs && # (cd withsubs && # mkdir foo && # git submodule add "$(pwd)/../rebasing" foo/sub && # (cd foo && # git submodule deinit -f sub && # git submodule update --init sub 2>../../actual2 # ) # ) && # test_i18ncmp expect2 actual2 # $ cd trash\ directory.t7406-submodule-update/withsubs/foo/ $ git submodule deinit -f sub Cleared directory 'sub' Submodule 'foo/sub' (/usr/local/google/home/sbeller/OSS/git/t/trash directory.t7406-submodule-update/withsubs/../rebasing) unregistered for path 'sub' $ git submodule update --init sub Submodule 'foo/sub' (/usr/local/google/home/sbeller/OSS/git/t/trash directory.t7406-submodule-update/withsubs/../rebasing) registered for path 'sub' fatal: could not get submodule directory for '/usr/local/google/home/sbeller/OSS/git/t/trash directory.t7406-submodule-update/withsubs/foo/sub' Failed to clone 'foo/sub'. Retry scheduled fatal: could not get submodule directory for '/usr/local/google/home/sbeller/OSS/git/t/trash directory.t7406-submodule-update/withsubs/foo/sub' Failed to clone 'foo/sub' a second time, aborting So I think we're missing to create the directory? (Just guessing) Maybe we need to have 2293f77a081 (connect_work_tree_and_git_dir: safely create leading directories, part of origin/sb/checkout-recurse-submodules, also found at https://public-inbox.org/git/20170306205919.9713-8-sbeller@google.com/ ) first before we can apply this patch. Thanks, Stefan > > builtin/submodule--helper.c | 22 +++------------------- > 1 file changed, 3 insertions(+), 19 deletions(-) > > diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c > index 899dc334e..cda8a3bc1 100644 > --- a/builtin/submodule--helper.c > +++ b/builtin/submodule--helper.c > @@ -579,7 +579,6 @@ static int module_clone(int argc, const char **argv, const char *prefix) > const char *name = NULL, *url = NULL, *depth = NULL; > int quiet = 0; > int progress = 0; > - FILE *submodule_dot_git; > char *p, *path = NULL, *sm_gitdir; > struct strbuf rel_path = STRBUF_INIT; > struct strbuf sb = STRBUF_INIT; > @@ -653,27 +652,12 @@ static int module_clone(int argc, const char **argv, const char *prefix) > strbuf_reset(&sb); > } > > - /* Write a .git file in the submodule to redirect to the superproject. */ > - strbuf_addf(&sb, "%s/.git", path); > - if (safe_create_leading_directories_const(sb.buf) < 0) > - die(_("could not create leading directories of '%s'"), sb.buf); > - submodule_dot_git = fopen(sb.buf, "w"); > - if (!submodule_dot_git) > - die_errno(_("cannot open file '%s'"), sb.buf); > - > - fprintf_or_die(submodule_dot_git, "gitdir: %s\n", > - relative_path(sm_gitdir, path, &rel_path)); > - if (fclose(submodule_dot_git)) > - die(_("could not close file %s"), sb.buf); > - strbuf_reset(&sb); > - strbuf_reset(&rel_path); > - > - /* Redirect the worktree of the submodule in the superproject's config */ > p = git_pathdup_submodule(path, "config"); > if (!p) > die(_("could not get submodule directory for '%s'"), path); > - git_config_set_in_file(p, "core.worktree", > - relative_path(path, sm_gitdir, &rel_path)); > + > + /* Connect module worktree and git dir */ > + connect_work_tree_and_git_dir(path, sm_gitdir); > > /* setup alternateLocation and alternateErrorStrategy in the cloned submodule if needed */ > git_config_get_string("submodule.alternateLocation", &sm_alternate); > -- > 2.12.0.190.g250ed7eaf > ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] submodule--helper.c: remove duplicate code 2017-03-08 18:53 ` Stefan Beller @ 2017-03-08 19:59 ` Valery Tolstov 2017-03-08 20:25 ` Stefan Beller 0 siblings, 1 reply; 24+ messages in thread From: Valery Tolstov @ 2017-03-08 19:59 UTC (permalink / raw) To: sbeller; +Cc: git, me > Maybe we need to have 2293f77a081 > (connect_work_tree_and_git_dir: safely create leading directories, > part of origin/sb/checkout-recurse-submodules, also found at > https://public-inbox.org/git/20170306205919.9713-8-sbeller@google.com/ ) > first before we can apply this patch. Thank you for your detailed responses. Yes, we difenitely need this patch first. All tests passed when I applied it. Regards, Valery Tolstov ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] submodule--helper.c: remove duplicate code 2017-03-08 19:59 ` Valery Tolstov @ 2017-03-08 20:25 ` Stefan Beller 2017-03-08 23:05 ` Valery Tolstov 2017-03-09 0:03 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Valery Tolstov 0 siblings, 2 replies; 24+ messages in thread From: Stefan Beller @ 2017-03-08 20:25 UTC (permalink / raw) To: Valery Tolstov; +Cc: git@vger.kernel.org On Wed, Mar 8, 2017 at 11:59 AM, Valery Tolstov <me@vtolstov.org> wrote: >> Maybe we need to have 2293f77a081 >> (connect_work_tree_and_git_dir: safely create leading directories, >> part of origin/sb/checkout-recurse-submodules, also found at >> https://public-inbox.org/git/20170306205919.9713-8-sbeller@google.com/ ) >> first before we can apply this patch. > > Thank you for your detailed responses. Yes, we difenitely need this > patch first. All tests passed when I applied it. > Thanks for testing! Then the next step (as outlined by Documentation/SubmittingPatches) is to figure out how to best present this to the mailing list; I think the best way is to send out a patch series consisting of both of these 2 patches, the "connect_work_tree_and_git_dir: safely create leading directories," first and then your deduplication patch. When applied in that order, then git passes the test suite at all commits (which is very nice when using e.g. git-bisect on git). Thanks, Stefan ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] submodule--helper.c: remove duplicate code 2017-03-08 20:25 ` Stefan Beller @ 2017-03-08 23:05 ` Valery Tolstov 2017-03-08 23:15 ` Stefan Beller 2017-03-09 0:03 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Valery Tolstov 1 sibling, 1 reply; 24+ messages in thread From: Valery Tolstov @ 2017-03-08 23:05 UTC (permalink / raw) To: sbeller; +Cc: git, me > Then the next step (as outlined by Documentation/SubmittingPatches) > is to figure out how to best present this to the mailing list; I think the best > way is to send out a patch series consisting of both of these 2 patches, > the "connect_work_tree_and_git_dir: safely create leading directories," > first and then your deduplication patch. Is there a handy way to forward your patch in new patch series? Also, should I start new thread for new patch series? Regards, Valery Tolstov ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] submodule--helper.c: remove duplicate code 2017-03-08 23:05 ` Valery Tolstov @ 2017-03-08 23:15 ` Stefan Beller 2017-03-08 23:24 ` Junio C Hamano 0 siblings, 1 reply; 24+ messages in thread From: Stefan Beller @ 2017-03-08 23:15 UTC (permalink / raw) To: Valery Tolstov; +Cc: git@vger.kernel.org On Wed, Mar 8, 2017 at 3:05 PM, Valery Tolstov <me@vtolstov.org> wrote: >> Then the next step (as outlined by Documentation/SubmittingPatches) >> is to figure out how to best present this to the mailing list; I think the best >> way is to send out a patch series consisting of both of these 2 patches, >> the "connect_work_tree_and_git_dir: safely create leading directories," >> first and then your deduplication patch. > > Is there a handy way to forward your patch in new patch series? No there is not. :( Here is what I would do: * Take the patch and "git am" it (you probably did that for testing already.) * use "git rebase --interactive" to get the order right, * use "git format-patch HEAD^^ --cover-letter" to create the series. (This will take care of e.g. rewriting the patch to be numbered correctly) * use "git send-email 00* --to=list --cc=Junio ..." etc to send it out as a new series. Alternatively you can take the patch file you sent and that patch and manually edit their numbering and send them out. (PATCH 1/2 and PATCH 2/2) > Also, > should I start new thread for new patch series? As you like. As far as I understand, it is very easy for Junio to take a whole (sub-)thread of patches and apply that and make a branch with multiple commits out of it as he has tooling for that. > > Regards, > Valery Tolstov Thanks, Stefan ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] submodule--helper.c: remove duplicate code 2017-03-08 23:15 ` Stefan Beller @ 2017-03-08 23:24 ` Junio C Hamano 2017-03-08 23:34 ` Stefan Beller 0 siblings, 1 reply; 24+ messages in thread From: Junio C Hamano @ 2017-03-08 23:24 UTC (permalink / raw) To: Stefan Beller; +Cc: Valery Tolstov, git@vger.kernel.org Stefan Beller <sbeller@google.com> writes: >> Also, >> should I start new thread for new patch series? > > As you like. > As far as I understand, it is very easy for Junio to take a whole > (sub-)thread of patches and apply that and make a branch with > multiple commits out of it as he has tooling for that. Note that the world does not revolve around _me_. I was once asked for my preference and I responded and that is what you are recalling here. Others on the list do review and keeping it easy for them to is also important. What's _your_ preference? ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] submodule--helper.c: remove duplicate code 2017-03-08 23:24 ` Junio C Hamano @ 2017-03-08 23:34 ` Stefan Beller 0 siblings, 0 replies; 24+ messages in thread From: Stefan Beller @ 2017-03-08 23:34 UTC (permalink / raw) To: Junio C Hamano; +Cc: Valery Tolstov, git@vger.kernel.org On Wed, Mar 8, 2017 at 3:24 PM, Junio C Hamano <gitster@pobox.com> wrote: > Stefan Beller <sbeller@google.com> writes: > >>> Also, >>> should I start new thread for new patch series? >> >> As you like. >> As far as I understand, it is very easy for Junio to take a whole >> (sub-)thread of patches and apply that and make a branch with >> multiple commits out of it as he has tooling for that. > > Note that the world does not revolve around _me_. I was once asked > for my preference and I responded and that is what you are recalling > here. > > Others on the list do review and keeping it easy for them to is also > important. What's _your_ preference? > I use gmail, that has a broken threading model (it groups emails by subject lines; apparently not using any "in-reply-to" relationship to build up a thread), so I do not care. At all. I do not know about the preference of the next most likely people to review submodule code, so I refrained from giving advice depending on reviewer preference, but instead gave advice that would ease your work as I recall. After thinking about it further, you may want to make sure that the topic is coherent and it is easy to discover all related emails in an archive of the mailing list. https://public-inbox.org/git/ So in the cover letter you could link to the previous thread, https://public-inbox.org/git/20170308174449.24266-1-me@vtolstov.org/ or just continue that thread by replying to an email that is appropriate for the series. Thanks, Stefan ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v2 0/2] Remove duplicate code from module_clone() 2017-03-08 20:25 ` Stefan Beller 2017-03-08 23:05 ` Valery Tolstov @ 2017-03-09 0:03 ` Valery Tolstov 2017-03-09 0:03 ` [PATCH v2 1/2] connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov ` (2 more replies) 1 sibling, 3 replies; 24+ messages in thread From: Valery Tolstov @ 2017-03-09 0:03 UTC (permalink / raw) To: git; +Cc: sbeller, me, gitster > Then the next step (as outlined by Documentation/SubmittingPatches) > is to figure out how to best present this to the mailing list; I think the best > way is to send out a patch series consisting of both of these 2 patches, > the "connect_work_tree_and_git_dir: safely create leading directories," > first and then your deduplication patch. Combined two patches Stefan Beller (1): connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov (1): submodule--helper.c: remove duplicate code builtin/submodule--helper.c | 20 ++------------------ dir.c | 32 +++++++++++++++++++++----------- submodule.c | 11 ++--------- 3 files changed, 25 insertions(+), 38 deletions(-) -- 2.12.0.192.gbdb9d28a5 ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v2 1/2] connect_work_tree_and_git_dir: safely create leading directories 2017-03-09 0:03 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Valery Tolstov @ 2017-03-09 0:03 ` Valery Tolstov 2017-03-09 0:03 ` [PATCH v2 2/2] submodule--helper.c: remove duplicate code Valery Tolstov 2017-03-09 0:28 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Brandon Williams 2 siblings, 0 replies; 24+ messages in thread From: Valery Tolstov @ 2017-03-09 0:03 UTC (permalink / raw) To: git; +Cc: sbeller, me, gitster From: Stefan Beller <sbeller@google.com> In a later patch we'll use connect_work_tree_and_git_dir when the directory for the gitlink file doesn't exist yet. This patch makes connect_work_tree_and_git_dir safe to use for both cases of either the git dir or the working dir missing. To do so, we need to call safe_create_leading_directories[_const] on both directories. However this has to happen before we construct the absolute paths as real_pathdup assumes the directories to be there already. So for both the config file in the git dir as well as the .git link file we need to a) construct the name b) call SCLD c) get the absolute path d) once a-c is done for both we can consume the absolute path to compute the relative path to each other and store those relative paths. The implementation provided here puts a) and b) for both cases first, and then performs c and d after. One of the two users of 'connect_work_tree_and_git_dir' already checked for the directory being there, so we can loose that check as connect_work_tree_and_git_dir handles this functionality now. Signed-off-by: Stefan Beller <sbeller@google.com> --- dir.c | 32 +++++++++++++++++++++----------- submodule.c | 11 ++--------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/dir.c b/dir.c index 4541f9e14..6f52af7ab 100644 --- a/dir.c +++ b/dir.c @@ -2728,23 +2728,33 @@ void untracked_cache_add_to_index(struct index_state *istate, /* Update gitfile and core.worktree setting to connect work tree and git dir */ void connect_work_tree_and_git_dir(const char *work_tree_, const char *git_dir_) { - struct strbuf file_name = STRBUF_INIT; + struct strbuf gitfile_sb = STRBUF_INIT; + struct strbuf cfg_sb = STRBUF_INIT; struct strbuf rel_path = STRBUF_INIT; - char *git_dir = real_pathdup(git_dir_); - char *work_tree = real_pathdup(work_tree_); + char *git_dir, *work_tree; - /* Update gitfile */ - strbuf_addf(&file_name, "%s/.git", work_tree); - write_file(file_name.buf, "gitdir: %s", - relative_path(git_dir, work_tree, &rel_path)); + /* Prepare .git file */ + strbuf_addf(&gitfile_sb, "%s/.git", work_tree_); + if (safe_create_leading_directories_const(gitfile_sb.buf)) + die(_("could not create directories for %s"), gitfile_sb.buf); + + /* Prepare config file */ + strbuf_addf(&cfg_sb, "%s/config", git_dir_); + if (safe_create_leading_directories_const(cfg_sb.buf)) + die(_("could not create directories for %s"), cfg_sb.buf); + git_dir = real_pathdup(git_dir_); + work_tree = real_pathdup(work_tree_); + + /* Write .git file */ + write_file(gitfile_sb.buf, "gitdir: %s", + relative_path(git_dir, work_tree, &rel_path)); /* Update core.worktree setting */ - strbuf_reset(&file_name); - strbuf_addf(&file_name, "%s/config", git_dir); - git_config_set_in_file(file_name.buf, "core.worktree", + git_config_set_in_file(cfg_sb.buf, "core.worktree", relative_path(work_tree, git_dir, &rel_path)); - strbuf_release(&file_name); + strbuf_release(&gitfile_sb); + strbuf_release(&cfg_sb); strbuf_release(&rel_path); free(work_tree); free(git_dir); diff --git a/submodule.c b/submodule.c index 3b98766a6..45e93a1d5 100644 --- a/submodule.c +++ b/submodule.c @@ -1445,8 +1445,6 @@ void absorb_git_dir_into_superproject(const char *prefix, /* Not populated? */ if (!sub_git_dir) { - char *real_new_git_dir; - const char *new_git_dir; const struct submodule *sub; if (err_code == READ_GITFILE_ERR_STAT_FAILED) { @@ -1469,13 +1467,8 @@ void absorb_git_dir_into_superproject(const char *prefix, sub = submodule_from_path(null_sha1, path); if (!sub) die(_("could not lookup name for submodule '%s'"), path); - new_git_dir = git_path("modules/%s", sub->name); - if (safe_create_leading_directories_const(new_git_dir) < 0) - die(_("could not create directory '%s'"), new_git_dir); - real_new_git_dir = real_pathdup(new_git_dir); - connect_work_tree_and_git_dir(path, real_new_git_dir); - - free(real_new_git_dir); + connect_work_tree_and_git_dir(path, + git_path("modules/%s", sub->name)); } else { /* Is it already absorbed into the superprojects git dir? */ char *real_sub_git_dir = real_pathdup(sub_git_dir); -- 2.12.0.192.gbdb9d28a5 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v2 2/2] submodule--helper.c: remove duplicate code 2017-03-09 0:03 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Valery Tolstov 2017-03-09 0:03 ` [PATCH v2 1/2] connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov @ 2017-03-09 0:03 ` Valery Tolstov 2017-03-09 0:38 ` Brandon Williams 2017-03-09 0:28 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Brandon Williams 2 siblings, 1 reply; 24+ messages in thread From: Valery Tolstov @ 2017-03-09 0:03 UTC (permalink / raw) To: git; +Cc: sbeller, me, gitster Remove code fragment from module_clone that duplicates functionality of connect_work_tree_and_git_dir in dir.c Signed-off-by: Valery Tolstov <me@vtolstov.org> --- builtin/submodule--helper.c | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 899dc334e..405cbea07 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -579,7 +579,6 @@ static int module_clone(int argc, const char **argv, const char *prefix) const char *name = NULL, *url = NULL, *depth = NULL; int quiet = 0; int progress = 0; - FILE *submodule_dot_git; char *p, *path = NULL, *sm_gitdir; struct strbuf rel_path = STRBUF_INIT; struct strbuf sb = STRBUF_INIT; @@ -653,27 +652,12 @@ static int module_clone(int argc, const char **argv, const char *prefix) strbuf_reset(&sb); } - /* Write a .git file in the submodule to redirect to the superproject. */ - strbuf_addf(&sb, "%s/.git", path); - if (safe_create_leading_directories_const(sb.buf) < 0) - die(_("could not create leading directories of '%s'"), sb.buf); - submodule_dot_git = fopen(sb.buf, "w"); - if (!submodule_dot_git) - die_errno(_("cannot open file '%s'"), sb.buf); - - fprintf_or_die(submodule_dot_git, "gitdir: %s\n", - relative_path(sm_gitdir, path, &rel_path)); - if (fclose(submodule_dot_git)) - die(_("could not close file %s"), sb.buf); - strbuf_reset(&sb); - strbuf_reset(&rel_path); + /* Connect module worktree and git dir */ + connect_work_tree_and_git_dir(path, sm_gitdir); - /* Redirect the worktree of the submodule in the superproject's config */ p = git_pathdup_submodule(path, "config"); if (!p) die(_("could not get submodule directory for '%s'"), path); - git_config_set_in_file(p, "core.worktree", - relative_path(path, sm_gitdir, &rel_path)); /* setup alternateLocation and alternateErrorStrategy in the cloned submodule if needed */ git_config_get_string("submodule.alternateLocation", &sm_alternate); -- 2.12.0.192.gbdb9d28a5 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v2 2/2] submodule--helper.c: remove duplicate code 2017-03-09 0:03 ` [PATCH v2 2/2] submodule--helper.c: remove duplicate code Valery Tolstov @ 2017-03-09 0:38 ` Brandon Williams 2017-03-09 1:27 ` [PATCH v3 0/2] Remove duplicate code from module_clone() Valery Tolstov 0 siblings, 1 reply; 24+ messages in thread From: Brandon Williams @ 2017-03-09 0:38 UTC (permalink / raw) To: Valery Tolstov; +Cc: git, sbeller, gitster On 03/09, Valery Tolstov wrote: > Remove code fragment from module_clone that duplicates functionality > of connect_work_tree_and_git_dir in dir.c > > Signed-off-by: Valery Tolstov <me@vtolstov.org> Patch looks good all the tests pass when running this on top of Stefan's checkout series 'origin/sb/checkout-recurse-submodules'. There is still one more bit of cleanup that you can do. > --- > builtin/submodule--helper.c | 20 ++------------------ > 1 file changed, 2 insertions(+), 18 deletions(-) > > diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c > index 899dc334e..405cbea07 100644 > --- a/builtin/submodule--helper.c > +++ b/builtin/submodule--helper.c > @@ -579,7 +579,6 @@ static int module_clone(int argc, const char **argv, const char *prefix) > const char *name = NULL, *url = NULL, *depth = NULL; > int quiet = 0; > int progress = 0; > - FILE *submodule_dot_git; > char *p, *path = NULL, *sm_gitdir; > struct strbuf rel_path = STRBUF_INIT; rel_path is no longer used so it and the call to strbuf_release() to free its memory can be removed. -- Brandon Williams ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v3 0/2] Remove duplicate code from module_clone() 2017-03-09 0:38 ` Brandon Williams @ 2017-03-09 1:27 ` Valery Tolstov 2017-03-09 1:27 ` [PATCH v3 1/2] connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov 2017-03-09 1:27 ` [PATCH v3 2/2] submodule--helper.c: remove duplicate code Valery Tolstov 0 siblings, 2 replies; 24+ messages in thread From: Valery Tolstov @ 2017-03-09 1:27 UTC (permalink / raw) To: git; +Cc: bmwill, sbeller, me, gitster Stefan Beller (1): connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov (1): submodule--helper.c: remove duplicate code builtin/submodule--helper.c | 22 ++-------------------- dir.c | 32 +++++++++++++++++++++----------- submodule.c | 11 ++--------- 3 files changed, 25 insertions(+), 40 deletions(-) -- 2.12.0.192.gbdb9d28a5 ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v3 1/2] connect_work_tree_and_git_dir: safely create leading directories 2017-03-09 1:27 ` [PATCH v3 0/2] Remove duplicate code from module_clone() Valery Tolstov @ 2017-03-09 1:27 ` Valery Tolstov 2017-03-09 1:27 ` [PATCH v3 2/2] submodule--helper.c: remove duplicate code Valery Tolstov 1 sibling, 0 replies; 24+ messages in thread From: Valery Tolstov @ 2017-03-09 1:27 UTC (permalink / raw) To: git; +Cc: bmwill, sbeller, me, gitster From: Stefan Beller <sbeller@google.com> In a later patch we'll use connect_work_tree_and_git_dir when the directory for the gitlink file doesn't exist yet. This patch makes connect_work_tree_and_git_dir safe to use for both cases of either the git dir or the working dir missing. To do so, we need to call safe_create_leading_directories[_const] on both directories. However this has to happen before we construct the absolute paths as real_pathdup assumes the directories to be there already. So for both the config file in the git dir as well as the .git link file we need to a) construct the name b) call SCLD c) get the absolute path d) once a-c is done for both we can consume the absolute path to compute the relative path to each other and store those relative paths. The implementation provided here puts a) and b) for both cases first, and then performs c and d after. One of the two users of 'connect_work_tree_and_git_dir' already checked for the directory being there, so we can loose that check as connect_work_tree_and_git_dir handles this functionality now. Signed-off-by: Stefan Beller <sbeller@google.com> --- dir.c | 32 +++++++++++++++++++++----------- submodule.c | 11 ++--------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/dir.c b/dir.c index 4541f9e14..6f52af7ab 100644 --- a/dir.c +++ b/dir.c @@ -2728,23 +2728,33 @@ void untracked_cache_add_to_index(struct index_state *istate, /* Update gitfile and core.worktree setting to connect work tree and git dir */ void connect_work_tree_and_git_dir(const char *work_tree_, const char *git_dir_) { - struct strbuf file_name = STRBUF_INIT; + struct strbuf gitfile_sb = STRBUF_INIT; + struct strbuf cfg_sb = STRBUF_INIT; struct strbuf rel_path = STRBUF_INIT; - char *git_dir = real_pathdup(git_dir_); - char *work_tree = real_pathdup(work_tree_); + char *git_dir, *work_tree; - /* Update gitfile */ - strbuf_addf(&file_name, "%s/.git", work_tree); - write_file(file_name.buf, "gitdir: %s", - relative_path(git_dir, work_tree, &rel_path)); + /* Prepare .git file */ + strbuf_addf(&gitfile_sb, "%s/.git", work_tree_); + if (safe_create_leading_directories_const(gitfile_sb.buf)) + die(_("could not create directories for %s"), gitfile_sb.buf); + + /* Prepare config file */ + strbuf_addf(&cfg_sb, "%s/config", git_dir_); + if (safe_create_leading_directories_const(cfg_sb.buf)) + die(_("could not create directories for %s"), cfg_sb.buf); + git_dir = real_pathdup(git_dir_); + work_tree = real_pathdup(work_tree_); + + /* Write .git file */ + write_file(gitfile_sb.buf, "gitdir: %s", + relative_path(git_dir, work_tree, &rel_path)); /* Update core.worktree setting */ - strbuf_reset(&file_name); - strbuf_addf(&file_name, "%s/config", git_dir); - git_config_set_in_file(file_name.buf, "core.worktree", + git_config_set_in_file(cfg_sb.buf, "core.worktree", relative_path(work_tree, git_dir, &rel_path)); - strbuf_release(&file_name); + strbuf_release(&gitfile_sb); + strbuf_release(&cfg_sb); strbuf_release(&rel_path); free(work_tree); free(git_dir); diff --git a/submodule.c b/submodule.c index 3b98766a6..45e93a1d5 100644 --- a/submodule.c +++ b/submodule.c @@ -1445,8 +1445,6 @@ void absorb_git_dir_into_superproject(const char *prefix, /* Not populated? */ if (!sub_git_dir) { - char *real_new_git_dir; - const char *new_git_dir; const struct submodule *sub; if (err_code == READ_GITFILE_ERR_STAT_FAILED) { @@ -1469,13 +1467,8 @@ void absorb_git_dir_into_superproject(const char *prefix, sub = submodule_from_path(null_sha1, path); if (!sub) die(_("could not lookup name for submodule '%s'"), path); - new_git_dir = git_path("modules/%s", sub->name); - if (safe_create_leading_directories_const(new_git_dir) < 0) - die(_("could not create directory '%s'"), new_git_dir); - real_new_git_dir = real_pathdup(new_git_dir); - connect_work_tree_and_git_dir(path, real_new_git_dir); - - free(real_new_git_dir); + connect_work_tree_and_git_dir(path, + git_path("modules/%s", sub->name)); } else { /* Is it already absorbed into the superprojects git dir? */ char *real_sub_git_dir = real_pathdup(sub_git_dir); -- 2.12.0.192.gbdb9d28a5 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 2/2] submodule--helper.c: remove duplicate code 2017-03-09 1:27 ` [PATCH v3 0/2] Remove duplicate code from module_clone() Valery Tolstov 2017-03-09 1:27 ` [PATCH v3 1/2] connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov @ 2017-03-09 1:27 ` Valery Tolstov 2017-03-09 18:18 ` Brandon Williams 2017-03-09 22:54 ` Valery Tolstov 1 sibling, 2 replies; 24+ messages in thread From: Valery Tolstov @ 2017-03-09 1:27 UTC (permalink / raw) To: git; +Cc: bmwill, sbeller, me, gitster Remove code fragment from module_clone that duplicates functionality of connect_work_tree_and_git_dir in dir.c Signed-off-by: Valery Tolstov <me@vtolstov.org> --- builtin/submodule--helper.c | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 899dc334e..86bafe166 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -579,9 +579,7 @@ static int module_clone(int argc, const char **argv, const char *prefix) const char *name = NULL, *url = NULL, *depth = NULL; int quiet = 0; int progress = 0; - FILE *submodule_dot_git; char *p, *path = NULL, *sm_gitdir; - struct strbuf rel_path = STRBUF_INIT; struct strbuf sb = STRBUF_INIT; struct string_list reference = STRING_LIST_INIT_NODUP; char *sm_alternate = NULL, *error_strategy = NULL; @@ -653,27 +651,12 @@ static int module_clone(int argc, const char **argv, const char *prefix) strbuf_reset(&sb); } - /* Write a .git file in the submodule to redirect to the superproject. */ - strbuf_addf(&sb, "%s/.git", path); - if (safe_create_leading_directories_const(sb.buf) < 0) - die(_("could not create leading directories of '%s'"), sb.buf); - submodule_dot_git = fopen(sb.buf, "w"); - if (!submodule_dot_git) - die_errno(_("cannot open file '%s'"), sb.buf); - - fprintf_or_die(submodule_dot_git, "gitdir: %s\n", - relative_path(sm_gitdir, path, &rel_path)); - if (fclose(submodule_dot_git)) - die(_("could not close file %s"), sb.buf); - strbuf_reset(&sb); - strbuf_reset(&rel_path); + /* Connect module worktree and git dir */ + connect_work_tree_and_git_dir(path, sm_gitdir); - /* Redirect the worktree of the submodule in the superproject's config */ p = git_pathdup_submodule(path, "config"); if (!p) die(_("could not get submodule directory for '%s'"), path); - git_config_set_in_file(p, "core.worktree", - relative_path(path, sm_gitdir, &rel_path)); /* setup alternateLocation and alternateErrorStrategy in the cloned submodule if needed */ git_config_get_string("submodule.alternateLocation", &sm_alternate); @@ -689,7 +672,6 @@ static int module_clone(int argc, const char **argv, const char *prefix) free(error_strategy); strbuf_release(&sb); - strbuf_release(&rel_path); free(sm_gitdir); free(path); free(p); -- 2.12.0.192.gbdb9d28a5 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/2] submodule--helper.c: remove duplicate code 2017-03-09 1:27 ` [PATCH v3 2/2] submodule--helper.c: remove duplicate code Valery Tolstov @ 2017-03-09 18:18 ` Brandon Williams 2017-03-10 19:42 ` Junio C Hamano 2017-03-09 22:54 ` Valery Tolstov 1 sibling, 1 reply; 24+ messages in thread From: Brandon Williams @ 2017-03-09 18:18 UTC (permalink / raw) To: Valery Tolstov; +Cc: git, sbeller, gitster On 03/09, Valery Tolstov wrote: > Remove code fragment from module_clone that duplicates functionality > of connect_work_tree_and_git_dir in dir.c > > Signed-off-by: Valery Tolstov <me@vtolstov.org> Looks good. -- Brandon Williams ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/2] submodule--helper.c: remove duplicate code 2017-03-09 18:18 ` Brandon Williams @ 2017-03-10 19:42 ` Junio C Hamano 2017-03-10 19:49 ` Stefan Beller 0 siblings, 1 reply; 24+ messages in thread From: Junio C Hamano @ 2017-03-10 19:42 UTC (permalink / raw) To: Brandon Williams; +Cc: Valery Tolstov, git, sbeller Brandon Williams <bmwill@google.com> writes: > On 03/09, Valery Tolstov wrote: >> Remove code fragment from module_clone that duplicates functionality >> of connect_work_tree_and_git_dir in dir.c >> >> Signed-off-by: Valery Tolstov <me@vtolstov.org> > > Looks good. I'll queue with your Reviewed-by: added. If sb/checkout-recurse-submodules is going to be rerolled, I'd appreciate if it includes this patch inserted at an appropriate place in the series, instead of me having to remember re-applying this patch every time it happens. Thanks. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/2] submodule--helper.c: remove duplicate code 2017-03-10 19:42 ` Junio C Hamano @ 2017-03-10 19:49 ` Stefan Beller 2017-03-10 20:40 ` Junio C Hamano 0 siblings, 1 reply; 24+ messages in thread From: Stefan Beller @ 2017-03-10 19:49 UTC (permalink / raw) To: Junio C Hamano; +Cc: Brandon Williams, Valery Tolstov, git@vger.kernel.org On Fri, Mar 10, 2017 at 11:42 AM, Junio C Hamano <gitster@pobox.com> wrote: > Brandon Williams <bmwill@google.com> writes: > >> On 03/09, Valery Tolstov wrote: >>> Remove code fragment from module_clone that duplicates functionality >>> of connect_work_tree_and_git_dir in dir.c >>> >>> Signed-off-by: Valery Tolstov <me@vtolstov.org> >> >> Looks good. > > I'll queue with your Reviewed-by: added. > > If sb/checkout-recurse-submodules is going to be rerolled, I'd > appreciate if it includes this patch inserted at an appropriate > place in the series, instead of me having to remember re-applying > this patch every time it happens. Instead of mixing these two series, can you just take Valerys series as is, and sb/checkout-recurse-submodules builds on top of that when rerolled? Thanks, Stefan > > Thanks. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/2] submodule--helper.c: remove duplicate code 2017-03-10 19:49 ` Stefan Beller @ 2017-03-10 20:40 ` Junio C Hamano 2017-03-10 20:48 ` Stefan Beller 0 siblings, 1 reply; 24+ messages in thread From: Junio C Hamano @ 2017-03-10 20:40 UTC (permalink / raw) To: Stefan Beller; +Cc: Brandon Williams, Valery Tolstov, git@vger.kernel.org Stefan Beller <sbeller@google.com> writes: > On Fri, Mar 10, 2017 at 11:42 AM, Junio C Hamano <gitster@pobox.com> wrote: >> Brandon Williams <bmwill@google.com> writes: >> >>> On 03/09, Valery Tolstov wrote: >>>> Remove code fragment from module_clone that duplicates functionality >>>> of connect_work_tree_and_git_dir in dir.c >>>> >>>> Signed-off-by: Valery Tolstov <me@vtolstov.org> >>> >>> Looks good. >> >> I'll queue with your Reviewed-by: added. >> >> If sb/checkout-recurse-submodules is going to be rerolled, I'd >> appreciate if it includes this patch inserted at an appropriate >> place in the series, instead of me having to remember re-applying >> this patch every time it happens. > > Instead of mixing these two series, can you just take Valerys series as is, > and sb/checkout-recurse-submodules builds on top of that when rerolled? That's fine by me, too, but that still means I need to keep an eye on two independent topics that interact each other. Is a single patch 2/2 that important to be on a separate topic? Expressed in another way, is it expected that sb/checkout-recurse-submodules would take forever to mature relative to these two patches? ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/2] submodule--helper.c: remove duplicate code 2017-03-10 20:40 ` Junio C Hamano @ 2017-03-10 20:48 ` Stefan Beller 0 siblings, 0 replies; 24+ messages in thread From: Stefan Beller @ 2017-03-10 20:48 UTC (permalink / raw) To: Junio C Hamano; +Cc: Brandon Williams, Valery Tolstov, git@vger.kernel.org On Fri, Mar 10, 2017 at 12:40 PM, Junio C Hamano <gitster@pobox.com> wrote: > Stefan Beller <sbeller@google.com> writes: > >> On Fri, Mar 10, 2017 at 11:42 AM, Junio C Hamano <gitster@pobox.com> wrote: >>> Brandon Williams <bmwill@google.com> writes: >>> >>>> On 03/09, Valery Tolstov wrote: >>>>> Remove code fragment from module_clone that duplicates functionality >>>>> of connect_work_tree_and_git_dir in dir.c >>>>> >>>>> Signed-off-by: Valery Tolstov <me@vtolstov.org> >>>> >>>> Looks good. >>> >>> I'll queue with your Reviewed-by: added. >>> >>> If sb/checkout-recurse-submodules is going to be rerolled, I'd >>> appreciate if it includes this patch inserted at an appropriate >>> place in the series, instead of me having to remember re-applying >>> this patch every time it happens. >> >> Instead of mixing these two series, can you just take Valerys series as is, >> and sb/checkout-recurse-submodules builds on top of that when rerolled? > > That's fine by me, too, but that still means I need to keep an eye > on two independent topics that interact each other. Is a single > patch 2/2 that important to be on a separate topic? Expressed in > another way, is it expected that sb/checkout-recurse-submodules > would take forever to mature relative to these two patches? Using the times and number of rerolls this has been around, it is a not unreasonable to estimate sb/checkout-... will take longer than this code deduplication patch. Thanks, Stefan ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/2] submodule--helper.c: remove duplicate code 2017-03-09 1:27 ` [PATCH v3 2/2] submodule--helper.c: remove duplicate code Valery Tolstov 2017-03-09 18:18 ` Brandon Williams @ 2017-03-09 22:54 ` Valery Tolstov 1 sibling, 0 replies; 24+ messages in thread From: Valery Tolstov @ 2017-03-09 22:54 UTC (permalink / raw) To: git; +Cc: sbeller, me, gitster, bmwill As remainder. It is better if only [PATCH v3 2/2] is taken, on top the patch from here https://public-inbox.org/git/20170309221543.15897-8-sbeller@google.com/ The [PATCH v3 1/2] is just a copy of latter. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 0/2] Remove duplicate code from module_clone() 2017-03-09 0:03 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Valery Tolstov 2017-03-09 0:03 ` [PATCH v2 1/2] connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov 2017-03-09 0:03 ` [PATCH v2 2/2] submodule--helper.c: remove duplicate code Valery Tolstov @ 2017-03-09 0:28 ` Brandon Williams 2017-03-09 0:56 ` Valery Tolstov 2 siblings, 1 reply; 24+ messages in thread From: Brandon Williams @ 2017-03-09 0:28 UTC (permalink / raw) To: Valery Tolstov; +Cc: git, sbeller, gitster On 03/09, Valery Tolstov wrote: > > Then the next step (as outlined by Documentation/SubmittingPatches) > > is to figure out how to best present this to the mailing list; I think the best > > way is to send out a patch series consisting of both of these 2 patches, > > the "connect_work_tree_and_git_dir: safely create leading directories," > > first and then your deduplication patch. > > Combined two patches > > Stefan Beller (1): > connect_work_tree_and_git_dir: safely create leading directories It looks like this patch is apart of Stefan's checkout series. So I was slightly confused when first looking at this patch since I'd seen it before. The usual protocol would be to rebase off of Stefan's series and build on that (assuming you have a dependency against his series), indicating that you are doing as such in your cover letter. Though what you have here should hopefully give the maintainer enough context to know where to put it, so you should be good :) > > Valery Tolstov (1): > submodule--helper.c: remove duplicate code > > builtin/submodule--helper.c | 20 ++------------------ > dir.c | 32 +++++++++++++++++++++----------- > submodule.c | 11 ++--------- > 3 files changed, 25 insertions(+), 38 deletions(-) > > -- > 2.12.0.192.gbdb9d28a5 > -- Brandon Williams ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Re: [PATCH v2 0/2] Remove duplicate code from module_clone() 2017-03-09 0:28 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Brandon Williams @ 2017-03-09 0:56 ` Valery Tolstov 2017-03-09 18:19 ` Brandon Williams 0 siblings, 1 reply; 24+ messages in thread From: Valery Tolstov @ 2017-03-09 0:56 UTC (permalink / raw) To: bmwill; +Cc: git, sbeller, me, gitster > The usual protocol would be to rebase off of Stefan's series and build > on that (assuming you have a dependency against his series), indicating > that you are doing as such in your cover letter. So, should I send only my patch, or current format (patch and dependency) is acceptalbe? Regards, Valery Tolstov ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 0/2] Remove duplicate code from module_clone() 2017-03-09 0:56 ` Valery Tolstov @ 2017-03-09 18:19 ` Brandon Williams 0 siblings, 0 replies; 24+ messages in thread From: Brandon Williams @ 2017-03-09 18:19 UTC (permalink / raw) To: Valery Tolstov; +Cc: git, sbeller, gitster On 03/09, Valery Tolstov wrote: > > The usual protocol would be to rebase off of Stefan's series and build > > on that (assuming you have a dependency against his series), indicating > > that you are doing as such in your cover letter. > > So, should I send only my patch, or current format (patch and dependency) > is acceptalbe? What you did here should be fine. I was just pointing that out for future series that you send out to the list. -- Brandon Williams ^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2017-03-10 20:48 UTC | newest] Thread overview: 24+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-03-08 17:44 [PATCH] submodule--helper.c: remove duplicate code me 2017-03-08 18:53 ` Stefan Beller 2017-03-08 19:59 ` Valery Tolstov 2017-03-08 20:25 ` Stefan Beller 2017-03-08 23:05 ` Valery Tolstov 2017-03-08 23:15 ` Stefan Beller 2017-03-08 23:24 ` Junio C Hamano 2017-03-08 23:34 ` Stefan Beller 2017-03-09 0:03 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Valery Tolstov 2017-03-09 0:03 ` [PATCH v2 1/2] connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov 2017-03-09 0:03 ` [PATCH v2 2/2] submodule--helper.c: remove duplicate code Valery Tolstov 2017-03-09 0:38 ` Brandon Williams 2017-03-09 1:27 ` [PATCH v3 0/2] Remove duplicate code from module_clone() Valery Tolstov 2017-03-09 1:27 ` [PATCH v3 1/2] connect_work_tree_and_git_dir: safely create leading directories Valery Tolstov 2017-03-09 1:27 ` [PATCH v3 2/2] submodule--helper.c: remove duplicate code Valery Tolstov 2017-03-09 18:18 ` Brandon Williams 2017-03-10 19:42 ` Junio C Hamano 2017-03-10 19:49 ` Stefan Beller 2017-03-10 20:40 ` Junio C Hamano 2017-03-10 20:48 ` Stefan Beller 2017-03-09 22:54 ` Valery Tolstov 2017-03-09 0:28 ` [PATCH v2 0/2] Remove duplicate code from module_clone() Brandon Williams 2017-03-09 0:56 ` Valery Tolstov 2017-03-09 18:19 ` Brandon Williams
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 NNTP newsgroup(s).