]> git.proxmox.com Git - libgit2.git/commitdiff
Fix typo setting sorted flag when reloading index
authorRussell Belfer <rb@github.com>
Tue, 4 Feb 2014 18:33:30 +0000 (10:33 -0800)
committerRussell Belfer <rb@github.com>
Tue, 4 Feb 2014 18:33:30 +0000 (10:33 -0800)
This fixes a typo I made for setting the sorted flag on the index
after a reload.  That typo didn't actually cause any test failures
so I'm also adding a test that explicitly checks that the index is
correctly sorted after a reload when ignoring case and when not.

src/index.c
tests/index/tests.c

index 1ab126c87428b805398d58eee7ae21ea8cf1436a..42eb5fd499fe67358518817100382def767d4e0d 100644 (file)
@@ -1811,8 +1811,10 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
 
 #undef seek_forward
 
-       /* Entries are stored case-sensitively on disk. */
-       git_vector_set_sorted(&index->entries, index->ignore_case);
+       /* Entries are stored case-sensitively on disk, so re-sort now if
+        * in-memory index is supposed to be case-insensitive
+        */
+       git_vector_set_sorted(&index->entries, !index->ignore_case);
        git_vector_sort(&index->entries);
 
        return 0;
index 55a2f2c5103b5aa503edbe3448a7ee0396527ab7..6e28af1f76068f2a81809273b2c2ad6c71d2ff13 100644 (file)
@@ -543,3 +543,37 @@ void test_index_tests__corrupted_extension(void)
 
        cl_git_fail_with(git_index_open(&index, TEST_INDEXBAD_PATH), GIT_ERROR);
 }
+
+static void assert_index_is_sorted(git_index *index)
+{
+       git_vector *entries = &index->entries;
+       size_t i;
+
+       cl_assert(git_vector_is_sorted(entries));
+
+       for (i = 1; i < git_vector_length(entries); ++i) {
+               git_index_entry *prev = git_vector_get(entries, i - 1);
+               git_index_entry *curr = git_vector_get(entries, i);
+               cl_assert(index->entries._cmp(prev, curr) <= 0);
+       }
+}
+
+void test_index_tests__reload_while_ignoring_case(void)
+{
+       git_index *index;
+       unsigned int caps;
+
+       cl_git_pass(git_index_open(&index, TEST_INDEX_PATH));
+       assert_index_is_sorted(index);
+
+       caps = git_index_caps(index);
+       cl_git_pass(git_index_set_caps(index, caps &= ~GIT_INDEXCAP_IGNORE_CASE));
+       cl_git_pass(git_index_read(index, true));
+       assert_index_is_sorted(index);
+
+       cl_git_pass(git_index_set_caps(index, caps | GIT_INDEXCAP_IGNORE_CASE));
+       cl_git_pass(git_index_read(index, true));
+       assert_index_is_sorted(index);
+
+       git_index_free(index);
+}