Browse Source

Merge branch 'bp/name-hash-dirname-fix'

"git add" files in the same directory, but spelling the directory
path in different cases on case insensitive filesystem, corrupted
the name hash data structure and led to unexpected results.  This
has been corrected.

* bp/name-hash-dirname-fix:
  name-hash: properly fold directory names in adjust_dirname_case()
maint
Junio C Hamano 7 years ago
parent
commit
2ac76d8d9d
  1. 6
      name-hash.c
  2. 16
      t/t0050-filesystem.sh

6
name-hash.c

@ -699,12 +699,12 @@ void adjust_dirname_case(struct index_state *istate, char *name) @@ -699,12 +699,12 @@ void adjust_dirname_case(struct index_state *istate, char *name)
if (*ptr == '/') {
struct dir_entry *dir;

ptr++;
dir = find_dir_entry(istate, name, ptr - name + 1);
dir = find_dir_entry(istate, name, ptr - name);
if (dir) {
memcpy((void *)startPtr, dir->name + (startPtr - name), ptr - startPtr);
startPtr = ptr;
startPtr = ptr + 1;
}
ptr++;
}
}
}

16
t/t0050-filesystem.sh

@ -80,7 +80,21 @@ test_expect_success 'merge (case change)' ' @@ -80,7 +80,21 @@ test_expect_success 'merge (case change)' '
git merge topic
'


test_expect_success CASE_INSENSITIVE_FS 'add directory (with different case)' '
git reset --hard initial &&
mkdir -p dir1/dir2 &&
echo >dir1/dir2/a &&
echo >dir1/dir2/b &&
git add dir1/dir2/a &&
git add dir1/DIR2/b &&
git ls-files >actual &&
cat >expected <<-\EOF &&
camelcase
dir1/dir2/a
dir1/dir2/b
EOF
test_cmp expected actual
'

test_expect_failure CASE_INSENSITIVE_FS 'add (with different case)' '
git reset --hard initial &&

Loading…
Cancel
Save