Re: [PATCH 00/20] Separate `ref_cache` into a separate module
From: Junio C Hamano <hidden>
Date: 2017-03-20 17:25:45
Michael Haggerty [off-list ref] writes:
* (And the main goal): Avoid reading and parsing the *whole `packed-refs` file* (as we do now) every time any part of it is needed. Instead, use binary search to find the reference and/or range of references that we want, and parse the info out of the mmapped image on the fly.
Oooohh.... Juicy.
This patch series extracts a `ref_cache` module out of
`files_ref_cache`, and goes some way to disentangling those two
modules, which until now were overly intimate with each other:
* Remove `verify_refname_available()` from the refs VTABLE, instead
implementing it in a generic way that uses only the usual refs API
to talk to the `ref_store`.
* Split `ref_cache`-related code into a new module,
`refs/ref-cache.{c,h}`. Encapsulate the data structure in a new
class, `struct ref_cache`.
* Change the lazy-filling mechanism of `ref_cache` to call back to its
backing `ref_store` via a callback function rather than calling
`read_loose_refs()` directly.Nice.
* Move the special handling of `refs/bisect/` from `ref_cache` to `files_ref_store`. * Make `cache_ref_iterator_begin()` smarter, and change external users to iterate via this interface instead of using `do_for_each_entry_in_dir()`. Even after this patch series, the modules are still too intimate for my taste, but I think this is a big step forward, and it is enough to allow the other changes that I've been working on. These patches depend on Duy's nd/files-backend-git-dir branch, v6 [2]. They are also available from my GitHub fork [1] as branch `separate-ref-cache`. Happily, this patch series actually removes a few more lines than it adds, mostly thanks to the simpler `verify_refname_available()` implementation.
Thanks.