Re: [PATCH v5 12/24] refs.c: kill register_ref_store(), add register_submodule_ref_store()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/22/2017 03:04 PM, Nguyễn Thái Ngọc Duy wrote:
> 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@xxxxxxxxx>
> ---
>  refs.c | 50 ++++++++++++++++++++++++++------------------------
>  1 file changed, 26 insertions(+), 24 deletions(-)
> 
> diff --git a/refs.c b/refs.c
> index c284cb4f4..6adc38e42 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -1412,29 +1412,6 @@ 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.
> - */
> -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;
>  }
>  
> @@ -1460,9 +1436,32 @@ 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;

Superfluous test: I don't think `ref_store_init()` ever returns NULL.
This also implies that you could check `main_ref_store` before calling
`ref_store_init()`, and eliminate a temporary.

>  }
>  
> +/*
> + * 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)
>  {
>  	struct strbuf submodule_sb = STRBUF_INIT;
> @@ -1480,6 +1479,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)

I think `refs` should always be non-NULL here for the same reason.

> +		register_submodule_ref_store(refs, submodule);
>  	return refs;
>  }

Michael




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]