mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 23:26:39 +00:00
Merged pull request #140 from jpfender/insert-replace.
index: Allow user to toggle whether to replace an index entry
This commit is contained in:
commit
f16c0a9db7
@ -203,15 +203,16 @@ GIT_EXTERN(int) git_index_remove(git_index *index, int position);
|
|||||||
/**
|
/**
|
||||||
* Insert an entry into the index.
|
* Insert an entry into the index.
|
||||||
* A full copy (including the 'path' string) of the given
|
* A full copy (including the 'path' string) of the given
|
||||||
* 'source_entry' will be inserted on the index; if the index
|
* 'source_entry' will be inserted on the index; if the
|
||||||
* already contains an entry for the same path, the entry
|
* replace flag is not set and the index already contains
|
||||||
* will be updated.
|
* an entry for the same path, the entry will be updated.
|
||||||
*
|
*
|
||||||
* @param index an existing index object
|
* @param index an existing index object
|
||||||
* @param source_entry new entry object
|
* @param source_entry new entry object
|
||||||
|
* @param replace if set, existing entries will be replaced
|
||||||
* @return 0 on success, otherwise an error code
|
* @return 0 on success, otherwise an error code
|
||||||
*/
|
*/
|
||||||
GIT_EXTERN(int) git_index_insert(git_index *index, const git_index_entry *source_entry);
|
GIT_EXTERN(int) git_index_insert(git_index *index, const git_index_entry *source_entry, int replace);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a pointer to one of the entries in the index
|
* Get a pointer to one of the entries in the index
|
||||||
|
12
src/index.c
12
src/index.c
@ -330,7 +330,7 @@ int git_index_add(git_index *index, const char *rel_path, int stage)
|
|||||||
entry.flags |= (stage << GIT_IDXENTRY_STAGESHIFT);
|
entry.flags |= (stage << GIT_IDXENTRY_STAGESHIFT);
|
||||||
entry.path = (char *)rel_path; /* do not duplicate; index_insert already does this */
|
entry.path = (char *)rel_path; /* do not duplicate; index_insert already does this */
|
||||||
|
|
||||||
return git_index_insert(index, &entry);
|
return git_index_insert(index, &entry, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sort_index(git_index *index)
|
void sort_index(git_index *index)
|
||||||
@ -338,7 +338,7 @@ void sort_index(git_index *index)
|
|||||||
git_vector_sort(&index->entries);
|
git_vector_sort(&index->entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
int git_index_insert(git_index *index, const git_index_entry *source_entry)
|
int git_index_insert(git_index *index, const git_index_entry *source_entry, int replace)
|
||||||
{
|
{
|
||||||
git_index_entry *entry;
|
git_index_entry *entry;
|
||||||
size_t path_length;
|
size_t path_length;
|
||||||
@ -374,13 +374,15 @@ int git_index_insert(git_index *index, const git_index_entry *source_entry)
|
|||||||
/* look if an entry with this path already exists */
|
/* look if an entry with this path already exists */
|
||||||
position = git_index_find(index, source_entry->path);
|
position = git_index_find(index, source_entry->path);
|
||||||
|
|
||||||
/* if no entry exists, add the entry at the end;
|
/* if no entry exists and replace is not set,
|
||||||
|
* add the entry at the end;
|
||||||
* the index is no longer sorted */
|
* the index is no longer sorted */
|
||||||
if (position == GIT_ENOTFOUND) {
|
if (!replace || position == GIT_ENOTFOUND) {
|
||||||
if (git_vector_insert(&index->entries, entry) < GIT_SUCCESS)
|
if (git_vector_insert(&index->entries, entry) < GIT_SUCCESS)
|
||||||
return GIT_ENOMEM;
|
return GIT_ENOMEM;
|
||||||
|
|
||||||
/* if a previous entry exists, replace it */
|
/* if a previous entry exists and replace is set,
|
||||||
|
* replace it */
|
||||||
} else {
|
} else {
|
||||||
git_index_entry **entry_array = (git_index_entry **)index->entries.contents;
|
git_index_entry **entry_array = (git_index_entry **)index->entries.contents;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user