git/list[1] front-page[2] threads[3] people[4] search[5] about
wed 2026-10-07 18:04 UTC

Re: [GSoC PATCH v2 2/4] pack-write: add helper to fill promisor file after repack

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 23, 2026, 21:30 UTC
Message-ID
<xmqqfr5q44jx.fsf@gitster.g>
In-Reply-To
<0bb031e7443bb53abbbb0afaa347285d6d8cf7b8.1774205661.git.lorenzo.pegorari2002@gmail.com>
LorenzoPegorari <lorenzo.pegorari2002@gmail.com> writes:
Show 13 quoted lines
> Create a `copy_all_promisor_files()` helper function used to copy the
> contents of all ".promisor" files in a `repository` inside another
> ".promisor" file.
>
> This function can be used to preserve the contents of all ".promisor"
> files inside a new ".promisor" file, for example when a repack happens.
>
> This function is written in such a way so that it will read all the
> ".promisor" files inside the given `repository` line by line, and copy
> only the lines that are not already present in the destination file. This
> is done to avoid copying the same lines multiple times that may come from
> multiple (redundant) packfiles. There might be another better/cleaner way
> to achieve this.

In the previous step, we extablished that these "back then their ref X used to point at object Y" records are there so that we can identify which refs were fetched at the time the packfile was downloaded to help debugging. When repacking, losing these records certainly would lose information.

But would concatenating all into a single file help preserve the useful information? Don't we need do better than that?

A NEEDSWORK comment, as was discussed in another thread or two in the recent past, is not necessarily a well thought out fully finished specification of an additional piece of work. "We know this has a problem, we may need to do something about it, like concatenating to save the contents, perhaps? We do not know the answer, and we do not bother thinking it through right at this moment. It is left to the future developers to figure it out" is what a NEEDSWORK comment is about.

Your first response to such a comment may be "yeah, I agree that it is bad to lose information we added to help debugging", but the second one should be to wonder if the "like concatenating..." is the best approach going forward.

In other words, we should take a NEEDSWORK comment as a mere starting point, and what NEEDS your work begins at thinking what needs to be done about the problem raised there.

By mixing them up all into a single list, you no longer can tell when their ref X was observed to be pointing at object Y anymore. You may have two packs originally, with a record for "ref X pointing at object Y" in each of them, but by deduping them, you lose the information that you cloned at one time, and made an additional fetch on another day, and the fact the ref X was pointing at the same value at both times. I am not sure if it is a good implementation if the objective of this topic is to preserve information that is useful for debugging.

I wonder if it helps to append to each line the file timestamp of the .promisor file we took the record originally? For the sake of completeness, we could consider adding the filename as well, but we can quickly dismiss it as not so useful ;-)

If repacking already repacked promisor packfile, the records would already contain such a timestamp at the end, so the code to copy existing records must be prepared to see if the records are the <ref, oid> tuple, or <ref, oid, timestamp> tuple, and act accordingly.

I am *not* saying that without such a "preserve timestamp" column in the record, copying existing records to a new .promisor file is useless. But we do not see any explanation why the author thinks that it is sufficient to copy existing records while silently deduping. We can implement only one choice backed by series of decisions like "timestamp might help" and "original filenames would probably not help", and the design should describe what was considered and rejected (as opposed to "we didn't think things through---we just did what the original NEEDSWORK comment suggested doing").

