Re: [GSoC PATCH v3 2/5] pack-write: add helper to fill promisor file after repack
- From
Lorenzo Pegorari <lorenzo.pegorari2002@gmail.com>
- Date
- Apr 7, 2026, 22:07 UTC
- Message-ID
- <adWABoOqHNkTTTyR@lorenzo-VM>
- In-Reply-To
- <xmqq8qazai3b.fsf@gitster.g>
On Mon, Apr 06, 2026 at 02:34:32PM -0700, Junio C Hamano wrote:
Show 12 quoted lines
> LorenzoPegorari <lorenzo.pegorari2002@gmail.com> writes: > > > A ".promisor" file may contain ref names (and their associated hashes) > > that were fetched at the time the corresponding packfile was downloaded. > > This information is used for debugging reasons. This information is > > stored as lines structured like this: "<oid> <ref>". > > > > Create a `copy_promisor_content()` helper function that allows this > > debugging info to not be lost after a `repack`, by coping it inside a new > > ".promisor" file. > > "coping" -> "copying"
Ack.
Show 26 quoted lines
> > The function logic is the following: > > * Take all ".promisor" files contained inside the given `repo`. > > * Ignore those whose name is contained inside the given `strset > > not_repacked_names`, which basically acts as a "promisor ignorelist" > > (intended to be used for packfiles that have not been repacked). > > * Read each line of the remaining ".promisor" files, which can be: > > * "<oid> <ref>" if the ".promisor" file was never repacked. If so, > > add the time at which the ".promisor" file was last modified <time> > > to the line to create the string: "<oid> <ref> <time>". > > * "<oid> <ref> <time>" if the ".promisor" file was repacked. If so, > > don't modify it. > > * Ignore the line if its <oid> is not present inside the > > "<packtmp>-<dest_hex>.idx" file. > > * If the destination file "<packtmp>-<dest_hex>.promisor" does not > > already contain the line, append it to the file. > > > > The function assumes that the contents of all ".promisor" files are > > correctly formed. > > > > The time of last data modification is used in place of the time of file > > creation, because the former is much easier to obtain than the latter > > one. > > The time of file creation is not recorded anywhere if you are > dealing with the usual UNIX filesystems (ctime is not creation > time), so it is not the issue of "easier to obtain".
That's what I found out during my researches, but I wasn't sure. Thanks for confirming it.
Show 8 quoted lines
> The reason why this design chooses to add time is because in a > never-repacked .promisor file, the modification time of the file > itself can be used when you compare the entries in it with entries > in another .promisor file that did get repacked. By having > timestamp, the debugger can tell at which time the refs at the > remote repository pointed at what object---the same ref may appear > twice in the same .promisor file and having timestamps would help > understanding what happened over time.
Exactly. I'll improve the commit message to better explain the utility of these timestamps.
Thanks, Lorenzo