protected void addMergeSource(String mergeSource, SVNURL[] mergeSources, File target, SVNMergeRangeList remainingRanges, boolean adjustMergeInfo, SVNCopySource targetCopySource) throws SVNException { if (getPendingFiles().contains(target)) { SVNDebugLog.getDefaultLog().logFine(SVNLogType.WC, "ext merge: skip new additional target " + target.getAbsolutePath()); return; } getPendingFiles().add(target); SVNURL sourceURL = myPrimaryURL.appendPath(mergeSource, false); mergeSources = getMergeSources(sourceURL, mergeSources); SVNURL url1 = mergeSources[0]; SVNURL url2 = mergeSources[1]; BufferedWriter writer = createWriter(); SVNMergeTask mergeTask = new SVNMergeTask(url1, url2, target, remainingRanges, adjustMergeInfo, targetCopySource); SVNDebugLog.getDefaultLog().logFine(SVNLogType.WC, "ext merge: " + mergeTask.toString()); try { mergeTask.writeTo(writer); } catch (IOException e) { SVNErrorManager.error(SVNErrorMessage.create(SVNErrorCode.IO_ERROR, e), SVNLogType.DEFAULT); } finally { SVNFileUtil.closeFile(writer); } }
protected void doDirectoryMerge(SVNURL url1, long revision1, SVNURL url2, long revision2, SVNEntry parentEntry, SVNAdminArea adminArea, SVNDepth depth) throws SVNException { if (skipExtendedMerge()) { super.doDirectoryMerge(url1, revision1, url2, revision2, parentEntry, adminArea, depth); return; } myPrimaryURL = revision1 < revision2 ? url1 : url2; mySecondURL = revision1 < revision2 ? url2 : url1; myRevision1 = revision1; myRevision2 = revision2; try { super.doDirectoryMerge(url1, revision1, url2, revision2, parentEntry, adminArea, depth); doAdditionalMerge(); } catch (Throwable th) { SVNErrorMessage error = SVNErrorMessage.create(SVNErrorCode.UNKNOWN, "Error while processing extended merge: ''{0}''", new Object[]{th.getMessage()}, SVNErrorMessage.TYPE_ERROR, th); SVNErrorManager.error(error, th, SVNLogType.DEFAULT); } finally { deleteReportFile(); getPendingFiles().clear(); } }