Re: [GSoC PATCH v3 2/5] pack-write: add helper to fill promisor file after repack
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 6, 2026, 21:34 UTC
- Message-ID
- <xmqq8qazai3b.fsf@gitster.g>
- In-Reply-To
- <3cd15429194c763727fbfd5981ba38c1dc2cc907.1775431990.git.lorenzo.pegorari2002@gmail.com>
LorenzoPegorari <lorenzo.pegorari2002@gmail.com> writes:
Show 8 quoted lines
> 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"
Show 22 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".
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.