Re: [PATCH v5 5/9] ref: add basic symref content check for files backend
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Oct 8, 2024, 07:58 UTC
- Message-ID
- <CAOLa=ZQGaLJTJ-bcSYD1mcsgCD8ayHYzXatmK2iyz4gDodvvKA@mail.gmail.com>
- In-Reply-To
- <Zvj-vbvQym1R4KJk@ArchLinux>
shejialuo <shejialuo@gmail.com> writes:
Show 11 quoted lines
> We have code that checks regular ref contents, but we do not yet check > the contents of symbolic refs. By using "parse_loose_ref_content" for > symbolic refs, we will get the information of the "referent". > > We do not need to check the "referent" by opening the file. This is > because if "referent" exists in the file system, we will eventually > check its correctness by inspecting every file in the "refs" directory. > If the "referent" does not exist in the filesystem, this is OK as it is > seen as the dangling symref. > > So we just need to check the "referent" string content. A regular could
seems like we're missing the noun here, a regular what?
Show 18 quoted lines
> be accepted as a textual symref if it begins with "ref:", followed by > zero or more whitespaces, followed by the full refname, followed only by > whitespace characters. However, we always write a single SP after "ref:" > and a single LF after the refname. It may seem that we should report a > fsck error message when the "referent" does not apply above rules and we > should not be so aggressive because third-party reimplementations of Git > may have taken advantage of the looser syntax. Put it more specific, we > accept the following "referent": > > 1. "ref: refs/heads/master " > 2. "ref: refs/heads/master \n \n" > 3. "ref: refs/heads/master\n\n" > > When introducing the regular ref content checks, we created a new fsck > message "unofficialFormattedRef" which exactly represents above > situation. So we will reuse this fsck message to write checks to info > the user about these situations. >
Plus to what Patrick said in the previous commit, it would be nice to separate these issues with different message IDs.
Show 11 quoted lines
> But we do not allow any other trailing garbage. The followings are bad > symref contents which will be reported as fsck error by "git-fsck(1)". > > 1. "ref: refs/heads/master garbage\n" > 2. "ref: refs/heads/master \n\n\n garbage " > > And we introduce a new "badReferent(ERROR)" fsck message to report above > errors by using "ref.c::check_refname_format". But we cannot just pass > the "referent" to this function because the "referent" might contain > some whitespaces which will cause "check_refname_format" failing. >
It would be nice if you could elaborate here, or rather restructure to say something like..
Since 'check_refname_format' doesn't work with whitespaces, we use
the trimmed version of 'referent' with the function.[snip]