On Mon, Oct 3, 2016 at 1:36 PM, Jeff King <peff@xxxxxxxx> wrote: > 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. > Yep, makes sense. > 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). Also makes sense. > > Signed-off-by: Jeff King <peff@xxxxxxxx> > --- > 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