[JGIT PATCH 01/10] Fix TreeWalk.idEqual when both trees are missing the path
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Jan 22, 2009, 23:28 UTC
- Message-ID
- <1232666890-23488-2-git-send-email-spearce@spearce.org>
- In-Reply-To
- <1232666890-23488-1-git-send-email-spearce@spearce.org>
The Javadoc of idEqual() says its simply a faster form of getObjectId(nthA).equals(getObjectId(nthB)), but its code didn't match that definition when both trees didn't exist at the current path.
If a tree doesn't exist for the current path getObjectId() returns ObjectId.zero(), indicating the "magic" 0{40} SHA-1 for the current path. If both tree entries don't exist for the current path, we should be doing a compare of ObjectId.zero() against ObjectId.zero(), which must be true as the values are the same.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org> --- .../src/org/spearce/jgit/treewalk/TreeWalk.java | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java index ecf8851..414587c 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java +++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java @@ -616,7 +616,16 @@ public boolean idEqual(final int nthA, final int nthB) { final AbstractTreeIterator ch = currentHead; final AbstractTreeIterator a = trees[nthA]; final AbstractTreeIterator b = trees[nthB]; - return a.matches == ch && b.matches == ch && a.idEqual(b); + if (a.matches == ch && b.matches == ch) + return a.idEqual(b); + if (a.matches != ch && b.matches != ch) { + // If neither tree matches the current path node then neither + // tree has this entry. In such case the ObjectId is zero(), + // and zero() is always equal to zero(). + // + return true; + } + return false; } /**
-- 1.6.1.399.g0d272