diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2015-12-16 15:18:42 +0100 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2015-12-16 15:18:42 +0100 |
commit | f824259e674e6fa483f0b6651beff2d82127be6f (patch) | |
tree | 41d1fd8db670d5649959009eb6052da53595b932 | |
parent | 7f2c1469f8565fa8809c03aa7aa0ffae90a99c66 (diff) | |
parent | 879ebab314fe60cc737d436f62f190260ce13c1a (diff) | |
download | libgit2-f824259e674e6fa483f0b6651beff2d82127be6f.tar.gz |
Merge pull request #3549 from libgit2/vmg/index-fill
merge: Use `git_index__fill` to populate the index
-rw-r--r-- | src/index.c | 37 | ||||
-rw-r--r-- | src/index.h | 2 | ||||
-rw-r--r-- | src/merge.c | 7 |
3 files changed, 41 insertions, 5 deletions
diff --git a/src/index.c b/src/index.c index 26cd83851..60e4d443c 100644 --- a/src/index.c +++ b/src/index.c @@ -1542,6 +1542,43 @@ int git_index_remove_bypath(git_index *index, const char *path) return 0; } +int git_index__fill(git_index *index, const git_vector *source_entries) +{ + const git_index_entry *source_entry = NULL; + size_t i; + int ret = 0; + + assert(index); + + if (git_mutex_lock(&index->lock) < 0) { + giterr_set(GITERR_OS, "Unable to acquire index lock"); + return -1; + } + + git_vector_foreach(source_entries, i, source_entry) { + git_index_entry *entry = NULL; + + if ((ret = index_entry_dup(&entry, index, source_entry)) < 0) + break; + + entry->flags_extended |= GIT_IDXENTRY_UPTODATE; + + ret = git_vector_insert(&index->entries, entry); + if (ret < 0) + break; + + INSERT_IN_MAP(index, entry, ret); + if (ret < 0) + break; + } + + if (!ret) + git_vector_sort(&index->entries); + + git_mutex_unlock(&index->lock); + return ret; +} + int git_index_add(git_index *index, const git_index_entry *source_entry) { diff --git a/src/index.h b/src/index.h index 9baf976ee..0909da889 100644 --- a/src/index.h +++ b/src/index.h @@ -113,6 +113,8 @@ GIT_INLINE(bool) git_index_entry_newer_than_index( extern int git_index__find_pos( size_t *at_pos, git_index *index, const char *path, size_t path_len, int stage); +extern int git_index__fill(git_index *index, const git_vector *source_entries); + extern void git_index__set_ignore_case(git_index *index, bool ignore_case); extern unsigned int git_index__create_mode(unsigned int mode); diff --git a/src/merge.c b/src/merge.c index 9eb3b0904..61ff93c19 100644 --- a/src/merge.c +++ b/src/merge.c @@ -1739,7 +1739,6 @@ static int index_from_diff_list(git_index **out, { git_index *index; size_t i; - git_index_entry *entry; git_merge_diff *conflict; int error = 0; @@ -1748,10 +1747,8 @@ static int index_from_diff_list(git_index **out, if ((error = git_index_new(&index)) < 0) return error; - git_vector_foreach(&diff_list->staged, i, entry) { - if ((error = git_index_add(index, entry)) < 0) - goto on_error; - } + if ((error = git_index__fill(index, &diff_list->staged)) < 0) + goto on_error; git_vector_foreach(&diff_list->conflicts, i, conflict) { const git_index_entry *ancestor = |