From: Junio C Hamano <gitster@pobox.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: Git List <git@vger.kernel.org>,
Martin von Zweigbergk <martinvonz@gmail.com>,
John Keeping <john@keeping.me.uk>,
Jonathan Nieder <jrnieder@gmail.com>
Subject: Re: [PATCH 2/2] merge-base: "--reflog" mode finds fork point from reflog entries
Date: Thu, 24 Oct 2013 15:13:24 -0700 [thread overview]
Message-ID: <xmqqwql2l3ln.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <CAPig+cQ2tWFXX-RYnUrHEZCaqaPV6ZwgoPfiNPv9P1jFNTGEYg@mail.gmail.com> (Eric Sunshine's message of "Thu, 24 Oct 2013 17:43:16 -0400")
Eric Sunshine <sunshine@sunshineco.com> writes:
> On Thu, Oct 24, 2013 at 5:26 PM, Junio C Hamano <gitster@pobox.com> wrote:
>> Eric Sunshine <sunshine@sunshineco.com> writes:
>>
>>> On Thu, Oct 24, 2013 at 3:11 PM, Junio C Hamano <gitster@pobox.com> wrote:
>>>> diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh
>>>> index f80bba8..3a1abee 100755
>>>> --- a/t/t6010-merge-base.sh
>>>> +++ b/t/t6010-merge-base.sh
>>>> @@ -230,4 +230,31 @@ test_expect_success 'criss-cross merge-base for octopus-step' '
>>>> test_cmp expected.sorted actual.sorted
>>>> '
>>>>
>>>> +test_expect_success 'using reflog to find the fork point' '
>>>> + git reset --hard &&
>>>> + git checkout -b base $E &&
>>>> + (
>>>> + for count in 1 2 3 4 5
>>>> + do
>>>> + git commit --allow-empty -m "Base commit #$count" &&
>>>> + git rev-parse HEAD >expect$count &&
>>>> + git checkout -B derived &&
>>>> + git commit --allow-empty -m "Derived #$count" &&
>>>> + git rev-parse HEAD >derived$count &&
>>>> + git checkout base &&
>>>> + count=$(( $count + 1 )) || exit 1
>>>> + done
>>>
>>> Did you want && here?
>>
>> No, I did not. Can't you tell from the fact that I didn't put one
>> there ;-)?
>>
>> It does not hurt to have one there, but it is not necessary.
>>
>> Because the loop itself does not &&-cascade from anything else, the
>> only case anything after "done &&" would be skipped and making the
>> whole thing fail would be when anything inside the loop fails, but
>> we already "exit 1" to terminate the whole subprocess in that case,
>> so we will not continue past the loop.
>
> I didn't read inside the loop closely enough to see that. Sorry
> for the noise.
Heh, you helped me realize that the above was suboptimal, and it
wasn't a noise ;-)
We could do it this way without the subshell and the exit, I would
think.
test_expect_success 'using reflog to find the fork point' '
git reset --hard &&
git checkout -b base $E &&
for count in 1 2 3 4 5
do
git commit --allow-empty -m "Base commit #$count" &&
git rev-parse HEAD >expect$count &&
git checkout -B derived &&
git commit --allow-empty -m "Derived #$count" &&
git rev-parse HEAD >derived$count &&
git checkout base &&
count=$(( $count + 1 )) || break
done &&
for count in 1 2 3 4 5
do
git merge-base --reflog base $(cat derived$count) >actual &&
test_cmp expect$count actual || break
done &&
# check defaulting to HEAD
git merge-base --reflog base >actual &&
test_cmp expect5 actual
'
To the earlier code, somebody could add
(
+ more setup code &&
+ yet more setup code &&
for count in 1 2 3 4 5
inside the subshell and we would fail to notice fairlure from the
new setup code if we didn't have && after the first "done". There
is much less risk of that kind of breakage if we did the loop
without subshell and exit and instead with the usual &&-cascade.
Thanks.
next prev parent reply other threads:[~2013-10-24 22:13 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-16 18:53 [PATCH] rebase: use reflog to find common base with upstream John Keeping
2013-10-16 19:24 ` Jonathan Nieder
2013-10-16 19:44 ` John Keeping
2013-10-21 5:03 ` Martin von Zweigbergk
2013-10-21 11:24 ` John Keeping
2013-10-22 6:24 ` Martin von Zweigbergk
2013-10-24 19:04 ` Junio C Hamano
2013-10-24 19:11 ` [PATCH 0/2] finding the fork point from reflog entries Junio C Hamano
2013-10-24 19:11 ` [PATCH 1/2] merge-base: use OPT_CMDMODE and clarify the command line parsing Junio C Hamano
2013-10-24 19:11 ` [PATCH 2/2] merge-base: "--reflog" mode finds fork point from reflog entries Junio C Hamano
2013-10-24 21:01 ` Eric Sunshine
2013-10-24 21:26 ` Junio C Hamano
2013-10-24 21:43 ` Eric Sunshine
2013-10-24 22:13 ` Junio C Hamano [this message]
2013-10-24 22:21 ` [PATCH v2 " Junio C Hamano
2013-10-25 7:12 ` Johannes Sixt
2013-10-25 8:09 ` John Keeping
2013-10-25 8:17 ` Johannes Sixt
2013-10-25 16:53 ` Junio C Hamano
2013-10-25 21:38 ` [PATCH v3 2/2] merge-base: teach "--fork-point" mode Junio C Hamano
2013-10-25 21:56 ` Eric Sunshine
2013-10-26 5:15 ` Martin von Zweigbergk
2013-10-28 14:47 ` Junio C Hamano
2013-10-26 9:00 ` John Keeping
2013-10-28 19:13 ` Junio C Hamano
2013-10-29 8:51 ` John Keeping
2013-10-29 20:11 ` Junio C Hamano
2013-10-24 20:54 ` [PATCH 0/2] finding the fork point from reflog entries John Keeping
2013-10-24 21:20 ` Junio C Hamano
2013-10-24 21:31 ` John Keeping
2013-10-24 21:40 ` John Keeping
2013-10-24 21:50 ` John Keeping
2013-10-25 2:46 ` Junio C Hamano
2013-10-22 5:40 ` [PATCH] rebase: use reflog to find common base with upstream Martin von Zweigbergk
2013-10-24 20:26 ` John Keeping
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqwql2l3ln.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=john@keeping.me.uk \
--cc=jrnieder@gmail.com \
--cc=martinvonz@gmail.com \
--cc=sunshine@sunshineco.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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.