protected boolean isRecordMergeInfo() { boolean defaultOption = super.isRecordMergeInfo(); if (skipExtendedMerge()) { return defaultOption; } boolean recordMergeInfo = myRecordMergeInfo == null ? true : myRecordMergeInfo.booleanValue(); return recordMergeInfo && defaultOption; }
protected ISVNEntryHandler getMergeInfoEntryHandler(String mergeSrcPath, SVNURL sourceRootURL, long revision1, long revision2, SVNRepository repository, SVNDepth depth, List childrenWithMergeInfo) { if (skipExtendedMerge()) { return super.getMergeInfoEntryHandler(mergeSrcPath, sourceRootURL, revision1, revision2, repository, depth, childrenWithMergeInfo); } return new MergeInfoFetcherExt(mergeSrcPath, sourceRootURL, revision1, revision2, repository, depth, childrenWithMergeInfo); }
protected Object[] calculateRemainingRangeList(File targetFile, SVNEntry entry, SVNURL sourceRoot, boolean[] indirect, SVNURL url1, long revision1, SVNURL url2, long revision2, SVNMergeRange range) throws SVNException { if (skipExtendedMerge() || myCurrentRemainingRanges == null) { return super.calculateRemainingRangeList(targetFile, entry, sourceRoot, indirect, url1, revision1, url2, revision2, range); } // targetMergeInfo and implicitMergeInfo should be processed anyway. Map targetMergeInfo = null; Map implicitMergeInfo = null; if (isHonorMergeInfo()) { myRepository1.setLocation(entry.getSVNURL(), false); Map[] fullMergeInfo = getFullMergeInfo(entry, indirect, SVNMergeInfoInheritance.INHERITED, myRepository1, targetFile, Math.max(revision1, revision2), Math.min(revision1, revision2)); targetMergeInfo = fullMergeInfo[0]; implicitMergeInfo = fullMergeInfo[1]; myRepository1.setLocation(url1, false); } return new Object[]{myCurrentRemainingRanges, targetMergeInfo, implicitMergeInfo}; }
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(); } }
protected SVNRemoteDiffEditor getMergeReportEditor(long defaultStart, long revision, SVNAdminArea adminArea, SVNDepth depth, AbstractDiffCallback mergeCallback, SVNRemoteDiffEditor editor) throws SVNException { if (skipExtendedMerge()) { return super.getMergeReportEditor(defaultStart, revision, adminArea, depth, mergeCallback, editor); } if (editor == null) { editor = new SVNExtendedMergeEditor(this, getExtendedMergeCallback(), adminArea, adminArea.getRoot(), mergeCallback, myPrimaryURL, myRepository2, defaultStart, revision, myIsDryRun, depth, this, this); } else { editor.reset(defaultStart, revision); } File tmp = mergeCallback.createTempDirectory(); setTempDirectory(tmp); return editor; }
protected SVNMergeRangeList calculateRemainingRanges(File file, SVNURL sourceURL, SVNURL[] mergeSources) throws SVNException { if (skipExtendedMerge()) { return null; } SVNEntry entry = myWCAccess.getEntry(file, false); if (entry == null) { return null; } SVNMergeRangeList remainingRangeList = null; if (isHonorMergeInfo()) { MergePath mergeTarget = new MergePath(); Map targetMergeInfo; Map implicitMergeInfo; SVNRepository repository = getRepository(entry.getSVNURL()); SVNURL sourceRoot = repository.getRepositoryRoot(true); boolean[] indirect = {false}; Map[] fullMergeInfo = getFullMergeInfo(entry, indirect, SVNMergeInfoInheritance.INHERITED, repository, file, Math.max(myRevision1, myRevision2), Math.min(myRevision1, myRevision2)); targetMergeInfo = fullMergeInfo[0]; implicitMergeInfo = fullMergeInfo[1]; mergeSources = getMergeSources(sourceURL, mergeSources); SVNURL url1 = mergeSources[0]; SVNURL url2 = mergeSources[1]; calculateRemainingRanges(null, mergeTarget, sourceRoot, url1, myRevision1, url2, myRevision2, targetMergeInfo, implicitMergeInfo, false, entry, repository); remainingRangeList = mergeTarget.myRemainingRanges; } return remainingRangeList; }