Commit 3bdc0d4c by Jakob Pfender Committed by Vicent Marti

index.c: Read index after initialization

The current behaviour of git_index_open{bare,inrepo}() is unexpected.
When an index is opened, an in-memory index object is created that is
linked to the index discovered by git_repository_open(). However, this
index object is empty, as the on-disk index is not read. To fully open
the on-disk index file, git_index_read() has to be called. This leads to
confusing behaviour. Consider the following code:

	git_index *idx;
	git_index_open_inrepo(&idx, repo);
	git_index_write(idx);

You would expect this to have no effect, as the index is never
ostensibly manipulated. However, what actually happens is that the index
entries are removed from the on-disk index because the empty in-memory
index object created by open_inrepo() is written back to the disk.

This patch reads the index after opening it.
parent f3cf7f6d
...@@ -148,7 +148,7 @@ static int index_initialize(git_index **index_out, git_repository *owner, const ...@@ -148,7 +148,7 @@ static int index_initialize(git_index **index_out, git_repository *owner, const
index->on_disk = 1; index->on_disk = 1;
*index_out = index; *index_out = index;
return GIT_SUCCESS; return git_index_read(index);
} }
int git_index_open_bare(git_index **index_out, const char *index_path) int git_index_open_bare(git_index **index_out, const char *index_path)
......
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