Re: [PATCH v6 09/27] files-backend: add and use files_refname_path()
- From
Michael Haggerty <mhagger@alum.mit.edu>
- Date
- Mar 19, 2017, 20:32 UTC
- Message-ID
- <f90afe6c-534e-80ec-cb58-95bcb3172d86@alum.mit.edu>
- In-Reply-To
- <20170318020337.22767-10-pclouds@gmail.com>
On 03/18/2017 03:03 AM, Nguyễn Thái Ngọc Duy wrote:
Show 6 quoted lines
> Keep repo-related path handling in one place. This will make it easier > to add submodule/multiworktree support later. > > This automatically adds the "if submodule then use the submodule version > of git_path" to other call sites too. But it does not mean those > operations are submodule-ready. Not yet.
Maybe `files_loose_ref_path()` would be a more descriptive name for the new function. But I can live with it either way.
Show 49 quoted lines
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> refs/files-backend.c | 47 +++++++++++++++++++++++------------------------
> 1 file changed, 23 insertions(+), 24 deletions(-)
>
> diff --git a/refs/files-backend.c b/refs/files-backend.c
> index 64d1ab3fe8..1a13fb5e2b 100644
> --- a/refs/files-backend.c
> +++ b/refs/files-backend.c
> @@ -1180,6 +1180,18 @@ static void files_reflog_path(struct files_ref_store *refs,
> strbuf_git_path(sb, "logs/%s", refname);
> }
>
> +static void files_refname_path(struct files_ref_store *refs,
> + struct strbuf *sb,
> + const char *refname)
> +{
> + if (refs->submodule) {
> + strbuf_git_path_submodule(sb, refs->submodule, "%s", refname);
> + return;
> + }
> +
> + strbuf_git_path(sb, "%s", refname);
> +}
> +
> /*
> * Get the packed_ref_cache for the specified files_ref_store,
> * creating it if necessary.
> @@ -1249,19 +1261,10 @@ static void read_loose_refs(const char *dirname, struct ref_dir *dir)
> struct strbuf refname;
> struct strbuf path = STRBUF_INIT;
> size_t path_baselen;
> - int err = 0;
>
> - if (refs->submodule)
> - err = strbuf_git_path_submodule(&path, refs->submodule, "%s", dirname);
> - else
> - strbuf_git_path(&path, "%s", dirname);
> + files_refname_path(refs, &path, dirname);
> path_baselen = path.len;
>
> - if (err) {
> - strbuf_release(&path);
> - return;
> - }
> -
> d = opendir(path.buf);
> if (!d) {
> strbuf_release(&path);The old code in the hunk above went to the trouble of handling errors from `strbuf_git_path_submodule()`, which I think can happen if the submodule path doesn't actually point at a directory that looks like a Git repository. Your new code doesn't handle such an error.
It seems clear that `read_loose_refs()` is to late a place to be dealing with such errors, and indeed it seems like the check `is_nonbare_repository_dir()` in `get_ref_store()` should make such errors impossible, so I think your change is OK. If you agree, it might be appropriate to mention that reasoning in the commit message.
> [...]
Michael