From: Michael J Gruber <git@drmicha.warpmail.net>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Jeff King <peff@peff.net>
Subject: Re: [PATCH 3/3] rev-list --min-parents,--max-parents: doc and test and completion
Date: Mon, 21 Mar 2011 09:52:45 +0100 [thread overview]
Message-ID: <4D8711DD.2040407@drmicha.warpmail.net> (raw)
In-Reply-To: <20110318211418.GA23407@elie>
Jonathan Nieder venit, vidit, dixit 18.03.2011 22:14:
> Hi,
>
> Michael J Gruber wrote:
>
>> [Subject: rev-list --min-parents,--max-parents: doc and test and completion]
>>
>> This also adds test for "--merges" and "--no-merges" which we did not
>> have so far.
>
> Minor nit: the life of reviewers is easier when the documentation and
> tests are squashed with the implementation (or if anything, the
> documentation comes first) so they can look at what the code tries to
> do before seeing how it does it.
Come on, with a cover-letter saying doc and tests are in 3/3, how much
effort is it to read that before 1/3 if you care?
The tests are bogus before the code and the doc pointless before it.
Squashing 1 and 3 is okay, of course. For my own digestion, smaller
bites are better.
>> --- a/t/t6009-rev-list-parent.sh
>> +++ b/t/t6009-rev-list-parent.sh
>> @@ -1,6 +1,6 @@
> [...]
>> -test_description='properly cull all ancestors'
>> +test_description='ancestor culling and limitting by parent number'
>
> sp: limiting
>
> Thanks for updating the description. It's easy to forget.
I would have preferred to assign an extra test number (since the
relation between the above is a bit weak) but the numbers are all used
up in that range.
>
>> @@ -28,4 +28,72 @@ test_expect_success 'one is ancestor of others and should not be shown' '
> [...]
>> +check_revlist () {
>> + > expect &&
>> + for c in $2; do echo "$c" >> expect; done &&
>> + git rev-list $1 master | git name-rev --name-only --tags --stdin >actual &&
>> + test_cmp expect actual
>> +}
>
> Pedantic nits:
>
> * if global functions are defined before all test_expect_success stanzas,
> (1) it is easier to reuse them in tests throughout the script;
> (2) it is easy to see at a glance what primitives a test script
> will be using when getting acquainted with it and what
> syntax might be worth lifting to test-lib or other test
> scripts when shopping for that
> * style: no space between >redirection operators and their argument
> for consistency (maybe because > &2 is a syntax error)
> * might be simpler to pass one rev per argument. Like so:
>
> rev_list_args=$1 &&
> shift &&
> printf '%s\n' "$@" >expect &&
> git rev-list $rev_list_args master ...
>
> Avoiding the for loop means errors from 'echo' before the last
> iteration are not ignored; a more verbose way to write the same
Do we really need to safe-guard echo and prints?
> thing is
>
> for commit
> do
> printf '%s\n' "$commit" ||
> return
> done >expect &&
> git rev-list ...
> * this does not catch errors from rev-list! how about
>
> git rev-list $rev_list_args master >rev-list &&
> git name-rev ... <rev-list >actual &&
> test_cmp expect actual
Thanks for both of the above, that makes things much better. Although I
have to treat the case with empty rev-list specially now, or use the
verbose version.
>
> Junio will probably complain that this is not meant to be a test
> for name-rev; indeed, filling "expect" by computing commit names
> might be even better (because faster).
Well, we do this in other places as well, and it makes the test much
more readable. Alternatively, I could use rev-parse on the args, which
is faster than name-rev on the rev-list output. That makes it less
readable in case a test breaks, though. Anyways, I'll go for that.
>
>> +test_expect_success 'rev-list roots' '
>> +test_expect_success 'rev-list no merges' '
>> +test_expect_success 'rev-list no octopusses' '
>> +test_expect_success 'rev-list no roots' '
>> +test_expect_success 'rev-list merges' '
>
> Neat. :)
>
>
>> +test_expect_success 'rev-list octopus' '
>> +
>> + check_revlist "--min-parents=3" "octopus"
>> +'
>
> Might make sense to check a dodecapus (with --min-parents=3 still) as
> well.
Dodeka, really? I leave that to you.
I might add a tetrapus, though.
>
>> +test_expect_success 'rev-list override and infinities' '
>
> Ah, here's the test I suggested in reply to patch 1. But this is not
> about overriding but the lack thereof, no? So I'd be happier reading
> something like
>
> test_expect_success '--no-merges --merges yields the empty set' '
> check_revlist "--no-merges --merges" &&
> check_revlist "--min-parents=2 --no-merges"
> '
>
> test_expect_success 'last --max-parents wins' '
wins against? Against itself, i.e. it overrides previous occurences. But
I'll separate these.
> check_revlist "--min-parents=2 --no-merges --max-parents=3" octopus normalmerge &&
> check_revlist "--min-parents=2 --max-parents=3 --no-merges" ...
> '
>
> test_expect_success '--max-parents=infinity' '
> ...
> '
>
> test_expect_success '--min-parents=infinity' '
> ...
> '
>
> test_expect_failure '--max-parents=gobbledegood errors out' '
> ...
> '
I don't really want to parse for the string "infinity" nor go for strtol
instead of atoi. Why shouldn't something "unparseable" be 0?
Michael
next prev parent reply other threads:[~2011-03-21 8:52 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-17 11:33 [PATCH/RFD 0/2] revision.c: --merges, --no-merges and --merges-only Michael J Gruber
2011-03-17 11:33 ` [PATCH/RFD 1/2] revision.c: rename --merges to --merges-only Michael J Gruber
2011-03-17 11:33 ` [PATCH/RFD 2/2] revision.c: introduce --merges to undo --no-merges Michael J Gruber
2011-03-17 19:23 ` [PATCH/RFD 0/2] revision.c: --merges, --no-merges and --merges-only Junio C Hamano
2011-03-17 19:59 ` Jeff King
2011-03-18 7:56 ` Michael J Gruber
2011-03-18 8:22 ` Junio C Hamano
2011-03-18 8:41 ` Michael J Gruber
2011-03-18 8:56 ` Jeff King
2011-03-18 14:50 ` [PATCH 0/3] rev-list and friends: --min-parents, --max-parents Michael J Gruber
2011-03-18 14:50 ` [PATCH 1/3] revision.c: introduce --min-parents and --max-parents Michael J Gruber
2011-03-18 19:34 ` Jeff King
2011-03-21 7:31 ` Michael J Gruber
2011-03-18 20:48 ` Jonathan Nieder
2011-03-18 21:21 ` Junio C Hamano
2011-03-21 9:26 ` Michael J Gruber
2011-03-18 14:50 ` [PATCH 2/3] t6009: use test_commit() from test-lib.sh Michael J Gruber
2011-03-18 14:50 ` [PATCH 3/3] rev-list --min-parents,--max-parents: doc and test and completion Michael J Gruber
2011-03-18 19:48 ` Jeff King
2011-03-21 9:01 ` Michael J Gruber
2011-03-21 10:54 ` Jeff King
2011-03-21 12:06 ` Michael J Gruber
2011-03-21 14:54 ` Junio C Hamano
2011-03-21 14:56 ` Michael J Gruber
2011-03-21 16:47 ` Junio C Hamano
2011-03-18 21:14 ` Jonathan Nieder
2011-03-21 8:52 ` Michael J Gruber [this message]
2011-03-21 17:49 ` Jonathan Nieder
2011-03-22 7:38 ` Michael J Gruber
2011-03-18 14:54 ` [PATCH 0/3] rev-list and friends: --min-parents, --max-parents Michael J Gruber
2011-03-18 19:41 ` Jeff King
2011-03-21 7:42 ` Michael J Gruber
2011-03-21 10:14 ` [PATCHv2 " Michael J Gruber
2011-03-21 10:14 ` [PATCHv2 1/3] t6009: use test_commit() from test-lib.sh Michael J Gruber
2011-03-21 10:14 ` [PATCHv2 2/3] revision.c: introduce --min-parents and --max-parents Michael J Gruber
2011-03-21 14:04 ` Michael J Gruber
2011-03-21 17:45 ` Junio C Hamano
2011-03-21 17:58 ` Jonathan Nieder
2011-03-21 10:14 ` [PATCHv2 3/3] rev-list --min-parents,--max-parents: doc and test and completion Michael J Gruber
2011-03-21 18:45 ` Jonathan Nieder
2011-03-22 7:55 ` Michael J Gruber
2011-03-23 0:47 ` Jonathan Nieder
2011-03-21 10:56 ` [PATCHv2 0/3] rev-list and friends: --min-parents, --max-parents Jeff King
2011-03-23 9:38 ` [PATCHv3 0/5]rev-list " Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 1/5] t6009: use test_commit() from test-lib.sh Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 2/5] revision.c: introduce --min-parents and --max-parents Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 3/5] squash! " Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 4/5] rev-list --min-parents,--max-parents: doc, test and completion Michael J Gruber
2011-03-23 9:38 ` [PATCHv3 5/5] fixup! " Michael J Gruber
2011-03-23 14:48 ` [PATCHv3 0/5]rev-list and friends: --min-parents, --max-parents Jeff King
2011-03-23 17:12 ` Junio C Hamano
2011-03-23 18:06 ` Junio C Hamano
2011-03-24 8:21 ` Jonathan Nieder
2011-03-24 8:55 ` Michael J Gruber
2011-03-24 9:42 ` Jonathan Nieder
2011-08-08 1:13 ` [PATCH/RFC 0/2] test_when_finished and returning early Jonathan Nieder
2011-08-08 1:15 ` [PATCH 1/2] test: simplify return value of test_run_ Jonathan Nieder
2011-08-08 1:17 ` [PATCH 2/2] test: cope better with use of return for errors Jonathan Nieder
2011-08-09 8:46 ` Johannes Sixt
2011-08-09 15:36 ` Jeff King
2011-08-11 7:05 ` [PATCH v2] t3900: do not reference numbered arguments from the test script Johannes Sixt
2011-08-11 7:11 ` Jonathan Nieder
2011-08-11 21:49 ` Junio C Hamano
2011-08-08 1:26 ` [PATCH/RFC 0/2] test_when_finished and returning early Jeff King
2011-03-18 9:07 ` [PATCH/RFD 0/2] revision.c: --merges, --no-merges and --merges-only Jeff King
2011-03-18 9:42 ` Michael J Gruber
2011-03-18 9:54 ` Jeff King
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=4D8711DD.2040407@drmicha.warpmail.net \
--to=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
/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.