Patrick Steinhardt <ps@xxxxxx> writes: > That's a different problem from the one I have right now. Let's take the > following sequence of commands: > > $ git init repo > Initialized empty Git repository in /tmp/repo/.git/ > $ git -C repo commit --allow-empty --message message > [main (root-commit) aa5eec4] message > $ git -C repo update-ref ref/head/foo HEAD > $ ls repo/.git/ref/head/foo > repo/.git/ref/head/foo > > Now the fact that you can create "ref/head/foo" is a bug that needs to > be fixed, no arguing there. The problem is that rectifying this problem > with the "files" backend is easy -- you look into the repo, notice that > there's a weird directory, and then "rm -rf" it. OK. > But how do you learn about this ref existing with the "reftable" backend > in the first place? You can't without looking at the binary format -- > there doesn't exist a single command that would allow you to list all > refs unfiltered. But that is very much required in order to learn about > misbehaviour and fix it. I think I have been saying that it is perfectly OK if reftable backend, being newer and backed by more experience using Git, rejected any attempt to create anything under "ref/" (to avoid confusion to those who are reading from sidelines, it should allow creating "refs/mytool/" for third-party tools to store their own pointers). > As I said -- this is a bug, and I agree that it shouldn't happen. But > bugs happen, and especially with the new reftable format I expect them > to happen. What I look for in this context is to create the tools to fix > problems like this, but `--include-root-refs` doesn't. A flag that > unconditionally returns all refs, regardless of whether they have a bad > name or not, does address the issue. Think of it of more of a debugging > tool. OK, "--include-all-refs" would be fine. And without bugs there should not be a difference. Where does "all refs in this worktree" you mentioned fit in this picture? Should a bogus "ref/foo/bar" be considered to be worktree specific, or is it an incorrect attempt to create a ref that is specific to 'foo' worktree that is not the current one and be filtered out?