Subject: Re: [PATCH v10 03/12] create .git/refs in files-backend.c

From: Emily Shaffer <[email-masked]>
Date: Thu, 30 Apr 2020 14:24:10 -0700

On Mon, Apr 27, 2020 at 08:13:29PM +0000, Han-Wen Nienhuys via GitGitGadget wrote:
> 
> 
> This prepares for supporting the reftable format, which will want
> create its own file system layout in .git
> 
> Signed-off-by: Han-Wen Nienhuys <[email-masked]>
> ---
>  builtin/init-db.c    | 2 --
>  refs/files-backend.c | 6 ++++++
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/builtin/init-db.c b/builtin/init-db.c
> index 0b7222e7188..3b50b1aa0e5 100644
> --- a/builtin/init-db.c
> +++ b/builtin/init-db.c
> @@ -251,8 +251,6 @@ static int create_default_files(const char *template_path,
>  	 * We need to create a "refs" dir in any case so that older
>  	 * versions of git can tell that this is a repository.
>  	 */
> -	safe_create_dir(git_path("refs"), 1);
> -	adjust_shared_perm(git_path("refs"));

Is the reftable completely replacing the refs/ dir? Or is the idea that
the refs/ dir is only used by the files backend? The commit message
makes it sound like it's an additional format to support, so I'm a
little confused. Why does the other currently-existing backend not need
the refs/ dir at this stage?

>  
>  	if (refs_init_db(&err))
>  		die("failed to set up refs db: %s", err.buf);
> diff --git a/refs/files-backend.c b/refs/files-backend.c
> index 561c33ac8a9..ab7899a9c77 100644
> --- a/refs/files-backend.c
> +++ b/refs/files-backend.c
> @@ -3157,9 +3157,15 @@ static int files_init_db(struct ref_store *ref_store, struct strbuf *err)
>  		files_downcast(ref_store, REF_STORE_WRITE, "init_db");
>  	struct strbuf sb = STRBUF_INIT;
>  
> +	files_ref_path(refs, &sb, "refs");
> +	safe_create_dir(sb.buf, 1);
> +	/* adjust permissions even if directory already exists. */
> +	adjust_shared_perm(sb.buf);
> +
>  	/*
>  	 * Create .git/refs/{heads,tags}
>  	 */
> +	strbuf_reset(&sb);
>  	files_ref_path(refs, &sb, "refs/heads");
>  	safe_create_dir(sb.buf, 1);
>  
> -- 
> gitgitgadget
>