From d383e594a014ffdd21090a48ee26b011b6814c02 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Mon, 11 Jun 2007 22:13:22 +0200 Subject: [PATCH] Only update index if we think a change occured Java does not track as much info as native Git, but I think modification time is a very good indicator. Signed-off-by: Robin Rosenberg --- .../src/org/spearce/jgit/lib/GitIndex.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/GitIndex.java b/org.spearce.jgit/src/org/spearce/jgit/lib/GitIndex.java index 373167dc..a49bbedf 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/GitIndex.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/GitIndex.java @@ -256,17 +256,24 @@ public class GitIndex { public boolean update(File f, Repository db) throws IOException { boolean modified = false; - if (mtime != f.lastModified()) + long lm = f.lastModified() * 1000000L; + if (mtime != lm) modified = true; mtime = f.lastModified() * 1000000L; if (size != f.length()) modified = true; - size = (int) f.length(); - ObjectWriter writer = new ObjectWriter(db); - ObjectId newsha1 = sha1 = writer.writeBlob(f); - if (!newsha1.equals(sha1)) + if (File_canExecute(f) != FileMode.EXECUTABLE_FILE.equals(mode)) { + mode = FileMode.EXECUTABLE_FILE.getBits(); modified = true; - sha1 = newsha1; + } + if (modified) { + size = (int) f.length(); + ObjectWriter writer = new ObjectWriter(db); + ObjectId newsha1 = sha1 = writer.writeBlob(f); + if (!newsha1.equals(sha1)) + modified = true; + sha1 = newsha1; + } return modified; } -- 2.11.4.GIT