mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-28 06:47:53 +00:00
index: Make _read() cope with index file creation
This commit is contained in:
parent
6445ae994c
commit
da7b78fa44
@ -461,9 +461,10 @@ int git_index_read(git_index *index)
|
||||
return create_index_error(-1,
|
||||
"Failed to read index: The index is in-memory only");
|
||||
|
||||
if (!index->on_disk || git_path_exists(index->index_file_path) == false) {
|
||||
index->on_disk = git_path_exists(index->index_file_path);
|
||||
|
||||
if (!index->on_disk) {
|
||||
git_index_clear(index);
|
||||
index->on_disk = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -484,3 +484,53 @@ void test_index_tests__elocked(void)
|
||||
git_index_free(index);
|
||||
git_repository_free(repo);
|
||||
}
|
||||
|
||||
void test_index_tests__reload_from_disk(void)
|
||||
{
|
||||
git_repository *repo;
|
||||
git_index *read_index;
|
||||
git_index *write_index;
|
||||
|
||||
cl_set_cleanup(&cleanup_myrepo, NULL);
|
||||
|
||||
cl_git_pass(git_futils_mkdir("./myrepo", NULL, 0777, GIT_MKDIR_PATH));
|
||||
cl_git_mkfile("./myrepo/a.txt", "a\n");
|
||||
cl_git_mkfile("./myrepo/b.txt", "b\n");
|
||||
|
||||
cl_git_pass(git_repository_init(&repo, "./myrepo", 0));
|
||||
cl_git_pass(git_repository_index(&write_index, repo));
|
||||
cl_assert_equal_i(false, write_index->on_disk);
|
||||
|
||||
cl_git_pass(git_index_open(&read_index, write_index->index_file_path));
|
||||
cl_assert_equal_i(false, read_index->on_disk);
|
||||
|
||||
/* Stage two new files agaisnt the write_index */
|
||||
cl_git_pass(git_index_add_bypath(write_index, "a.txt"));
|
||||
cl_git_pass(git_index_add_bypath(write_index, "b.txt"));
|
||||
|
||||
cl_assert_equal_sz(2, git_index_entrycount(write_index));
|
||||
|
||||
/* Persist the index changes to disk */
|
||||
cl_git_pass(git_index_write(write_index));
|
||||
cl_assert_equal_i(true, write_index->on_disk);
|
||||
|
||||
/* Sync the changes back into the read_index */
|
||||
cl_assert_equal_sz(0, git_index_entrycount(read_index));
|
||||
|
||||
cl_git_pass(git_index_read(read_index));
|
||||
cl_assert_equal_i(true, read_index->on_disk);
|
||||
|
||||
cl_assert_equal_sz(2, git_index_entrycount(read_index));
|
||||
|
||||
/* Remove the index file from the filesystem */
|
||||
cl_git_pass(p_unlink(write_index->index_file_path));
|
||||
|
||||
/* Sync the changes back into the read_index */
|
||||
cl_git_pass(git_index_read(read_index));
|
||||
cl_assert_equal_i(false, read_index->on_disk);
|
||||
cl_assert_equal_sz(0, git_index_entrycount(read_index));
|
||||
|
||||
git_index_free(read_index);
|
||||
git_index_free(write_index);
|
||||
git_repository_free(repo);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user