diff options
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java index 03d2b8e9c8..f52150457d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java @@ -273,8 +273,13 @@ public class DirCacheCheckout { void processEntry(CanonicalTreeParser m, DirCacheBuildIterator i, WorkingTreeIterator f) { if (m != null) { - update(m.getEntryPathString(), m.getEntryObjectId(), - m.getEntryFileMode()); + if (i == null || f == null || !m.idEqual(i) + || f.isModified(i.getDirCacheEntry(), true, + config_filemode(), repo.getFS())) { + update(m.getEntryPathString(), m.getEntryObjectId(), + m.getEntryFileMode()); + } else + keep(i.getDirCacheEntry()); } else { if (f != null) { if (walk.isDirectoryFileConflict()) { |