summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2010-12-07 19:05:07 -0800
committerShawn O. Pearce <spearce@spearce.org>2010-12-08 10:03:20 -0800
commitd4bbb2e4497335993f4d24f539111dc5d3f8bbcd (patch)
tree227b25ed6316d1bc2e13a35b1e55041ec4e767ce
parente6c39227640536ac1c2e41d8970aeca84b3c6268 (diff)
downloadjgit-d4bbb2e4497335993f4d24f539111dc5d3f8bbcd.tar.gz
jgit-d4bbb2e4497335993f4d24f539111dc5d3f8bbcd.zip
IndexDiff: Clean up tree-index compare for staged files
When comparing the ObjectIds for two tree entries its faster to use the raw buffer compares over allocating ObjectIds and then performing equals on their contents. However, this also needs to consider the raw modes. It is possible for a path to change modes but not ObjectId (e.g. making a file executable), and in this case its still a staged change to report back to the caller. Change-Id: I1a267254c04b3273a97f63c71d1e6718cd9d2fa8 Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java5
1 files changed, 3 insertions, 2 deletions
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 52fc3db791..2ffc54872b 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java
@@ -197,8 +197,9 @@ public class IndexDiff {
if (treeIterator != null) {
if (dirCacheIterator != null) {
- if (!treeIterator.getEntryObjectId().equals(
- dirCacheIterator.getEntryObjectId())) {
+ if (!treeIterator.idEqual(dirCacheIterator)
+ || treeIterator.getEntryRawMode()
+ != dirCacheIterator.getEntryRawMode()) {
// in repo, in index, content diff => changed
changed.add(treeWalk.getPathString());
changesExist = true;