Thread (1 message) 1 message, 1 author, 2017-03-20

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help