diff options
author | Russell Belfer <rb@github.com> | 2014-02-07 16:48:27 -0800 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-04-17 14:43:45 -0700 |
commit | 54edbb9871ad543baefc62310512719fc70539be (patch) | |
tree | a1d7e07f2a968d5bdd0fe07623adb1fadea49c73 /src/index.c | |
parent | 27e54bcf82fe27bdfadbaa9c5383ee8a948ea33c (diff) | |
download | libgit2-54edbb9871ad543baefc62310512719fc70539be.tar.gz |
Add index snapshot and use it for iterator
Diffstat (limited to 'src/index.c')
-rw-r--r-- | src/index.c | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/src/index.c b/src/index.c index 8bc5cb13c..58b359bfe 100644 --- a/src/index.c +++ b/src/index.c @@ -1056,21 +1056,26 @@ int git_index_remove_directory(git_index *index, const char *dir, int stage) return error; } -int git_index__find( - size_t *out, git_index *index, const char *path, size_t path_len, int stage) +int git_index__find_in_entries( + size_t *out, git_vector *entries, git_vector_cmp entry_cmp, + const char *path, size_t path_len, int stage) { struct entry_srch_key srch_key; - - assert(path); - - git_vector_sort(&index->entries); - srch_key.path = path; srch_key.path_len = !path_len ? strlen(path) : path_len; srch_key.stage = stage; + return git_vector_bsearch2(out, entries, entry_cmp, &srch_key); +} - return git_vector_bsearch2( - out, &index->entries, index->entries_search, &srch_key); +int git_index__find( + size_t *out, git_index *index, const char *path, size_t path_len, int stage) +{ + assert(index && path); + + git_vector_sort(&index->entries); + + return git_index__find_in_entries( + out, &index->entries, index->entries_search, path, path_len, stage); } int git_index_find(size_t *at_pos, git_index *index, const char *path) @@ -2442,3 +2447,22 @@ int git_index_update_all( return error; } + +int git_index__snapshot(git_vector *entries, git_index *index) +{ + int error; + + GIT_REFCOUNT_INC(index); + git_vector_sort(&index->entries); + error = git_vector_dup(entries, &index->entries, index->entries._cmp); + + if (error < 0) + git_index_free(index); + + return error; +} + +void git_index__release_snapshot(git_index *index) +{ + git_index_free(index); +} |