refs.c: kill register_ref_store(), add register_submodule_ref_store()

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 <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy 2017-03-26 09:42:28 +07:00 committed by Junio C Hamano
parent 126c9e0576
commit 378dc9103a

45
refs.c
View File

@ -1411,29 +1411,6 @@ static struct ref_store *lookup_submodule_ref_store(const char *submodule)
return entry ? entry->refs : NULL;
}
/*
* 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.
*/
static void register_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 (hashmap_put(&submodule_ref_stores,
alloc_submodule_hash_entry(submodule, refs)))
die("BUG: ref_store for submodule '%s' initialized twice",
submodule);
}
}
/*
* Create, record, and return a ref_store instance for the specified
* submodule (or the main repository if submodule is NULL).
@ -1448,7 +1425,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;
}
@ -1457,7 +1433,25 @@ static struct ref_store *get_main_ref_store(void)
if (main_ref_store)
return main_ref_store;
return ref_store_init(NULL);
main_ref_store = ref_store_init(NULL);
return main_ref_store;
}
/*
* Register the specified ref_store to be the one that should be used
* for submodule. It is a fatal error to call this function twice for
* the same submodule.
*/
static void register_submodule_ref_store(struct ref_store *refs,
const char *submodule)
{
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);
}
struct ref_store *get_ref_store(const char *submodule)
@ -1481,6 +1475,7 @@ struct ref_store *get_ref_store(const char *submodule)
return NULL;
refs = ref_store_init(submodule);
register_submodule_ref_store(refs, submodule);
return refs;
}