Commit 3f0d0c85 by Philip Kelley

Disable ignore_case when writing the index to a tree

parent 426b2e2f
...@@ -242,8 +242,10 @@ static unsigned int index_merge_mode( ...@@ -242,8 +242,10 @@ static unsigned int index_merge_mode(
return index_create_mode(mode); return index_create_mode(mode);
} }
static void index_set_ignore_case(git_index *index, bool ignore_case) void git_index_set_ignore_case(git_index *index, bool ignore_case)
{ {
index->ignore_case = ignore_case;
index->entries._cmp = ignore_case ? index_icmp : index_cmp; index->entries._cmp = ignore_case ? index_icmp : index_cmp;
index->entries_cmp_path = ignore_case ? index_icmp_path : index_cmp_path; index->entries_cmp_path = ignore_case ? index_icmp_path : index_cmp_path;
index->entries_search = ignore_case ? index_isrch : index_srch; index->entries_search = ignore_case ? index_isrch : index_srch;
...@@ -388,7 +390,7 @@ int git_index_set_caps(git_index *index, unsigned int caps) ...@@ -388,7 +390,7 @@ int git_index_set_caps(git_index *index, unsigned int caps)
} }
if (old_ignore_case != index->ignore_case) { if (old_ignore_case != index->ignore_case) {
index_set_ignore_case(index, index->ignore_case); git_index_set_ignore_case(index, index->ignore_case);
} }
return 0; return 0;
......
...@@ -48,6 +48,8 @@ extern size_t git_index__prefix_position(git_index *index, const char *path); ...@@ -48,6 +48,8 @@ extern size_t git_index__prefix_position(git_index *index, const char *path);
extern int git_index_entry__cmp(const void *a, const void *b); extern int git_index_entry__cmp(const void *a, const void *b);
extern int git_index_entry__cmp_icase(const void *a, const void *b); extern int git_index_entry__cmp_icase(const void *a, const void *b);
extern void git_index_set_ignore_case(git_index *index, bool ignore_case);
extern int git_index_read_tree_match( extern int git_index_read_tree_match(
git_index *index, git_tree *tree, git_strarray *strspec); git_index *index, git_tree *tree, git_strarray *strspec);
......
...@@ -566,6 +566,7 @@ int git_tree__write_index( ...@@ -566,6 +566,7 @@ int git_tree__write_index(
git_oid *oid, git_index *index, git_repository *repo) git_oid *oid, git_index *index, git_repository *repo)
{ {
int ret; int ret;
bool old_ignore_case = false;
assert(oid && index && repo); assert(oid && index && repo);
...@@ -580,8 +581,21 @@ int git_tree__write_index( ...@@ -580,8 +581,21 @@ int git_tree__write_index(
return 0; return 0;
} }
/* The tree cache didn't help us */ /* The tree cache didn't help us; we'll have to write
* out a tree. If the index is ignore_case, we'll must
* make it case-sensitive for the duration of the tree-write
* operation. */
if (index->ignore_case) {
old_ignore_case = true;
git_index_set_ignore_case(index, false);
}
ret = write_tree(oid, repo, index, "", 0); ret = write_tree(oid, repo, index, "", 0);
if (old_ignore_case)
git_index_set_ignore_case(index, true);
return ret < 0 ? ret : 0; return ret < 0 ? ret : 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment