git/refs
shejialuo 32dc1c7ec3 ref: check the full refname instead of basename
In "files-backend.c::files_fsck_refs_name", we validate the refname
format by using "check_refname_format" to check the basename of the
iterator with "REFNAME_ALLOW_ONELEVEL" flag.

However, this is a bad implementation. Although we doesn't allow a
single "@" in ".git" directory, we do allow "refs/heads/@". So, we will
report an error wrongly when there is a "refs/heads/@" ref by using one
level refname "@".

Because we just check one level refname, we either cannot check the
other parts of the full refname. And we will ignore the following
errors:

  "refs/heads/ new-feature/test"
  "refs/heads/~new-feature/test"

In order to fix the above problem, enhance "files_fsck_refs_name" to use
the full name for "check_refname_format". Then, replace the tests which
are related to "@" and add tests to exercise the above situations using
for loop to avoid repetition.

Mentored-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: shejialuo <shejialuo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-11-21 08:21:31 +09:00
..
debug.c refs: set up ref consistency check infrastructure 2024-08-08 09:36:53 -07:00
files-backend.c ref: check the full refname instead of basename 2024-11-21 08:21:31 +09:00
iterator.c refs: add referent to each_ref_fn 2024-08-09 08:47:34 -07:00
packed-backend.c Merge branch 'ps/pack-refs-auto-heuristics' 2024-09-12 11:47:23 -07:00
packed-backend.h refs/files: use heuristic to decide whether to repack with `--auto` 2024-09-04 08:03:24 -07:00
ref-cache.c refs: keep track of unresolved reference value in iterators 2024-08-09 08:47:33 -07:00
ref-cache.h refs: keep track of unresolved reference value in iterators 2024-08-09 08:47:33 -07:00
refs-internal.h Merge branch 'sj/ref-fsck' 2024-08-16 12:51:51 -07:00
reftable-backend.c Merge branch 'ps/reftable-alloc-failures' 2024-10-10 14:22:25 -07:00