From: Jeff King <peff@peff.net>
To: Ramkumar Ramachandra <artagnon@gmail.com>
Cc: Git List <git@vger.kernel.org>,
Junio C Hamano <gitster@pobox.com>,
Jonathan Nieder <jrnieder@gmail.com>
Subject: Re: [PATCH v4 0/6] Support triangular workflows
Date: Thu, 28 Mar 2013 11:35:47 -0400 [thread overview]
Message-ID: <20130328153547.GA3337@sigill.intra.peff.net> (raw)
In-Reply-To: <1364477202-5742-1-git-send-email-artagnon@gmail.com>
On Thu, Mar 28, 2013 at 06:56:36PM +0530, Ramkumar Ramachandra wrote:
> Jeff King (1):
> t5516 (fetch-push): drop implicit arguments from helper functions
>
> Ramkumar Ramachandra (5):
> remote.c: simplify a bit of code using git_config_string()
> t5516 (fetch-push): update test description
> remote.c: introduce a way to have different remotes for fetch/push
> remote.c: introduce remote.pushdefault
> remote.c: introduce branch.<name>.pushremote
Thanks, this iteration looks pretty good. I have one minor nit, which is
that the tests in patches 5 and 6 do things like:
> + git push &&
> + test_must_fail check_push_result up_repo $the_commit heads/master &&
> + check_push_result down_repo $the_commit heads/master
Using test_must_fail here caught my eye, because usually it is meant to
check failure of a single git command. When it (or "!", for that matter)
is used with a compound function, you end up losing robustness in corner
cases.
For example, imagine your function is:
check_foo() {
cd "$1" &&
git foo
}
and you expect in some cases that "git foo" will succeed and in some
cases it will fail. In the affirmative case (running "check_foo"), this
is robust; if any of the steps fails, the test fails.
But if you run the negative case ("test_must_fail check_foo"), you will
also fail if any of the preparatory steps fail. I.e., you wanted to say:
cd "$1" && test_must_fail git foo
but you actually said (applying De Morgan's laws):
test_must_fail cd "$1" || test_must_fail git foo
Now we probably don't expect the "cd" to fail here, but of course the
other steps can be more complicated, too. In your case, I think the
effect you are looking for is that "heads/master != $the_commit". But
note that we would also fail if "git fsck" fails in the pushed
repository, which is not what we want.
Sometimes it's annoyingly verbose to break down a compound function. But
I think in this case, you can make your tests more robust by just
checking the affirmative that the ref is still where we expect it to be,
like:
check_push_result up_repo $the_first_commit heads/master
Sorry if that was a bit long-winded. I think that practically speaking,
it is not a likely source of problems in this case. But it's an
anti-pattern in our tests that I think is worth mentioning.
-Peff
next prev parent reply other threads:[~2013-03-28 15:36 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-28 13:26 [PATCH v4 0/6] Support triangular workflows Ramkumar Ramachandra
2013-03-28 13:26 ` [PATCH 1/6] remote.c: simplify a bit of code using git_config_string() Ramkumar Ramachandra
2013-03-28 13:26 ` [PATCH 2/6] t5516 (fetch-push): update test description Ramkumar Ramachandra
2013-03-28 13:26 ` [PATCH 3/6] t5516 (fetch-push): drop implicit arguments from helper functions Ramkumar Ramachandra
2013-03-28 13:26 ` [PATCH 4/6] remote.c: introduce a way to have different remotes for fetch/push Ramkumar Ramachandra
2013-03-28 13:26 ` [PATCH 5/6] remote.c: introduce remote.pushdefault Ramkumar Ramachandra
2013-03-28 13:26 ` [PATCH 6/6] remote.c: introduce branch.<name>.pushremote Ramkumar Ramachandra
2013-03-28 15:02 ` [PATCH v4 0/6] Support triangular workflows Junio C Hamano
2013-03-28 15:35 ` Jeff King [this message]
2013-03-28 16:54 ` Junio C Hamano
2013-03-31 20:54 ` Ramkumar Ramachandra
2013-04-01 1:56 ` Junio C Hamano
2013-04-01 3:36 ` Junio C Hamano
2013-04-01 5:07 ` Junio C Hamano
2013-04-01 5:35 ` Junio C Hamano
2013-03-31 20:51 ` Ramkumar Ramachandra
2013-03-31 21:43 ` Jeff King
2013-04-01 1:50 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130328153547.GA3337@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=artagnon@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.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 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).