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

Re: [PATCH 3/4] test-ref-store: tweaks to for-each-reflog-ent format

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 22, 2021, 22:31 UTC
Message-ID
<xmqqr1b7bz5v.fsf@gitster.g>
In-Reply-To
<8a1b094d54732b8b60eacb9892ab460a411bcec3.1637590855.git.gitgitgadget@gmail.com>
"Han-Wen Nienhuys via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Han-Wen Nienhuys <hanwen@google.com>
>
> Follow the reflog format more closely, so it can be used for comparing

There is no v$n designator on the title line, but I have this feeling that I've seen this patch before. More importantly, I remember that I found it unclear what you exactly mean "the" reflog format. Is that what the files backend stores on one line in its file? The reason I suspect that may be the answer is because I do not recall documenting "the" reflog format in Documentation/ and whatever we have historically been writing would be the most canonical and/or authoritative format.

> reflogs in tests without using inspecting files under .git/logs/
I agree 100% with the goal.  
It seems that one line of .git/logs/HEAD looks like
<new> SP <old> SP <user> SP '<' <email> '>' SP <time> SP <zone> HT <oneline> LF

and being able to extract a line like that for given reflog entry out of any backend in a consistent way is valuable when testing different backends.

It seems that is what the new code is writing, so perhaps the first paragraph can be clarified to indicate as such.

    We have some tests that read from files in .git/logs/ hierarchy
    when checking if correct reflog entries are created, but that is
    too specific to the files backend.  Other backends like reftable
    may not store its reflog entries in such a "one line per entry"
    format.
    Update for-each-reflog-ent test helper to produce output that
    would be identical to lines in a reflog file files backend uses.
    That way, (1) the current tests can be updated to use the test
    helper to read the reflog entries instead of (parts of) reflog
    files, and perform the same inspection for correctness, and (2)
    when the ref backend is swapped to another backend, the updated
    test can be used as-is to check the correctness.
or something along the line?
Show 19 quoted lines
> Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
> ---
>  t/helper/test-ref-store.c | 5 ++---
>  t/t1405-main-ref-store.sh | 1 +
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/t/helper/test-ref-store.c b/t/helper/test-ref-store.c
> index b314b81a45b..0fcad9b3812 100644
> --- a/t/helper/test-ref-store.c
> +++ b/t/helper/test-ref-store.c
> @@ -151,9 +151,8 @@ static int each_reflog(struct object_id *old_oid, struct object_id *new_oid,
>  		       const char *committer, timestamp_t timestamp,
>  		       int tz, const char *msg, void *cb_data)
>  {
> -	printf("%s %s %s %"PRItime" %d %s\n",
> -	       oid_to_hex(old_oid), oid_to_hex(new_oid),
> -	       committer, timestamp, tz, msg);
> +	printf("%s %s %s %" PRItime " %+05d\t%s\n", oid_to_hex(old_oid),
> +	       oid_to_hex(new_oid), committer, timestamp, tz, msg);

Looks good to me. We might want to make the printf format conditional to add \t%s only when msg is not empty, though. Hopefully such a change would follow the reflog format even more closely to make 4/4 unnecessary?

Show 12 quoted lines
>  	return 0;
>  }
>  
> diff --git a/t/t1405-main-ref-store.sh b/t/t1405-main-ref-store.sh
> index a600bedf2cd..76b15458409 100755
> --- a/t/t1405-main-ref-store.sh
> +++ b/t/t1405-main-ref-store.sh
> @@ -94,6 +94,7 @@ test_expect_success 'for_each_reflog_ent()' '
>  
>  test_expect_success 'for_each_reflog_ent_reverse()' '
>  	$RUN for-each-reflog-ent-reverse HEAD >actual &&
> +	head -n1 actual | grep recreate-main &&

I am not sure how this new test helps validate the change to the code.

What was different in the old output was that the timezone was not in %+05d format, and the field separator before the log message was not HT. So if this grepped for HT or +0000 to make sure we are using the format that is close to what actually is stored in the files, I would understand this change, but it is unclear what it proves to make sure that the oldest entry has recreate-main.

In fact, with the code part of the patch reverted, this new test seems to pass.

