git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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 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).