Examples of SVNMergeRange


Examples of org.tmatesoft.svn.core.SVNMergeRange

                        "Invalid character ''{0}'' found in revision list",
                        new Character(mergeInfo.charAt(0)));
                SVNErrorManager.error(err, SVNLogType.DEFAULT);
            }
           
            SVNMergeRange range = new SVNMergeRange(startRev - 1, startRev, true);
            if (mergeInfo.length() > 0 && mergeInfo.charAt(0) == '-') {
                mergeInfo = mergeInfo.deleteCharAt(0);
                long endRev = parseRevision(mergeInfo);
                if (startRev > endRev) {
                    SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.MERGE_INFO_PARSE_ERROR,
                            "Unable to parse reversed revision range ''{0}-{1}''",
                            new Object[] { new Long(startRev), new Long(endRev) });
                    SVNErrorManager.error(err, SVNLogType.DEFAULT);
                } else if (startRev == endRev) {
                    SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.MERGE_INFO_PARSE_ERROR,
                            "Unable to parse revision range ''{0}-{1}'' with same start and end revisions",
                            new Object[] { new Long(startRev), new Long(endRev) });
                    SVNErrorManager.error(err, SVNLogType.DEFAULT);
                }
                range.setEndRevision(endRev);
            }
           
            if (mergeInfo.length() == 0 || mergeInfo.charAt(0) == '\n') {
                ranges.add(range);
                return (SVNMergeRange[]) ranges.toArray(new SVNMergeRange[ranges.size()]);
            } else if (mergeInfo.length() > 0 && mergeInfo.charAt(0) == ',') {
                ranges.add(range);
                mergeInfo = mergeInfo.deleteCharAt(0);
            } else if (mergeInfo.length() > 0 && mergeInfo.charAt(0) == '*') {
                range.setInheritable(false);
                mergeInfo = mergeInfo.deleteCharAt(0);
                if (mergeInfo.length() == 0 || mergeInfo.charAt(0) == ',' || mergeInfo.charAt(0) == '\n') {
                    ranges.add(range);
                    if (mergeInfo.length() > 0 && mergeInfo.charAt(0) == ',') {
                        mergeInfo = mergeInfo.deleteCharAt(0);
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

        for (Iterator mergeInfoIter = mergeInfo.keySet().iterator(); mergeInfoIter.hasNext();) {
            String mergeSource = (String) mergeInfoIter.next();
            SVNMergeRangeList rangeList = (SVNMergeRangeList) mergeInfo.get(mergeSource);
            SVNMergeRange[] ranges = rangeList.getRanges();
            for (int i = 0; i < ranges.length; i++) {
                SVNMergeRange range = ranges[i];
                Long revFromMap = (Long) myRevisionsMap.get(new Long(range.getStartRevision()));
                if (revFromMap != null && SVNRevision.isValidRevisionNumber(revFromMap.longValue())) {
                    range.setStartRevision(revFromMap.longValue());
                }
                revFromMap = (Long) myRevisionsMap.get(new Long(range.getEndRevision()));
                if (revFromMap != null && SVNRevision.isValidRevisionNumber(revFromMap.longValue())) {
                    range.setEndRevision(revFromMap.longValue());
                }
            }
            Arrays.sort(ranges);
        }
        return mergeInfo;
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

                if (newNearestAncestorIndex != myCurrentAncestorIndex) {
                    MergePath child = (MergePath) childrenWithMergeInfoArray[newNearestAncestorIndex];
                    myCurrentAncestorIndex = newNearestAncestorIndex;
                    if (!child.myIsAbsent && !child.myRemainingRanges.isEmpty() &&
                            !(newNearestAncestorIndex == 0 && myIsTargetHasDummyMergeRange)) {
                        SVNMergeRange ranges[] = child.myRemainingRanges.getRanges();
                        SVNEvent mergeBeginEvent = SVNEventFactory.createSVNEvent(child.myPath,
                                SVNNodeKind.UNKNOWN, null, SVNRepository.INVALID_REVISION,
                                myIsSameRepository ? SVNEventAction.MERGE_BEGIN : SVNEventAction.FOREIGN_MERGE_BEGIN, null, null, ranges[0]);
                        super.handleEvent(mergeBeginEvent, ISVNEventHandler.UNKNOWN);
                    }
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

        }
       
        SVNMergeRange[] listRanges = rangeList.getRanges();
        Arrays.sort(listRanges);
       
        SVNMergeRange youngestRange = listRanges[listRanges.length - 1];
        SVNRevision youngestRev = SVNRevision.create(youngestRange.getEndRevision());
        SVNMergeRange oldestRange = listRanges[0];
        SVNRevision oldestRev = SVNRevision.create(oldestRange.getStartRevision());
           
        LogHandlerFilter filterHandler = new LogHandlerFilter(handler, rangeList);
        SVNLogClient logClient = getLogClient();
        logClient.doLog(reposRootURL, paths, youngestRev, oldestRev, youngestRev, false, discoverChangedPaths,
                false, 0, revProps, filterHandler);
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

        boolean[] isTreeConflict = { false };
        Map targetMergeInfo;
        Map implicitMergeInfo;
        SVNURL sourceRootURL = null;
        String mergeInfoPath = null;
        SVNMergeRange conflictedRange = null;
       
        myWCAccess.probeTry(targetWCPath, true, SVNWCAccess.INFINITE_DEPTH);
        SVNEntry entry = myWCAccess.getVersionedEntry(targetWCPath, false);

        if (honorMergeInfo) {
            sourceRootURL = myRepository1.getRepositoryRoot(true);
            mergeInfoPath = getPathRelativeToRoot(null, primaryURL, sourceRootURL, null, null);           
        }
        SVNMergeRange range = new SVNMergeRange(revision1, revision2, true);

        Object[] mergeInfoBundle = calculateRemainingRangeList(targetWCPath, entry, sourceRootURL, indirect,
                url1, revision1, url2, revision2, range);
        SVNMergeRangeList remainingRangeList = (SVNMergeRangeList) mergeInfoBundle[0];
        targetMergeInfo = (Map) mergeInfoBundle[1];
        implicitMergeInfo = (Map) mergeInfoBundle[1];

        SVNMergeRange[] remainingRanges = remainingRangeList.getRanges();
        AbstractDiffCallback callback = getMergeCallback(adminArea);

        String targetName = targetWCPath.getName();
        if (!myIsRecordOnly) {
            SVNMergeRangeList rangeListToMerge = remainingRangeList;
            if (myAreSourcesAncestral && remainingRangeList.getSize() > 1) {
                SVNURL oldSessionURL = ensureSessionURL(myRepository1, primaryURL);
                rangeListToMerge = removeNoOpMergeRanges(myRepository1, remainingRangeList);
                if (oldSessionURL != null) {
                    myRepository1.setLocation(oldSessionURL, false);
                }
            }
           
            SVNMergeRange[] rangesToMerge = rangeListToMerge.getRanges();
           
            for (int i = 0; i < rangesToMerge.length; i++) {
                SVNMergeRange nextRange = rangesToMerge[i];
                boolean headerSent = false;
                SVNEvent event = SVNEventFactory.createSVNEvent(targetWCPath, SVNNodeKind.UNKNOWN, null,
                        SVNRepository.INVALID_REVISION, myIsSameRepository ? SVNEventAction.MERGE_BEGIN : SVNEventAction.FOREIGN_MERGE_BEGIN, null, null,
                        myAreSourcesAncestral ? nextRange : null);

                SVNProperties props1 = new SVNProperties();
                SVNProperties props2 = new SVNProperties();
                File f1 = null;
                File f2 = null;

                String mimeType2;
                String mimeType1;
                SVNStatusType[] mergeResult;
               
                SVNRepository repos1 = myRepository1;
                SVNRepository repos2 = myRepository2;
                if (honorMergeInfo && !url1.equals(url2)) {
                    if (!isRollBack && nextRange.getStartRevision() != revision1) {
                        repos1 = repos2;
                    } else if (isRollBack && nextRange.getEndRevision() != revision2) {
                        repos2 = repos1;
                    }
                }

                try {
                    f1 = loadFile(repos1, nextRange.getStartRevision(), props1, adminArea);
                    f2 = loadFile(repos2, nextRange.getEndRevision(), props2, adminArea);

                    mimeType1 = props1.getStringValue(SVNProperty.MIME_TYPE);
                    mimeType2 = props2.getStringValue(SVNProperty.MIME_TYPE);
                    props1 = filterProperties(props1, true, false, false);
                    props2 = filterProperties(props2, true, false, false);

                    SVNProperties propsDiff = computePropsDiff(props1, props2);
                   
                    if (!(myIsIgnoreAncestry || sourcesRelated)) {
                        SVNStatusType cstatus = callback.fileDeleted(targetName, f1, f2, mimeType1,
                                mimeType2, props1, isTreeConflict);
                        headerSent = notifySingleFileMerge(targetWCPath, isTreeConflict[0] ? SVNEventAction.TREE_CONFLICT :
                            SVNEventAction.UPDATE_DELETE, cstatus, SVNStatusType.UNKNOWN, event, headerSent);
                        mergeResult = callback.fileAdded(targetName, f1, f2, nextRange.getStartRevision(),
                                                         nextRange.getEndRevision(), mimeType1, mimeType2,
                                                         props1, propsDiff, isTreeConflict);
                        headerSent = notifySingleFileMerge(targetWCPath, isTreeConflict[0] ? SVNEventAction.TREE_CONFLICT :
                            SVNEventAction.UPDATE_ADD, mergeResult[0], mergeResult[1], event, headerSent);
                    } else {
                        mergeResult = callback.fileChanged(targetName, f1, f2, nextRange.getStartRevision(),
                                                           nextRange.getEndRevision(), mimeType1,
                                                           mimeType2, props1, propsDiff, isTreeConflict);
                        headerSent = notifySingleFileMerge(targetWCPath, isTreeConflict[0] ? SVNEventAction.TREE_CONFLICT :
                            SVNEventAction.UPDATE_UPDATE, mergeResult[0], mergeResult[1], event, headerSent);
                    }
                } finally {
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

     
      myChildrenWithMergeInfo = new LinkedList();
      if (!(myAreSourcesAncestral && myIsSameRepository)) {
        if (myAreSourcesAncestral) {
          MergePath item = new MergePath(targetWCPath);
          SVNMergeRange itemRange = new SVNMergeRange(revision1, revision2, true);
          item.myRemainingRanges = new SVNMergeRangeList(itemRange);
          myChildrenWithMergeInfo.add(item);
        }
        driveMergeReportEditor(targetWCPath, url1, revision1, url2, revision2, null, isRollBack,
            depth, adminArea, mergeCallback, null);
        return;
      }
     
      SVNRepository repository = isRollBack ? myRepository1 : myRepository2;
      SVNURL sourceRootURL = repository.getRepositoryRoot(true);
      String mergeInfoPath = getPathRelativeToRoot(null, primaryURL, sourceRootURL, null, null);
      myChildrenWithMergeInfo = getMergeInfoPaths(myChildrenWithMergeInfo, mergeInfoPath, parentEntry,
          sourceRootURL, revision1, revision2, honorMergeInfo, repository, depth);

      MergePath targetMergePath = (MergePath) myChildrenWithMergeInfo.get(0);
        myIsTargetMissingChild = targetMergePath.myHasMissingChildren;
        boolean inheritable = !myIsTargetMissingChild && (depth == SVNDepth.INFINITY ||  depth == SVNDepth.IMMEDIATES);
       
        populateRemainingRanges(myChildrenWithMergeInfo, sourceRootURL, url1, revision1, url2, revision2,
            inheritable, honorMergeInfo, repository);
       
        SVNMergeRange range = new SVNMergeRange(revision1, revision2, inheritable);
        SVNRemoteDiffEditor editor = null;
        SVNErrorMessage err = null;
        if (honorMergeInfo && !myIsRecordOnly) {
          long startRev = getMostInclusiveStartRevision(myChildrenWithMergeInfo, isRollBack);
          if (SVNRevision.isValidRevisionNumber(startRev)) {
            range.setStartRevision(startRev);
                long endRev = getMostInclusiveEndRevision(myChildrenWithMergeInfo, isRollBack);
                while (SVNRevision.isValidRevisionNumber(endRev)) {
                    SVNURL realURL1 = url1;
                    SVNURL realURL2 = url2;
                    SVNURL oldURL1 = null;
                    SVNURL oldURL2 = null;
                    long nextEndRev = SVNRepository.INVALID_REVISION;
                   
                    sliceRemainingRanges(myChildrenWithMergeInfo, isRollBack, endRev);
                    myCurrentAncestorIndex = -1;
                    if (!sameURLs) {
                        if (isRollBack && endRev != revision2) {
                            realURL2 = url1;
                            oldURL2 = ensureSessionURL(myRepository2, realURL2);
                        }
                        if (!isRollBack && startRev != revision1) {
                            realURL1 = url2;
                            oldURL1 = ensureSessionURL(myRepository1, realURL1);
                        }
                    }
                   
                    try {
                        editor = driveMergeReportEditor(myTarget, realURL1, startRev, realURL2, endRev,
                                myChildrenWithMergeInfo, isRollBack, depth, adminArea, mergeCallback, editor);
                    } finally {
                        if (oldURL1 != null) {
                            myRepository1.setLocation(oldURL1, false);
                        }
                        if (oldURL2 != null) {
                            myRepository2.setLocation(oldURL2, false);
                        }
                    }
                   
                    processChildrenWithNewMergeInfo();
                    processChildrenWithDeletedMergeInfo();
                   
                    removeFirstRangeFromRemainingRanges(endRev, myChildrenWithMergeInfo);
                    nextEndRev = getMostInclusiveEndRevision(myChildrenWithMergeInfo, isRollBack);
                    if (SVNRevision.isValidRevisionNumber(nextEndRev) && myConflictedPaths != null &&
                            !myConflictedPaths.isEmpty()) {
                        SVNMergeRange conflictedRange = new SVNMergeRange(startRev, endRev, false);
                        err = makeMergeConflictError(myTarget, conflictedRange);
                        range.setEndRevision(endRev);
                        break;
                    }
                    startRev = getMostInclusiveStartRevision(myChildrenWithMergeInfo, isRollBack);
                    endRev = nextEndRev;
                }
          }
        } else {
          if (!myIsRecordOnly) {
                myCurrentAncestorIndex = -1;
                editor = driveMergeReportEditor(myTarget, url1, revision1, url2, revision2, null, isRollBack,
                        depth, adminArea, mergeCallback, editor);
          }
        }

        if (recordMergeInfo) {
            MergePath mergeTarget = (MergePath) myChildrenWithMergeInfo.get(0);
            removeAbsentChildren(myTarget, myChildrenWithMergeInfo);
            SVNMergeRangeList filteredRangeList = filterNaturalHistoryFromMergeInfo(mergeInfoPath,
                    mergeTarget.myImplicitMergeInfo, range);
            if (!filteredRangeList.isEmpty()) {
                Map merges = determinePerformedMerges(myTarget, filteredRangeList, depth);
                recordMergeInfoOnMergedChildren(depth);
                updateWCMergeInfo(myTarget, mergeInfoPath, parentEntry, merges, isRollBack);
            }
         
            for (int i = 0; i < myChildrenWithMergeInfo.size(); i++) {
        MergePath child = (MergePath) myChildrenWithMergeInfo.get(i);
        if (child == null || child.myIsAbsent) {
          continue;
        }
       
        String childReposPath = null;
        if (child.myPath.equals(myTarget)) {
          childReposPath = "";
        } else {
                    childReposPath = SVNPathUtil.getRelativePath(myTarget.getAbsolutePath(),
                        child.myPath.getAbsolutePath());
        }
               
        SVNEntry childEntry = myWCAccess.getVersionedEntry(child.myPath, false);
                String childMergeSourcePath = SVNPathUtil.getAbsolutePath(SVNPathUtil.append(mergeInfoPath,
                    childReposPath));
               
              Map childMerges = new TreeMap();
              SVNMergeRangeList childMergeRangeList = filterNaturalHistoryFromMergeInfo(childMergeSourcePath,
                      child.myImplicitMergeInfo, range);
              if (childMergeRangeList.isEmpty()) {
                  continue;
              }
             
              SVNMergeRange[] childMergeRanges = childMergeRangeList.getRanges();
              for (int j = 0; j < childMergeRangeList.getSize(); j++) {
                  SVNMergeRange rng = childMergeRanges[j];
                  if (childEntry.isFile()) {
                      rng.setInheritable(true);
                  } else {
                      rng.setInheritable(!child.myHasMissingChildren && (depth == SVNDepth.INFINITY ||
                              depth == SVNDepth.IMMEDIATES));
                  }
              }
             
                childMerges.put(child.myPath, childMergeRangeList);
                if (child.myIsIndirectMergeInfo) {
                    SVNPropertiesManager.recordWCMergeInfo(child.myPath, child.myPreMergeMergeInfo,
                            myWCAccess);
                }
                updateWCMergeInfo(child.myPath, childMergeSourcePath, childEntry, childMerges, isRollBack);

                if (i > 0) {
                    boolean isInSwitchedSubTree = false;
                    if (child.myIsSwitched) {
                        isInSwitchedSubTree = true;
                    } else if (i > 1) {
                        for (int j = i - 1; j > 0; j--) {
                            MergePath parent = (MergePath) myChildrenWithMergeInfo.get(j);
                            if (parent != null && parent.myIsSwitched &&
                                    SVNPathUtil.isAncestor(parent.myPath.getAbsolutePath().replace(File.separatorChar, '/'),
                                    child.myPath.getAbsolutePath().replace(File.separatorChar, '/'))) {
                                isInSwitchedSubTree = true;
                                break;
                            }
                        }
                    }
                   
                    elideMergeInfo(myWCAccess, child.myPath, childEntry, isInSwitchedSubTree ? null : myTarget);
                }
          }

            if (myAddedPaths != null) {
                for (Iterator addedPathsIter = myAddedPaths.iterator(); addedPathsIter.hasNext();) {
                    File addedPath = (File) addedPathsIter.next();
                    SVNPropertyValue addedPathParentPropValue = SVNPropertiesManager.getProperty(myWCAccess,
                            addedPath.getParentFile(), SVNProperty.MERGE_INFO);
                    String addedPathParentPropValueStr = addedPathParentPropValue != null ?
                            addedPathParentPropValue.getString() : null;
                    if (addedPathParentPropValueStr != null &&
                            addedPathParentPropValueStr.indexOf(SVNMergeRangeList.MERGE_INFO_NONINHERITABLE_STRING) != -1) {
                        SVNEntry entry = myWCAccess.getVersionedEntry(addedPath, false);
                        Map mergeMergeInfo = new TreeMap();
                        SVNMergeRange rng = range.dup();
                        if (entry.isFile()) {
                            rng.setInheritable(true);
                        } else {
                            rng.setInheritable(!(depth == SVNDepth.INFINITY || depth == SVNDepth.IMMEDIATES));
                        }

                        String addedPathStr = SVNPathUtil.validateFilePath(addedPath.getAbsolutePath());
                        String targetMergePathStr = SVNPathUtil.validateFilePath(targetMergePath.myPath.getAbsolutePath());
                        String commonAncestorPath = SVNPathUtil.getCommonPathAncestor(addedPathStr, targetMergePathStr);
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

               
                if (youngerMergeInfo != null) {
                    for (Iterator youngerMergeInfoIter = youngerMergeInfo.keySet().iterator(); youngerMergeInfoIter.hasNext();) {
                        String sourcePath = (String) youngerMergeInfoIter.next();
                        SVNMergeRangeList rangeList = (SVNMergeRangeList) youngerMergeInfo.get(sourcePath);
                        SVNMergeRange ranges[] = rangeList.getRanges();
                        LinkedList adjustedRanges = new LinkedList();
                        SVNURL mergeSourceURL = mergeSourceRootURL.appendPath(sourcePath, false);
                        for (int i = 0; i < ranges.length; i++) {
                            SVNMergeRange range = ranges[i];
                            SVNRepositoryLocation[] locations = null;
                            try {
                                locations = getLocations(targetURL, null, myRepository2,
                                        SVNRevision.create(targetEntry.getRevision()),
                                        SVNRevision.create(range.getStartRevision() + 1), SVNRevision.UNDEFINED);
                                SVNURL startURL = locations[0].getURL();
                                if (!mergeSourceURL.equals(startURL)) {
                                    adjustedRanges.add(range);
                                }
                            } catch (SVNException svne) {
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

        for (Iterator mergeInfoIter = mergeInfo[0].keySet().iterator(); mergeInfoIter.hasNext();) {
            String mergeSourcePath = (String) mergeInfoIter.next();
            SVNMergeRangeList rangeList = (SVNMergeRangeList) mergeInfo[0].get(mergeSourcePath);
            SVNMergeRange[] ranges = rangeList.getRanges();
            for (int i = 0; i < ranges.length; i++) {
                SVNMergeRange range = ranges[i];
                if (range.getEndRevision() < revision) {
                    continue;
                }

                LinkedList youngerRanges = new LinkedList();
                for (int j = i; j < ranges.length; j++) {
                    SVNMergeRange youngerRange = ranges[j].dup();
                    if (j == i && youngerRange.getStartRevision() < revision) {
                        youngerRange.setStartRevision(revision);
                        range.setEndRevision(revision);
                    }
                    youngerRanges.add(youngerRange);   
                }
                   
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

            for (Iterator pathsIter = historyAsMergeInfo.keySet().iterator(); pathsIter.hasNext();) {
                String path = (String) pathsIter.next();
                SVNMergeRangeList rangeList = (SVNMergeRangeList) historyAsMergeInfo.get(path);
                SVNMergeRange[] ranges = rangeList.getRanges();
                for (int i = 0; i < ranges.length; i++) {
                    SVNMergeRange mergeRange = ranges[i];
                    if (mergeRange.getStartRevision() >= mergeRange.getEndRevision()) {
                        SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.UNKNOWN, "range start >= end");
                        SVNErrorManager.error(err, SVNLogType.DEFAULT);
                    }
                   
                    SVNDirEntry dirEntry = repository.info(path, mergeRange.getEndRevision());
                    if (mergeRangeContainsRevision(mergeRange, dirEntry.getRevision())) {
                        SVNURL fullURL = repository.getLocation();
                        if (path.startsWith("/")) {
                            path = path.substring(1);
                        }
View Full Code Here

Examples of org.tmatesoft.svn.core.SVNMergeRange

      }
     
      long rangeStartRev = getRevisionNumber(rangeStart, youngestRevision, repository, source);
      long rangeEndRev = getRevisionNumber(rangeEnd, youngestRevision, repository, source);
      if (rangeStartRev != rangeEndRev) {
        SVNMergeRange range = new SVNMergeRange(rangeStartRev, rangeEndRev, true);
        mergeRanges.add(range);
      }
      }
     
      SVNMergeRangeList mergeRangesList = SVNMergeRangeList.fromCollection(mergeRanges);
      mergeRanges = mergeRangesList.getRangesAsList();
      if (mergeRanges.isEmpty()) {
        return mergeRanges;
      }
     
      long oldestRequestedRev = SVNRepository.INVALID_REVISION;
      long youngestRequestedRev = SVNRepository.INVALID_REVISION;
      for (Iterator rangesIter = mergeRanges.iterator(); rangesIter.hasNext();) {
      SVNMergeRange range = (SVNMergeRange) rangesIter.next();
      long minRev = Math.min(range.getStartRevision(), range.getEndRevision());
      long maxRev = Math.max(range.getStartRevision(), range.getEndRevision());
     
      if (!SVNRevision.isValidRevisionNumber(oldestRequestedRev) || minRev < oldestRequestedRev) {
        oldestRequestedRev = minRev;
      }
      if (!SVNRevision.isValidRevisionNumber(youngestRequestedRev) || maxRev > youngestRequestedRev) {
        youngestRequestedRev = maxRev;
      }
    }
     
      if (pegRevNum < youngestRequestedRev) {
            getLocations(sourceURL, null, repository, SVNRevision.create(pegRevNum),
                    SVNRevision.create(youngestRequestedRev), SVNRevision.UNDEFINED);
            pegRevNum = youngestRequestedRev;
      }

      LinkedList segments = (LinkedList) repository.getLocationSegments("", pegRevNum, youngestRequestedRev,
          oldestRequestedRev);

    long trimRevision =  SVNRepository.INVALID_REVISION;
    if (!segments.isEmpty()) {
        SVNLocationSegment segment = (SVNLocationSegment) segments.get(0);
        if (segment.getStartRevision() != oldestRequestedRev) {
            trimRevision = segment.getStartRevision();
        } else if (segment.getPath() == null) {
            if (segments.size() > 1) {
                SVNLocationSegment segment2 = (SVNLocationSegment) segments.get(1);
                SVNURL segmentURL = sourceRootURL.appendPath(segment2.getPath(), false);
                SVNLocationEntry copyFromLocation = getCopySource(null, segmentURL,
                        SVNRevision.create(segment2.getStartRevision()));
                String copyFromPath = copyFromLocation.getPath();
                long copyFromRevision = copyFromLocation.getRevision();
                if (copyFromPath != null && SVNRevision.isValidRevisionNumber(copyFromRevision)) {
                    SVNLocationSegment newSegment = new SVNLocationSegment(copyFromRevision,
                            copyFromRevision, copyFromPath);
                    segment.setStartRevision(copyFromRevision + 1);
                    segments.addFirst(newSegment);
                }
            }
        }
    }

    SVNLocationSegment[] segmentsArray = (SVNLocationSegment[]) segments.toArray(new SVNLocationSegment[segments.size()]);
    List resultMergeSources = new LinkedList();
      for (Iterator rangesIter = mergeRanges.iterator(); rangesIter.hasNext();) {
      SVNMergeRange range = (SVNMergeRange) rangesIter.next();
      if (SVNRevision.isValidRevisionNumber(trimRevision)) {
          if (Math.max(range.getStartRevision(), range.getEndRevision()) < trimRevision) {
              continue;
          }
          if (range.getStartRevision() < trimRevision) {
              range.setStartRevision(trimRevision);
          }
          if (range.getEndRevision() < trimRevision) {
              range.setEndRevision(trimRevision);
          }
      }
      List mergeSources = combineRangeWithSegments(range, segmentsArray, sourceRootURL);
      resultMergeSources.addAll(mergeSources);
      }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.