>  	tail -n1 actual | grep one
>  '
Previous: Han-Wen Nienhuys via GitGitGadgetNext: Han-Wen Nienhuys
Message 28 of 60 in “Inspect reflog data programmatically in more tests”
  1. 0/4 Inspect reflog data programmatically in more testsHan-Wen Nienhuys via GitGitGadget, Nov 22, 2021
  2. 1/4 show-branch: show reflog messageHan-Wen Nienhuys via GitGitGadget, Nov 22, 2021
  3. Junio C HamanoNov 22, 2021
  4. Bagas SanjayaNov 23, 2021
  5. Elijah NewrenNov 23, 2021
  6. 2/4 refs: trim newline from reflog messageHan-Wen Nienhuys via GitGitGadget, Nov 22, 2021
  7. Junio C HamanoNov 22, 2021
  8. Han-Wen NienhuysNov 23, 2021
  9. Junio C HamanoNov 23, 2021
  10. Han-Wen NienhuysNov 23, 2021
  11. Junio C HamanoNov 23, 2021
  12. Han-Wen NienhuysNov 24, 2021
  13. Junio C HamanoNov 24, 2021
  14. Han-Wen NienhuysNov 24, 2021
  15. Junio C HamanoNov 24, 2021
  16. Han-Wen NienhuysNov 25, 2021
  17. Junio C HamanoNov 29, 2021
  18. Junio C HamanoNov 24, 2021
  19. Han-Wen NienhuysNov 24, 2021
  20. Re* [PATCH 2/4] refs: trim newline from reflog messageJunio C Hamano, Nov 26, 2021
  21. Ævar Arnfjörð BjarmasonNov 28, 2021
  22. Junio C HamanoNov 28, 2021
  23. Re* [PATCH 2/4] refs: trim newline from reflog messageJunio C Hamano, Nov 28, 2021
  24. Ævar Arnfjörð BjarmasonNov 29, 2021
  25. Ævar Arnfjörð BjarmasonNov 23, 2021
  26. Han-Wen NienhuysNov 23, 2021
  27. 3/4 test-ref-store: tweaks to for-each-reflog-ent formatHan-Wen Nienhuys via GitGitGadget, Nov 22, 2021
  28. Junio C HamanoNov 22, 2021
  29. Han-Wen NienhuysNov 23, 2021
  30. Junio C HamanoNov 23, 2021
  31. 4/4 t1400: use test-helper ref-store to inspect reflog contentsHan-Wen Nienhuys via GitGitGadget, Nov 22, 2021
  32. Ævar Arnfjörð BjarmasonNov 22, 2021
  33. Han-Wen NienhuysNov 22, 2021
  34. Junio C HamanoNov 22, 2021
  35. 0/5 Inspect reflog data programmatically in more testsHan-Wen Nienhuys via GitGitGadget, Nov 25, 2021
  36. 3/5 t1405: check for_each_reflog_ent_reverse() more thoroughlyHan-Wen Nienhuys via GitGitGadget, Nov 25, 2021
  37. 5/5 refs/debug: trim trailing LF from reflog messageHan-Wen Nienhuys via GitGitGadget, Nov 25, 2021
  38. Junio C HamanoNov 26, 2021
  39. Han-Wen NienhuysNov 29, 2021
  40. Junio C HamanoNov 29, 2021
  41. Junio C HamanoNov 29, 2021
  42. Han-Wen NienhuysDec 2, 2021
  43. Junio C HamanoDec 2, 2021
  44. Ævar Arnfjörð BjarmasonNov 29, 2021
  45. 1/5 show-branch: show reflog messageHan-Wen Nienhuys via GitGitGadget, Nov 25, 2021
  46. 2/5 test-ref-store: don't add newline to reflog messageHan-Wen Nienhuys via GitGitGadget, Nov 25, 2021
  47. Junio C HamanoNov 26, 2021
  48. 4/5 test-ref-store: tweaks to for-each-reflog-ent formatHan-Wen Nienhuys via GitGitGadget, Nov 25, 2021
  49. Junio C HamanoNov 26, 2021
  50. Ævar Arnfjörð BjarmasonNov 29, 2021
  51. Han-Wen NienhuysNov 29, 2021
  52. Junio C HamanoNov 29, 2021
  53. Ævar Arnfjörð BjarmasonNov 29, 2021
  54. Han-Wen NienhuysDec 2, 2021
  55. 0/5 Inspect reflog data programmatically in more testsHan-Wen Nienhuys via GitGitGadget, Dec 2, 2021
  56. 1/5 show-branch: show reflog messageHan-Wen Nienhuys via GitGitGadget, Dec 2, 2021
  57. 5/5 refs/debug: trim trailing LF from reflog messageHan-Wen Nienhuys via GitGitGadget, Dec 2, 2021
  58. 4/5 test-ref-store: tweaks to for-each-reflog-ent formatHan-Wen Nienhuys via GitGitGadget, Dec 2, 2021
  59. 3/5 t1405: check for_each_reflog_ent_reverse() more thoroughlyHan-Wen Nienhuys via GitGitGadget, Dec 2, 2021
  60. 2/5 test-ref-store: don't add newline to reflog messageHan-Wen Nienhuys via GitGitGadget, Dec 2, 2021

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.