Thanks.
Previous: Junio C HamanoNext: Junio C Hamano
Message 14 of 79 in “preserve promisor files content after repack”
  1. 0/3 preserve promisor files content after repackLorenzoPegorari, Mar 21, 2026
  2. 1/3 pack-write: add explanation to promisor file contentLorenzoPegorari, Mar 21, 2026
  3. 2/3 pack-write: add helper to fill promisor file after repackLorenzoPegorari, Mar 21, 2026
  4. 3/3 repack-promisor: preserve content of promisor files after repackLorenzoPegorari, Mar 21, 2026
  5. Eric SunshineMar 22, 2026
  6. Lorenzo PegorariMar 22, 2026
  7. 0/4 preserve promisor files content after repackLorenzoPegorari, Mar 22, 2026
  8. 1/4 pack-write: add explanation to promisor file contentLorenzoPegorari, Mar 22, 2026
  9. 2/4 pack-write: add helper to fill promisor file after repackLorenzoPegorari, Mar 22, 2026
  10. 3/4 repack-promisor: preserve content of promisor files after repackLorenzoPegorari, Mar 22, 2026
  11. 4/4 t7700: test for promisor file content after repackLorenzoPegorari, Mar 22, 2026
  12. Eric SunshineMar 23, 2026
  13. Junio C HamanoMar 23, 2026
  14. Junio C HamanoMar 23, 2026
  15. Junio C HamanoMar 23, 2026
  16. Lorenzo PegorariMar 25, 2026
  17. Lorenzo PegorariMar 26, 2026
  18. Lorenzo PegorariMar 26, 2026
  19. Lorenzo PegorariMar 26, 2026
  20. 0/5 preserve promisor files content after repackLorenzoPegorari, Apr 6, 2026
  21. 1/5 pack-write: add explanation to promisor file contentLorenzoPegorari, Apr 6, 2026
  22. 2/5 pack-write: add helper to fill promisor file after repackLorenzoPegorari, Apr 6, 2026
  23. 3/5 repack-promisor: preserve content of promisor files after repackLorenzoPegorari, Apr 6, 2026
  24. 4/5 t7700: test for promisor file content after repackLorenzoPegorari, Apr 6, 2026
  25. 5/5 t7703: test for promisor file content after geometric repackLorenzoPegorari, Apr 6, 2026
  26. Tian YuchenApr 6, 2026
  27. Lorenzo PegorariApr 6, 2026
  28. Junio C HamanoApr 6, 2026
  29. Junio C HamanoApr 6, 2026
  30. Junio C HamanoApr 6, 2026
  31. Junio C HamanoApr 7, 2026
  32. Junio C HamanoApr 7, 2026
  33. Lorenzo PegorariApr 7, 2026
  34. Lorenzo PegorariApr 7, 2026
  35. Junio C HamanoApr 7, 2026
  36. Lorenzo PegorariApr 7, 2026
  37. Lorenzo PegorariApr 7, 2026
  38. Lorenzo PegorariApr 7, 2026
  39. Lorenzo PegorariApr 8, 2026
  40. 0/5 preserve promisor files content after repackLorenzoPegorari, Apr 10, 2026
  41. 1/5 pack-write: add explanation to promisor file contentLorenzoPegorari, Apr 10, 2026
  42. 2/5 pack-write: add helper to fill promisor file after repackLorenzoPegorari, Apr 10, 2026
  43. 3/5 repack-promisor: preserve content of promisor files after repackLorenzoPegorari, Apr 10, 2026
  44. 4/5 t7700: test for promisor file content after repackLorenzoPegorari, Apr 10, 2026
  45. 5/5 t7703: test for promisor file content after geometric repackLorenzoPegorari, Apr 10, 2026
  46. Junio C HamanoApr 10, 2026
  47. Junio C HamanoApr 10, 2026
  48. Lorenzo PegorariApr 10, 2026
  49. Lorenzo PegorariApr 10, 2026
  50. CodingGuidelines: st_mtimespec vs st_mtim vs st_mtimeJunio C Hamano, Apr 10, 2026
  51. 0/6 preserve promisor files content after repackLorenzoPegorari, Apr 10, 2026
  52. 1/6 pack-write: add explanation to promisor file contentLorenzoPegorari, Apr 10, 2026
  53. 2/6 repack-promisor add helper to fill promisor file after repackLorenzoPegorari, Apr 10, 2026
  54. 3/6 repack-promisor: preserve content of promisor files after repackLorenzoPegorari, Apr 10, 2026
  55. 4/6 t7700: test for promisor file content after repackLorenzoPegorari, Apr 10, 2026
  56. 5/6 t7703: test for promisor file content after geometric repackLorenzoPegorari, Apr 10, 2026
  57. 6/6 repack-promisor: add missing headersLorenzoPegorari, Apr 10, 2026
  58. Junio C HamanoApr 10, 2026
  59. Junio C HamanoApr 10, 2026
  60. Lorenzo PegorariApr 11, 2026
  61. Junio C HamanoApr 11, 2026
  62. Lorenzo PegorariApr 11, 2026
  63. Tian YuchenApr 11, 2026
  64. Tian YuchenApr 11, 2026
  65. Junio C HamanoApr 12, 2026
  66. Elijah NewrenApr 16, 2026
  67. Lorenzo PegorariApr 17, 2026
  68. Lorenzo PegorariApr 17, 2026
  69. Lorenzo PegorariApr 17, 2026
  70. Junio C HamanoApr 17, 2026
  71. 0/6 preserve promisor files content after repackLorenzoPegorari, Apr 18, 2026
  72. 1/6 pack-write: add explanation to promisor file contentLorenzoPegorari, Apr 18, 2026
  73. 2/6 repack-promisor add helper to fill promisor file after repackLorenzoPegorari, Apr 18, 2026
  74. 3/6 repack-promisor: preserve content of promisor files after repackLorenzoPegorari, Apr 18, 2026
  75. 4/6 t7700: test for promisor file content after repackLorenzoPegorari, Apr 18, 2026
  76. 5/6 t7703: test for promisor file content after geometric repackLorenzoPegorari, Apr 18, 2026
  77. 6/6 repack-promisor: add missing headersLorenzoPegorari, Apr 18, 2026
  78. Junio C HamanoMay 12, 2026
  79. Lorenzo PegorariMay 19, 2026

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.