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>
This commit is contained in:
Shawn O. Pearce 2010-12-07 19:05:07 -08:00
parent e6c3922764
commit d4bbb2e449
1 changed files with 3 additions and 2 deletions

View File

@ -197,8 +197,9 @@ public boolean diff() throws IOException {
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;