From 3f0d0c85d06f0d5ff9ba469c6ab523bfddcc710b Mon Sep 17 00:00:00 2001 From: Philip Kelley Date: Fri, 1 Mar 2013 15:44:18 -0500 Subject: [PATCH 1/2] Disable ignore_case when writing the index to a tree --- src/index.c | 6 ++++-- src/index.h | 2 ++ src/tree.c | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/index.c b/src/index.c index 59649083b..544f33717 100644 --- a/src/index.c +++ b/src/index.c @@ -242,8 +242,10 @@ static unsigned int index_merge_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_path = ignore_case ? index_icmp_path : index_cmp_path; index->entries_search = ignore_case ? index_isrch : index_srch; @@ -388,7 +390,7 @@ int git_index_set_caps(git_index *index, unsigned int caps) } 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; diff --git a/src/index.h b/src/index.h index 9304b5539..7fc138dc8 100644 --- a/src/index.h +++ b/src/index.h @@ -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_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( git_index *index, git_tree *tree, git_strarray *strspec); diff --git a/src/tree.c b/src/tree.c index ec57e8bb8..decd37e71 100644 --- a/src/tree.c +++ b/src/tree.c @@ -566,6 +566,7 @@ int git_tree__write_index( git_oid *oid, git_index *index, git_repository *repo) { int ret; + bool old_ignore_case = false; assert(oid && index && repo); @@ -580,8 +581,21 @@ int git_tree__write_index( 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); + + if (old_ignore_case) + git_index_set_ignore_case(index, true); + return ret < 0 ? ret : 0; } From cb53669e14f9a29b797d108c50d04566f82ab58f Mon Sep 17 00:00:00 2001 From: Philip Kelley Date: Fri, 1 Mar 2013 16:38:13 -0500 Subject: [PATCH 2/2] Rename function to __ prefix --- src/index.c | 4 ++-- src/index.h | 2 +- src/tree.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/index.c b/src/index.c index 544f33717..54db42273 100644 --- a/src/index.c +++ b/src/index.c @@ -242,7 +242,7 @@ static unsigned int index_merge_mode( return index_create_mode(mode); } -void git_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; @@ -390,7 +390,7 @@ int git_index_set_caps(git_index *index, unsigned int caps) } if (old_ignore_case != index->ignore_case) { - git_index_set_ignore_case(index, index->ignore_case); + git_index__set_ignore_case(index, index->ignore_case); } return 0; diff --git a/src/index.h b/src/index.h index 7fc138dc8..2beaa6375 100644 --- a/src/index.h +++ b/src/index.h @@ -48,7 +48,7 @@ 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_icase(const void *a, const void *b); -extern void git_index_set_ignore_case(git_index *index, bool ignore_case); +extern void git_index__set_ignore_case(git_index *index, bool ignore_case); extern int git_index_read_tree_match( git_index *index, git_tree *tree, git_strarray *strspec); diff --git a/src/tree.c b/src/tree.c index decd37e71..11123a18a 100644 --- a/src/tree.c +++ b/src/tree.c @@ -582,19 +582,19 @@ int git_tree__write_index( } /* The tree cache didn't help us; we'll have to write - * out a tree. If the index is ignore_case, we'll must + * out a tree. If the index is ignore_case, we 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); + git_index__set_ignore_case(index, false); } ret = write_tree(oid, repo, index, "", 0); if (old_ignore_case) - git_index_set_ignore_case(index, true); + git_index__set_ignore_case(index, true); return ret < 0 ? ret : 0; }