On Thu, Feb 10, 2022 at 8:14 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Han-Wen Nienhuys <hanwen@xxxxxxxxxx> writes: > > > on a tangent: I posted a patch to write MERGE_AUTOSTASH, > > rebase-merge/autostash, etc. as refs. > > Is that the right direction? They are read like refs, but they are > > together in a directory with other bits of stateful data (similar to > > what is appended to FETCH_HEAD). Perhaps I should rather change the > > read path, so they're always read as files rather than refs? > > I think that would be a lot more preferrable. If a file is written > to record pieces of info, among which an object name happens to be > included, it does not have to be recorded as a ref. Especially if > it is an ephemeral file like MERGE_AUTOSTASH and FETCH_HEAD. For FETCH_HEAD, doing git fetch host refs/changes/23/123/1 && git checkout FETCH_HEAD is the standard idiom for downloading a change from Gerrit. I suspect there might be other similar idioms. This means we have to read them through the refs machinery. I think the most sensible approach is to pass the read/write through refs_* functions, but special-case the storage, so it doesn't go through reftable. We already do this for FETCH_HEAD and MERGE_HEAD in refs_read_raw_refs. This means we need a formal definition of which refs should be treated as files. Maybe we could do as follows: Pseudorefs are 1) all uppercase toplevel names except for HEAD 2) all refs that are not under refs/* (for example: rebase-{merge,apply}/autostash) Pseudorefs are always stored as files containing a hex object_id. Pseudorefs can be read or written through refs_* functions, but given the storage guarantees, it's also valid to read/write them outside refs_* functions It is forbidden to make cross-ref transactions that involve pseudorefs. -- Han-Wen Nienhuys - Google Munich I work 80%. Don't expect answers from me on Fridays. -- Google Germany GmbH, Erika-Mann-Strasse 33, 80636 Munich Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Paul Manicle, Liana Sebastian