mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 13:52:17 +00:00
index: add tests for the tree cache
These test that we invalidate at the right levels and that we remove the tree cache when clearing the index.
This commit is contained in:
parent
6843cebe17
commit
ee4db1c16e
110
tests/index/cache.c
Normal file
110
tests/index/cache.c
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
#include "clar_libgit2.h"
|
||||||
|
#include "git2.h"
|
||||||
|
#include "index.h"
|
||||||
|
#include "tree-cache.h"
|
||||||
|
|
||||||
|
static git_repository *g_repo;
|
||||||
|
|
||||||
|
void test_index_cache__initialize(void)
|
||||||
|
{
|
||||||
|
g_repo = cl_git_sandbox_init("testrepo");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_index_cache__cleanup(void)
|
||||||
|
{
|
||||||
|
cl_git_sandbox_cleanup();
|
||||||
|
g_repo = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_index_cache__read_tree_no_children(void)
|
||||||
|
{
|
||||||
|
git_index *index;
|
||||||
|
git_index_entry entry;
|
||||||
|
git_tree *tree;
|
||||||
|
git_oid id;
|
||||||
|
|
||||||
|
cl_git_pass(git_index_new(&index));
|
||||||
|
cl_assert(index->tree == NULL);
|
||||||
|
cl_git_pass(git_oid_fromstr(&id, "45dd856fdd4d89b884c340ba0e047752d9b085d6"));
|
||||||
|
cl_git_pass(git_tree_lookup(&tree, g_repo, &id));
|
||||||
|
cl_git_pass(git_index_read_tree(index, tree));
|
||||||
|
git_tree_free(tree);
|
||||||
|
|
||||||
|
cl_assert(index->tree);
|
||||||
|
cl_assert(git_oid_equal(&id, &index->tree->oid));
|
||||||
|
cl_assert_equal_i(0, index->tree->children_count);
|
||||||
|
cl_assert_equal_i(0, index->tree->entries); /* 0 is a placeholder here */
|
||||||
|
|
||||||
|
memset(&entry, 0x0, sizeof(git_index_entry));
|
||||||
|
entry.path = "new.txt";
|
||||||
|
entry.mode = GIT_FILEMODE_BLOB;
|
||||||
|
git_oid_fromstr(&entry.id, "45b983be36b73c0788dc9cbcb76cbb80fc7bb057");
|
||||||
|
|
||||||
|
cl_git_pass(git_index_add(index, &entry));
|
||||||
|
cl_assert_equal_i(-1, index->tree->entries);
|
||||||
|
|
||||||
|
git_index_free(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_index_cache__read_tree_children(void)
|
||||||
|
{
|
||||||
|
git_index *index;
|
||||||
|
git_index_entry entry;
|
||||||
|
git_tree *tree;
|
||||||
|
const git_tree_cache *cache;
|
||||||
|
git_oid tree_id;
|
||||||
|
|
||||||
|
cl_git_pass(git_repository_index(&index, g_repo));
|
||||||
|
cl_git_pass(git_index_clear(index));
|
||||||
|
cl_assert(index->tree == NULL);
|
||||||
|
|
||||||
|
|
||||||
|
/* add a bunch of entries at different levels */
|
||||||
|
memset(&entry, 0x0, sizeof(git_index_entry));
|
||||||
|
entry.path = "top-level";
|
||||||
|
entry.mode = GIT_FILEMODE_BLOB;
|
||||||
|
git_oid_fromstr(&entry.id, "45b983be36b73c0788dc9cbcb76cbb80fc7bb057");
|
||||||
|
cl_git_pass(git_index_add(index, &entry));
|
||||||
|
|
||||||
|
|
||||||
|
entry.path = "subdir/some-file";
|
||||||
|
cl_git_pass(git_index_add(index, &entry));
|
||||||
|
|
||||||
|
entry.path = "subdir/even-deeper/some-file";
|
||||||
|
cl_git_pass(git_index_add(index, &entry));
|
||||||
|
|
||||||
|
entry.path = "subdir2/some-file";
|
||||||
|
cl_git_pass(git_index_add(index, &entry));
|
||||||
|
|
||||||
|
cl_git_pass(git_index_write_tree(&tree_id, index));
|
||||||
|
cl_git_pass(git_index_clear(index));
|
||||||
|
cl_assert(index->tree == NULL);
|
||||||
|
|
||||||
|
cl_git_pass(git_tree_lookup(&tree, g_repo, &tree_id));
|
||||||
|
cl_git_pass(git_index_read_tree(index, tree));
|
||||||
|
git_tree_free(tree);
|
||||||
|
|
||||||
|
cl_assert(index->tree);
|
||||||
|
cl_assert_equal_i(2, index->tree->children_count);
|
||||||
|
|
||||||
|
/* override with a slightly different id, also dummy */
|
||||||
|
entry.path = "subdir/some-file";
|
||||||
|
git_oid_fromstr(&entry.id, "45b983be36b73c0788dc9cbcb76cbb80fc7bb058");
|
||||||
|
cl_git_pass(git_index_add(index, &entry));
|
||||||
|
|
||||||
|
cl_assert_equal_i(-1, index->tree->entries);
|
||||||
|
|
||||||
|
cache = git_tree_cache_get(index->tree, "subdir");
|
||||||
|
cl_assert(cache);
|
||||||
|
cl_assert_equal_i(-1, cache->entries);
|
||||||
|
|
||||||
|
cache = git_tree_cache_get(index->tree, "subdir/even-deeper");
|
||||||
|
cl_assert(cache);
|
||||||
|
cl_assert_equal_i(0, cache->entries);
|
||||||
|
|
||||||
|
cache = git_tree_cache_get(index->tree, "subdir2");
|
||||||
|
cl_assert(cache);
|
||||||
|
cl_assert_equal_i(0, cache->entries);
|
||||||
|
|
||||||
|
git_index_free(index);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user