try {
while (tw.next()) {
if (monitor.isCanceled())
throw new InterruptedException();
AbstractTreeIterator compareVersionIterator = tw.getTree(
compareTreeIndex, AbstractTreeIterator.class);
AbstractTreeIterator baseVersionIterator = tw.getTree(
baseTreeIndex, AbstractTreeIterator.class);
if (checkIgnored
&& baseVersionIterator != null
&& ((WorkingTreeIterator) baseVersionIterator)
.isEntryIgnored())
continue;
if (compareVersionIterator != null
&& baseVersionIterator != null) {
boolean equalContent = compareVersionIterator
.getEntryObjectId().equals(
baseVersionIterator.getEntryObjectId());
if (equalContent)
continue;
}
String encoding = null;
GitFileRevision compareRev = null;
if (compareVersionIterator != null) {
String entryPath = compareVersionIterator.getEntryPathString();
encoding = CompareCoreUtils.getResourceEncoding(repository, entryPath);
if (!useIndex)
compareRev = GitFileRevision.inCommit(repository,
compareCommit, entryPath,
tw.getObjectId(compareTreeIndex));
else
compareRev = GitFileRevision.inIndex(repository,
entryPath);
}
GitFileRevision baseRev = null;
if (baseVersionIterator != null) {
String entryPath = baseVersionIterator.getEntryPathString();
if (encoding == null) {
encoding = CompareCoreUtils.getResourceEncoding(repository, entryPath);
}
baseRev = GitFileRevision.inCommit(repository, baseCommit,
entryPath, tw.getObjectId(baseTreeIndex));
}
if (compareVersionIterator != null
&& baseVersionIterator != null) {
monitor.setTaskName(baseVersionIterator
.getEntryPathString());
// content exists on both sides
add(result, baseVersionIterator.getEntryPathString(),
new DiffNode(new FileRevisionTypedElement(compareRev, encoding),
new FileRevisionTypedElement(baseRev, encoding)));
} else if (baseVersionIterator != null
&& compareVersionIterator == null) {
monitor.setTaskName(baseVersionIterator
.getEntryPathString());
// only on base side
add(result, baseVersionIterator.getEntryPathString(),
new DiffNode(Differencer.DELETION | Differencer.RIGHT, null, null,
new FileRevisionTypedElement(baseRev, encoding)));
} else if (compareVersionIterator != null
&& baseVersionIterator == null) {
monitor.setTaskName(compareVersionIterator