git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/3] rev-list --min-parents,--max-parents: doc and test and completion

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Mar 21, 2011, 08:52 UTC
Message-ID
<4D8711DD.2040407@drmicha.warpmail.net>
In-Reply-To
<20110318211418.GA23407@elie>
Jonathan Nieder venit, vidit, dixit 18.03.2011 22:14:
Show 13 quoted lines
> 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.

Show 10 quoted lines
>> --- 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.

Show 29 quoted lines
> 
>> @@ -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?
Show 13 quoted lines
>    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.

Show 17 quoted lines
> 
>> +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.

Show 13 quoted lines
> 
>> +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.

Show 15 quoted lines
> 		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
Previous: Jonathan NiederNext: Jonathan Nieder
Message 62 of 67 in “revision.c: --merges, --no-merges and --merges-only”
  1. 0/2 revision.c: --merges, --no-merges and --merges-onlyMichael J Gruber, Mar 17, 2011
  2. 1/2 revision.c: rename --merges to --merges-onlyMichael J Gruber, Mar 17, 2011
  3. 2/2 revision.c: introduce --merges to undo --no-mergesMichael J Gruber, Mar 17, 2011
  4. Junio C HamanoMar 17, 2011
  5. Jeff KingMar 17, 2011
  6. Michael J GruberMar 18, 2011
  7. Junio C HamanoMar 18, 2011
  8. Michael J GruberMar 18, 2011
  9. Jeff KingMar 18, 2011
  10. 0/3 rev-list and friends: --min-parents, --max-parentsMichael J Gruber, Mar 18, 2011
  11. Michael J GruberMar 18, 2011
  12. Jeff KingMar 18, 2011
  13. Michael J GruberMar 21, 2011
  14. 0/3 rev-list and friends: --min-parents, --max-parentsMichael J Gruber, Mar 21, 2011
  15. Jeff KingMar 21, 2011
  16. 0/5 rev-list and friends: --min-parents, --max-parentsMichael J Gruber, Mar 23, 2011
  17. Jeff KingMar 23, 2011
  18. Junio C HamanoMar 23, 2011
  19. Junio C HamanoMar 23, 2011
  20. Jonathan NiederMar 24, 2011
  21. Michael J GruberMar 24, 2011
  22. Jonathan NiederMar 24, 2011
  23. 0/2 test_when_finished and returning earlyJonathan Nieder, Aug 8, 2011
  24. 1/2 test: simplify return value of test_run_Jonathan Nieder, Aug 8, 2011
  25. 2/2 test: cope better with use of return for errorsJonathan Nieder, Aug 8, 2011
  26. Johannes SixtAug 9, 2011
  27. Jeff KingAug 9, 2011
  28. t3900: do not reference numbered arguments from the test scriptJohannes Sixt, Aug 11, 2011
  29. Jonathan NiederAug 11, 2011
  30. Junio C HamanoAug 11, 2011
  31. Jeff KingAug 8, 2011
  32. 1/5 t6009: use test_commit() from test-lib.shMichael J Gruber, Mar 23, 2011
  33. 2/5 revision.c: introduce --min-parents and --max-parentsMichael J Gruber, Mar 23, 2011
  34. 3/5 squash! revision.c: introduce --min-parents and --max-parentsMichael J Gruber, Mar 23, 2011
  35. 4/5 rev-list --min-parents,--max-parents: doc, test and completionMichael J Gruber, Mar 23, 2011
  36. 5/5 fixup! rev-list --min-parents,--max-parents: doc, test and completionMichael J Gruber, Mar 23, 2011
  37. 1/3 t6009: use test_commit() from test-lib.shMichael J Gruber, Mar 21, 2011
  38. 2/3 revision.c: introduce --min-parents and --max-parentsMichael J Gruber, Mar 21, 2011
  39. Michael J GruberMar 21, 2011
  40. Junio C HamanoMar 21, 2011
  41. Jonathan NiederMar 21, 2011
  42. 3/3 rev-list --min-parents,--max-parents: doc and test and completionMichael J Gruber, Mar 21, 2011
  43. Jonathan NiederMar 21, 2011
  44. Michael J GruberMar 22, 2011
  45. Jonathan NiederMar 23, 2011
  46. 1/3 revision.c: introduce --min-parents and --max-parentsMichael J Gruber, Mar 18, 2011
  47. Jeff KingMar 18, 2011
  48. Michael J GruberMar 21, 2011
  49. Jonathan NiederMar 18, 2011
  50. Junio C HamanoMar 18, 2011
  51. Michael J GruberMar 21, 2011
  52. 2/3 t6009: use test_commit() from test-lib.shMichael J Gruber, Mar 18, 2011
  53. 3/3 rev-list --min-parents,--max-parents: doc and test and completionMichael J Gruber, Mar 18, 2011
  54. Jeff KingMar 18, 2011
  55. Michael J GruberMar 21, 2011
  56. Jeff KingMar 21, 2011
  57. Michael J GruberMar 21, 2011
  58. Junio C HamanoMar 21, 2011
  59. Michael J GruberMar 21, 2011
  60. Junio C HamanoMar 21, 2011
  61. Jonathan NiederMar 18, 2011
  62. Michael J GruberMar 21, 2011
  63. Jonathan NiederMar 21, 2011
  64. Michael J GruberMar 22, 2011
  65. Jeff KingMar 18, 2011
  66. Michael J GruberMar 18, 2011
  67. Jeff KingMar 18, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.