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

[RFC] Implement consistency check for packed refs

From
shejialuo <shejialuo@gmail.com>
Date
Dec 16, 2024, 13:58 UTC
Message-ID
<Z2Ax9dtx4XE5xjgw@ArchLinux>
Hi all,

At current, I have already implemented the consistency check for files backend. My next step is to implement the consistency check for packed refs. And during these days, I have learned the source code of the "refs/packed-backend.c".

The current "git-fsck(1)" implicitly checks the packed refs by calling the method `refs/packed-backend.c::packed_refs_lock` which alls `get_snapshot` and `create_snapshot`.

In the `create_snapshot` function, it will check some consistency of the "packed-refs" file, if anything is wrong, the program will die. "git-fsck(1)" relies on this to check the basic format correctness for "packed-refs" file. It's not suitable to just call "packed_refs_lock" in the code, we should not die the program.

Based on above, I have some ideas to implement the functionality. But before I implement the actual code, I want to share my ideas to the mailing list to get some feedback.

There are two ways we could add consistency check for packed refs.
1. We simply read the raw file "packed-refs" file, check each line. Of
course, we should also need to check whether the content is sorted.
2. We may reuse the data structure "struct snapshot" to do this. And we
call "packed_refs_lock" without calling the "creating_snapshot" instead,
we should just check. The reason why we do this is that we could reuse
some functions defined in the "packed-backend.c" instead of repeating
some logics. However, this way would be more complicated and require
more effort.

However, one thing I am not sure is that should we lock the raw file when checking? From my perspective, we should lock the file because we are checking the consistency of it. If other processes are processing the "packed-refs", we may encounter inconsistency and things would be strange.

Thanks, Jialuo

Next: Patrick Steinhardt
Message 1 of 3 in “[RFC] Implement consistency check for packed refs”
  1. shejialuoDec 16, 2024
  2. Patrick SteinhardtDec 16, 2024
  3. shejialuoDec 17, 2024

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.