This is the last function in this code (besides public API) that takes
submodule argument and handles both main/submodule cases. Break it down,
move main store registration in get_main_ref_store() and keep the rest
in register_submodule_ref_store().

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 refs.c | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/refs.c b/refs.c
index 76a0e7b5a..55a80a83d 100644
--- a/refs.c
+++ b/refs.c
@@ -1402,25 +1402,19 @@ static struct ref_store 
*lookup_submodule_ref_store(const char *submodule)
 
 /*
  * Register the specified ref_store to be the one that should be used
- * for submodule (or the main repository if submodule is NULL). It is
- * a fatal error to call this function twice for the same submodule.
+ * for submodule. It is a fatal error to call this function twice for
+ * the same submodule.
  */
-static void register_ref_store(struct ref_store *refs, const char *submodule)
+static void register_submodule_ref_store(struct ref_store *refs,
+                                        const char *submodule)
 {
-       if (!submodule) {
-               if (main_ref_store)
-                       die("BUG: main_ref_store initialized twice");
-
-               main_ref_store = refs;
-       } else {
-               if (!submodule_ref_stores.tablesize)
-                       hashmap_init(&submodule_ref_stores, submodule_hash_cmp, 
0);
+       if (!submodule_ref_stores.tablesize)
+               hashmap_init(&submodule_ref_stores, submodule_hash_cmp, 0);
 
-               if (hashmap_put(&submodule_ref_stores,
-                               alloc_submodule_hash_entry(submodule, refs)))
-                       die("BUG: ref_store for submodule '%s' initialized 
twice",
-                           submodule);
-       }
+       if (hashmap_put(&submodule_ref_stores,
+                       alloc_submodule_hash_entry(submodule, refs)))
+               die("BUG: ref_store for submodule '%s' initialized twice",
+                   submodule);
 }
 
 /*
@@ -1437,7 +1431,6 @@ static struct ref_store *ref_store_init(const char 
*submodule)
                die("BUG: reference backend %s is unknown", be_name);
 
        refs = be->init(submodule);
-       register_ref_store(refs, submodule);
        return refs;
 }
 
@@ -1449,6 +1442,12 @@ static struct ref_store *get_main_ref_store(void)
                return main_ref_store;
 
        refs = ref_store_init(NULL);
+       if (refs) {
+               if (main_ref_store)
+                       die("BUG: main_ref_store initialized twice");
+
+               main_ref_store = refs;
+       }
        return refs;
 }
 
@@ -1469,6 +1468,9 @@ struct ref_store *get_ref_store(const char *submodule)
        if (is_nonbare_repository_dir(&submodule_sb))
                refs = ref_store_init(submodule);
        strbuf_release(&submodule_sb);
+
+       if (refs)
+               register_submodule_ref_store(refs, submodule);
        return refs;
 }
 
-- 
2.11.0.157.gd943d85

Reply via email to