Commit 245adf4f3cc1d47352e626ef53372d07761d84cf

Kirill A. Shutemov 2011-07-02T01:08:42

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 <kirill@shutemov.name>

diff --git a/include/git2/index.h b/include/git2/index.h
index 83a18e1..d34ed0a 100644
--- a/include/git2/index.h
+++ b/include/git2/index.h
@@ -173,6 +173,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
  *
  * The file `path` must be relative to the repository's
diff --git a/src/index.c b/src/index.c
index fd905d0..dd33db9 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;