From a66a7d90fd4c3ec3587d2f314e785ab5bba71b6f Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Tue, 7 Dec 2010 19:08:02 -0800 Subject: [PATCH] IndexDiff: Use isModified() when comparing index-worktree The isModified() is more efficient because it can skip over files that are stat clean, without needing to scan them. This is useful to efficently work on paths that were already staged and thus differ between HEAD and the index, but not between the index and the working tree. Change-Id: I4418202e612f0571974e0898050d987c6c280966 Signed-off-by: Shawn O. Pearce --- .../tst/org/eclipse/jgit/lib/IndexDiffTest.java | 7 ++++--- org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java index 0ce85b4be0..773ebbff25 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java @@ -252,8 +252,10 @@ public class IndexDiffTest extends RepositoryTestCase { IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator); diff.diff(); assertEquals(1, diff.getAssumeUnchanged().size()); - assertEquals(2, diff.getModified().size()); + assertEquals(1, diff.getModified().size()); assertEquals(0, diff.getChanged().size()); + assertTrue(diff.getAssumeUnchanged().contains("file2")); + assertTrue(diff.getModified().contains("file")); git.add().addFilepattern(".").call(); @@ -261,10 +263,9 @@ public class IndexDiffTest extends RepositoryTestCase { diff = new IndexDiff(db, Constants.HEAD, iterator); diff.diff(); assertEquals(1, diff.getAssumeUnchanged().size()); - assertEquals(1, diff.getModified().size()); + assertEquals(0, diff.getModified().size()); assertEquals(1, diff.getChanged().size()); assertTrue(diff.getAssumeUnchanged().contains("file2")); - assertTrue(diff.getModified().contains("file2")); assertTrue(diff.getChanged().contains("file")); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java index 2ffc54872b..3c63e251b3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java @@ -232,7 +232,8 @@ public class IndexDiff { missing.add(treeWalk.getPathString()); changesExist = true; } else { - if (!dirCacheIterator.idEqual(workingTreeIterator)) { + if (workingTreeIterator.isModified( + dirCacheIterator.getDirCacheEntry(), true)) { // in index, in workdir, content differs => modified modified.add(treeWalk.getPathString()); changesExist = true; -- 2.39.5