private void runMergeTask(SVNMergeTask mergeTask, long revision1, long revision2) throws SVNException { boolean rollback = revision1 > revision2; SVNURL mergeSource = mergeTask.getMergeSource(); SVNURL mergeSource2 = mergeTask.getMergeSource2(); File mergeTarget = mergeTask.getMergeTarget(); SVNMergeRangeList remainingRanges = mergeTask.getRemainingRanges(); boolean updateWCMergeInfo = mergeTask.isUpdateWCMergeInfo(); SVNCopySource copySource = mergeTask.getTargetCopySource(); if (copySource != null) { copy(copySource, mergeTarget, true); } SVNURL mergeURL1 = !rollback ? mergeSource : mergeSource2; SVNURL mergeURL2 = !rollback ? mergeSource2 : mergeSource; myRepository1.setLocation(mergeURL1, false); myRepository2.setLocation(mergeURL2, false); SVNAdminArea targetArea = retrieve(myWCAccess, mergeTarget.getParentFile()); myCurrentRemainingRanges = remainingRanges; myRecordMergeInfo = Boolean.valueOf(updateWCMergeInfo); try { doFileMerge(mergeURL1, revision1, mergeURL2, revision2, mergeTarget, targetArea, true); } finally { myCurrentRemainingRanges = null; myRecordMergeInfo = null; } }