Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.c')
-rw-r--r--src/index.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/index.c b/src/index.c
index 14d8d3684..a931f048a 100644
--- a/src/index.c
+++ b/src/index.c
@@ -658,11 +658,29 @@ int git_index__changed_relative_to(
index->stamp.ino != fs->ino);
}
+/*
+ * Force the next diff to take a look at those entries which have the
+ * same timestamp as the current index.
+ */
+static void truncate_racily_clean(git_index *index)
+{
+ size_t i;
+ git_index_entry *entry;
+ git_time_t ts = index->stamp.mtime;
+
+ git_vector_foreach(&index->entries, i, entry) {
+ if (entry->mtime.seconds == ts || ts == 0)
+ entry->file_size = 0;
+ }
+}
+
int git_index_write(git_index *index)
{
git_indexwriter writer = GIT_INDEXWRITER_INIT;
int error;
+ truncate_racily_clean(index);
+
if ((error = git_indexwriter_init(&writer, index)) == 0)
error = git_indexwriter_commit(&writer);