This is v2 of the patch series, considerably reorganized but not that different codewise. Thanks to Stefan, Junio, and Peff for their feedback about v1 [1]. I think I have addressed all of your comments. Changes since v1: * Rebase from `master` onto `maint` (to match Junio). * Reorder some commits to make the presentation more logical. * Added an explicit preparatory commit that just reorders some function definitions, because it makes the diff for the subsequent commit a lot easier to read. * Make some preexisting functions private: * lookup_ref_store() * ref_store_init() * Remove some unnecessary handling of `submodule == ""` when it is already known to have been converted to `NULL`. (Some of the purported handling also happened to be broken.) * Introduce function `register_ref_store()` in a separate step, before switching to hashmaps. * Don't initialize hashmap in `lookup_ref_store()`. (Just return `NULL`; the hashmap will be initialized in `register_ref_store()` a moment later.) * Make code in `submodule_hash_cmp()` clearer. * Use `FLEX_ALLOC_STR()` in `alloc_submodule_hash_entry()`. * Don't specify an initial size for the submodule hashmap (the default is OK). This patch series is also available from my fork on GitHub [2] as branch "submodule-hash". Michael [1] http://public-inbox.org/git/cover.1486629195.git.mhagger@xxxxxxxxxxxx/T/#u [2] https://github.com/mhagger/git Michael Haggerty (9): refs: reorder some function definitions refs: make some ref_store lookup functions private refs: remove some unnecessary handling of submodule == "" register_ref_store(): new function refs: store submodule ref stores in a hashmap refs: push the submodule attribute down base_ref_store_init(): remove submodule argument files_ref_store::submodule: use NULL for the main repository read_loose_refs(): read refs using resolve_ref_recursively() refs.c | 107 +++++++++++++++++++++++++++++++++++---------------- refs/files-backend.c | 77 +++++++++++++++++++++--------------- refs/refs-internal.h | 48 ++++------------------- 3 files changed, 127 insertions(+), 105 deletions(-) -- 2.9.3