From 245adf4f3cc1d47352e626ef53372d07761d84cf Mon Sep 17 00:00:00 2001 From: "Kirill A. Shutemov" Date: Sat, 2 Jul 2011 01:08:42 +0300 Subject: [PATCH] index: introduce git_index_uniq() function It removes all entries with equal path except last added. On large indexes git_index_append() + git_index_uniq() before writing is *much* faster, than git_index_add(). Signed-off-by: Kirill A. Shutemov --- include/git2/index.h | 7 +++++++ src/index.c | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/include/git2/index.h b/include/git2/index.h index 83a18e160..d34ed0a92 100644 --- a/include/git2/index.h +++ b/include/git2/index.h @@ -172,6 +172,13 @@ GIT_EXTERN(int) git_index_write(git_index *index); */ GIT_EXTERN(int) git_index_find(git_index *index, const char *path); +/** + * Remove all entries with equal path except last added + * + * @param index an existing index object + */ +GIT_EXTERN(void) git_index_uniq(git_index *index); + /** * Add or update an index entry from a file in disk * diff --git a/src/index.c b/src/index.c index fd905d007..dd33db92a 100644 --- a/src/index.c +++ b/src/index.c @@ -487,6 +487,11 @@ int git_index_find(git_index *index, const char *path) return git_vector_bsearch2(&index->entries, index_srch, path); } +void git_index_uniq(git_index *index) +{ + git_vector_uniq(&index->entries); +} + const git_index_entry_unmerged *git_index_get_unmerged_bypath(git_index *index, const char *path) { int pos;