From 07cae6e6c1d6982cf6b919e90e79330793c74a15 Mon Sep 17 00:00:00 2001 From: Lluis Sanchez Date: Tue, 26 Oct 2010 11:18:18 +0200 Subject: [PATCH] Optimize DirCacheCheckout When checking out a tree, files that are identical to the file in the current index and working directory don't need to be updated. Change-Id: I9e025a53facd42410796eae821baaeff684a25c5 Signed-off-by: Chris Aniszczyk --- .../src/org/eclipse/jgit/dircache/DirCacheCheckout.java | 9 +++++++-- 1 file 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 03d2b8e9c..f52150457 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 void prescanOneTree() 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()) {