git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Sam McKelvie <sammck@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] submodule: Alllow staged changes for get_superproject_working_tree
Date: Thu, 27 Sep 2018 17:30:21 -0700	[thread overview]
Message-ID: <D09E2583-BD1D-4C56-9C19-6B1E97CEEDAA@gmail.com> (raw)
In-Reply-To: <xmqqbm8ifvka.fsf@gitster-ct.c.googlers.com>

All of your comments seem reasonable; however, since the patch was signed off by Stefan it
Is unclear to me whether I should submit another patch or what. I apologize for not being
facile with the patching workflow.

> On Sep 27, 2018, at 3:02 PM, Junio C Hamano <gitster@pobox.com> wrote:
> 
> Sam McKelvie <sammck@gmail.com> writes:
> 
>> Subject: Re: [PATCH] submodule: Alllow staged changes for get_superproject_working_tree
> 
> s/Alllow/allow/;
> 

Ok, no caps on first letter of subject.

>> Invoking 'git rev-parse --show-superproject-working-tree' exits with
>> 
>>    "fatal: BUG: returned path string doesn't match cwd?"
>> 
>> when the superproject has an unmerged entry for the current submodule,
>> instead of displaying the superproject's working tree.
>> 
>> The problem is due to the fact that when a merge of the submodule reference
>> is in progress, "git ls-files --stage —full-name <submodule-relative-path>”
>> returns three seperate entries for the submodule (one for each stage) rather
>> than a single entry; e.g.,
>> 
>> $ git ls-files --stage --full-name submodule-child-test
>> 160000 dbbd2766fa330fa741ea59bb38689fcc2d283ac5 1       submodule-child-test
>> 160000 f174d1dbfe863a59692c3bdae730a36f2a788c51 2       submodule-child-test
>> 160000 e6178f3a58b958543952e12824aa2106d560f21d 3       submodule-child-test
>> 
>> The code in get_superproject_working_tree() expected exactly one entry to
>> be returned; this patch makes it use the first entry if multiple entries
>> are returned.
>> 
>> Test t1500-rev-parse is extended to cover this case.
>> 
>> Signed-off-by: Sam McKelvie <sammck@gmail.com>
>> ---
>> submodule.c          |  2 +-
>> t/t1500-rev-parse.sh | 17 ++++++++++++++++-
>> 2 files changed, 17 insertions(+), 2 deletions(-)
>> 
>> diff --git a/submodule.c b/submodule.c
>> index 33de6ee5f..5b9d5ad7e 100644
>> --- a/submodule.c
>> +++ b/submodule.c
>> @@ -1885,7 +1885,7 @@ const char *get_superproject_working_tree(void)
>> 		 * We're only interested in the name after the tab.
>> 		 */
>> 		super_sub = strchr(sb.buf, '\t') + 1;
>> -		super_sub_len = sb.buf + sb.len - super_sub - 1;
>> +		super_sub_len = strlen(super_sub);
> 
> As we are reading from "ls-files -z -s", we know that the name is
> terminated with NUL, so we can just use strlen().  Good.
>> 
>> 		if (super_sub_len > cwd_len ||
>> 		    strcmp(&cwd[cwd_len - super_sub_len], super_sub))
>> diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh
>> index 5c715fe2c..b774cafc5 100755
>> --- a/t/t1500-rev-parse.sh
>> +++ b/t/t1500-rev-parse.sh
>> @@ -134,7 +134,6 @@ test_expect_success 'rev-parse --is-shallow-repository in non-shallow repo' '
>> test_expect_success 'showing the superproject correctly' '
>> 	git rev-parse --show-superproject-working-tree >out &&
>> 	test_must_be_empty out &&
>> -
> 
> I have a feeling that this break made the series of tests in this
> block easier to follow.  Shouldn't we be moving in the other
> direction, namely …
> 
That’s fair.


>> 	test_create_repo super &&
>> 	test_commit -C super test_commit &&
>> 	test_create_repo sub &&
>> @@ -142,6 +141,22 @@ test_expect_success 'showing the superproject correctly' '
>> 	git -C super submodule add ../sub dir/sub &&
>> 	echo $(pwd)/super >expect  &&
>> 	git -C super/dir/sub rev-parse --show-superproject-working-tree >out &&
>> +	test_cmp expect out &&
> 
> Here is an end of one subtest, deserves to have a break like the above.

OK

> 
>> +	test_commit -C super submodule_add &&
>> +	git -C super checkout -b branch1 &&
>> +	git -C super/dir/sub checkout -b branch1 &&
>> +	test_commit -C super/dir/sub branch1_commit &&
>> +	git -C super add dir/sub &&
>> +	test_commit -C super branch1_commit &&
>> +	git -C super checkout master &&
>> +	git -C super checkout -b branch2 &&
>> +	git -C super/dir/sub checkout master &&
>> +	git -C super/dir/sub checkout -b branch2 &&
>> +	test_commit -C super/dir/sub branch2_commit &&
>> +	git -C super add dir/sub &&
>> +	test_commit -C super branch2_commit &&
>> +	test_must_fail git -C super merge branch1 &&
> 
> and all of the above is just a set-up for another subtest, so a
> solid block of text like we see in the above is good.
> 
> 	Side note: there are a few of
> 
> 		git -C $there checkout $onebranch &&
> 		git -C $there checkout -b $anotherbranch &&
> 
> 	as recurring pattern.  Shouldn't they be more like a single
> 	liner
> 
> 		git -C $there checkout -b $anotherbranch $onebranch &&
> 
> 	?  It wasn't clear if the split was an attempt to hide some
> 	breakage (e.g. "checkout -b B A" did not work but "checkout
> 	A && checkout -b B" did) or just being verbose because the
> 	author is not used to "checkout -b B A" form.

You’re right, the two forms are equivalent and the single-line version is simpler.

> 
>> +	git -C super/dir/sub rev-parse --show-superproject-working-tree >out &&
>> 	test_cmp expect out
>> '
> 
> Thanks.

Thank you.


  reply	other threads:[~2018-09-28  0:30 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-27 18:10 [PATCH] submodule: Alllow staged changes for get_superproject_working_tree Sam McKelvie
2018-09-27 19:42 ` Stefan Beller
2018-09-27 22:02 ` Junio C Hamano
2018-09-28  0:30   ` Sam McKelvie [this message]
2018-09-28  1:43     ` Junio C Hamano
2018-09-28  3:29       ` Sam McKelvie
2018-09-28 18:00         ` Junio C Hamano
2018-09-28 21:59           ` Sam McKelvie
2018-09-28 22:25             ` Junio C Hamano

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=D09E2583-BD1D-4C56-9C19-6B1E97CEEDAA@gmail.com \
    --to=sammck@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public 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).