Re: [PATCH 18/18] alternates: use fspathcmp to detect duplicates
On Mon, Oct 3, 2016 at 1:36 PM, Jeff King <peff@peff.net> wrote:
Show 7 quoted lines
> On a case-insensitive filesystem, we should realize that
> "a/objects" and "A/objects" are the same path. We already
> use fspathcmp() to check against the main object directory,
> but until recently we couldn't use it for comparing against
> other alternates (because their paths were not
> NUL-terminated strings). But now we can, so let's do so.
>
> Note that we also need to adjust count-objects to load the
> config, so that it can see the setting of core.ignorecase
> (this is required by the test, but is also a general bugfix
> for users of count-objects).
Show 62 quoted lines
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> builtin/count-objects.c | 2 ++
> sha1_file.c | 2 +-
> t/t5613-info-alternate.sh | 17 +++++++++++++++++
> 3 files changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/count-objects.c b/builtin/count-objects.c
> index a700409..a04b4f2 100644
> --- a/builtin/count-objects.c
> +++ b/builtin/count-objects.c
> @@ -97,6 +97,8 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix)
> OPT_END(),
> };
>
> + git_config(git_default_config, NULL);
> +
> argc = parse_options(argc, argv, prefix, opts, count_objects_usage, 0);
> /* we do not take arguments other than flags for now */
> if (argc)
> diff --git a/sha1_file.c b/sha1_file.c
> index b514167..b05ec9c 100644
> --- a/sha1_file.c
> +++ b/sha1_file.c
> @@ -260,7 +260,7 @@ static int alt_odb_usable(struct strbuf *path, const char *normalized_objdir)
> * thing twice, or object directory itself.
> */
> for (alt = alt_odb_list; alt; alt = alt->next) {
> - if (!strcmp(path->buf, alt->path))
> + if (!fspathcmp(path->buf, alt->path))
> return 0;
> }
> if (!fspathcmp(path->buf, normalized_objdir))
> diff --git a/t/t5613-info-alternate.sh b/t/t5613-info-alternate.sh
> index 76525a0..926fe14 100755
> --- a/t/t5613-info-alternate.sh
> +++ b/t/t5613-info-alternate.sh
> @@ -116,4 +116,21 @@ test_expect_success 'relative duplicates are eliminated' '
> test_cmp expect actual.alternates
> '
>
> +test_expect_success CASE_INSENSITIVE_FS 'dup finding can be case-insensitive' '
> + git init --bare insensitive.git &&
> + # the previous entry for "A" will have used uppercase
> + cat >insensitive.git/objects/info/alternates <<-\EOF &&
> + ../../C/.git/objects
> + ../../a/.git/objects
> + EOF
> + cat >expect <<-EOF &&
> + alternate: $(pwd)/C/.git/objects
> + alternate: $(pwd)/B/.git/objects
> + alternate: $(pwd)/A/.git/objects
> + EOF
> + git -C insensitive.git count-objects -v >actual &&
> + grep ^alternate: actual >actual.alternates &&
> + test_cmp expect actual.alternates
> +'
> +
> test_done
> --
> 2.10.0.618.g82cc264