From c2e1b0581ada8453447bdeaacca92d972d83b1a8 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Fri, 5 Jun 2015 18:26:49 -0700 Subject: [PATCH] Only write index if updated when passing GIT_DIFF_UPDATE_INDEX When diffing the index with the workdir and GIT_DIFF_UPDATE_INDEX has been passed, the previous implementation was always writing the index to disk even if it wasn't modified. --- src/diff.c | 6 ++++-- src/diff.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/diff.c b/src/diff.c index 12d34a184..c1adcc662 100644 --- a/src/diff.c +++ b/src/diff.c @@ -664,8 +664,10 @@ int git_diff__oid_for_entry( updated_entry.mode = mode; git_oid_cpy(&updated_entry.id, out); - if (!(error = git_repository_index__weakptr(&idx, diff->repo))) + if (!(error = git_repository_index__weakptr(&idx, diff->repo))) { error = git_index_add(idx, &updated_entry); + diff->index_updated = true; + } } git_buf_free(&full_path); @@ -1360,7 +1362,7 @@ int git_diff_index_to_workdir( &b, repo, index, NULL, GIT_ITERATOR_DONT_AUTOEXPAND, pfx, pfx) ); - if (!error && DIFF_FLAG_IS_SET(*diff, GIT_DIFF_UPDATE_INDEX)) + if (!error && DIFF_FLAG_IS_SET(*diff, GIT_DIFF_UPDATE_INDEX) && (*diff)->index_updated) error = git_index_write(index); return error; diff --git a/src/diff.h b/src/diff.h index a202a086c..2dfc2c615 100644 --- a/src/diff.h +++ b/src/diff.h @@ -64,6 +64,7 @@ struct git_diff { git_iterator_type_t new_src; uint32_t diffcaps; git_diff_perfdata perf; + bool index_updated; int (*strcomp)(const char *, const char *); int (*strncomp)(const char *, const char *, size_t);