} else if (childrenWithMergeInfo != null && !childrenWithMergeInfo.isEmpty()) {
MergePath targetMergePath = (MergePath) childrenWithMergeInfo.get(0);
SVNMergeRangeList remainingRanges = targetMergePath.myRemainingRanges;
if (remainingRanges != null && !remainingRanges.isEmpty()) {
SVNMergeRange[] ranges = remainingRanges.getRanges();
SVNMergeRange range = ranges[0];
if ((!isRollBack && range.getStartRevision() > revision2) ||
(isRollBack && range.getStartRevision() < revision2)) {
targetStart = revision2;
} else {
targetStart = range.getStartRevision();
}
}
}
}
if (editor == null) {
editor = new SVNRemoteDiffEditor(adminArea, adminArea.getRoot(), mergeCallback, myRepository2,
defaultStart, revision2, myIsDryRun, this, this);
} else {
editor.reset(defaultStart, revision2);
}
SVNURL oldURL = ensureSessionURL(myRepository2, url1);
try {
final SVNDepth reportDepth = depth;
final long reportStart = targetStart;
final String targetPath = targetWCPath.getAbsolutePath().replace(File.separatorChar, '/');
myRepository1.diff(url2, revision2, revision2, null, myIsIgnoreAncestry, depth, true,
new ISVNReporterBaton() {
public void report(ISVNReporter reporter) throws SVNException {
reporter.setPath("", null, reportStart, reportDepth, false);
if (honorMergeInfo && childrenWithMergeInfo != null) {
for (int i = 1; i < childrenWithMergeInfo.size(); i++) {
MergePath childMergePath = (MergePath) childrenWithMergeInfo.get(i);
MergePath parent = null;
if (childMergePath == null || childMergePath.myIsAbsent) {
continue;
}
Object[] childrenWithMergeInfoArray = childrenWithMergeInfo.toArray();
int parentIndex = findNearestAncestor(childrenWithMergeInfoArray, false, childMergePath.myPath);
if (parentIndex >= 0 && parentIndex < childrenWithMergeInfoArray.length) {
parent = (MergePath) childrenWithMergeInfoArray[parentIndex];
}
boolean nearestParentIsTarget = parent.myPath.equals(targetPath);
SVNMergeRange range = null;
if (childMergePath.myRemainingRanges != null &&
!childMergePath.myRemainingRanges.isEmpty()) {
SVNMergeRangeList remainingRangesList = childMergePath.myRemainingRanges;
SVNMergeRange[] remainingRanges = remainingRangesList.getRanges();
range = remainingRanges[0];
if ((!isRollBack && range.getStartRevision() > revision2) ||
(isRollBack && range.getStartRevision() < revision2)) {
continue;
} else if (parent.myRemainingRanges != null && !parent.myRemainingRanges.isEmpty()) {
SVNMergeRange parentRange = parent.myRemainingRanges.getRanges()[0];
SVNMergeRange childRange = childMergePath.myRemainingRanges.getRanges()[0];
if (parentRange.getStartRevision() == childRange.getStartRevision()) {
continue;
}
}
} else {
if ((parent.myRemainingRanges == null || parent.myRemainingRanges.isEmpty())