/** * Returns target's peg revision if defined, if not defined determines whether target is remote or local, * and returns corresponding default revision * @param defaultRemote default revision if target is remote target * @param defaultLocal default revision if target is local target * @return peg revision of the target */ public SVNRevision getResolvedPegRevision(SVNRevision defaultRemote, SVNRevision defaultLocal) { if (getPegRevision() == null || getPegRevision() == SVNRevision.UNDEFINED) { if (defaultLocal == null) { defaultLocal = SVNRevision.WORKING; } if (defaultRemote == null) { defaultRemote = SVNRevision.HEAD; } return isURL() ? defaultRemote : defaultLocal; } return getPegRevision(); }
/** * Determines whether target is remote or local, and returns corresponding <code>String</code> * representation of the target's path and peg revision. * * @return <code>String</code> of the target's path and peg revision */ public String toString() { if (isFile()) { return getFile().getAbsolutePath() + '@' + getPegRevision(); } else if (isURL()) { return getURL().toString() + '@' + getPegRevision(); } return "INVALID TARGET"; } }
@Override protected void ensureArgumentsAreValid() throws SVNException { if (getSource() == null || getSource().getPegRevision() == null || getSource().getPegRevision() == SVNRevision.UNDEFINED) { final SvnTarget firstSource = getFirstSource(); final SvnTarget secondSource = getSecondSource(); ensureArgumentsAreValid(firstSource.getURL(), firstSource.getFile(), firstSource.getPegRevision(), secondSource.getURL(), secondSource.getFile(), secondSource.getPegRevision(), null); } else { final SvnTarget source = getSource(); ensureArgumentsAreValid(source.getURL(), source.getFile(), getStartRevision(), source.getURL(), source.getFile(), getEndRevision(), source.getPegRevision()); } }
reposInfo.release(); } else { if (target.getPegRevision() == SVNRevision.HEAD || target.getPegRevision() == SVNRevision.UNDEFINED) { pegRevnum = repos.getLatestRevision(); } else if (target.getPegRevision().getNumber() >= 0) { pegRevnum = target.getPegRevision().getNumber(); } else if (target.getPegRevision().getDate() != null) { pegRevnum = repos.getDatedRevision(target.getPegRevision().getDate()); } else { if (target.isURL()) { SVNErrorManager.error(err, SVNLogType.WC); Structure<RevisionsPair> pair = getRevisionNumber(repos, target, target.getPegRevision(), null); pegRevnum = pair.lng(RevisionsPair.revNumber); pair.release();
@Override protected Collection<SVNURL> run(SVNWCContext context) throws SVNException { SVNURL[] root = new SVNURL[1]; Map<String, Map<String, SVNMergeRangeList>> mergeInfoCatalog = SvnNgMergeinfoUtil.getMergeInfo(context, getRepositoryAccess(), getOperation().getFirstTarget(), false, false, root); Map<String, SVNMergeRangeList> mergeInfo = null; List<SVNURL> suggestions = new ArrayList<SVNURL>(); if (mergeInfoCatalog != null && !mergeInfoCatalog.isEmpty()) { mergeInfo = mergeInfoCatalog.get(mergeInfoCatalog.keySet().iterator().next()); } SVNLocationEntry copySource = getRepositoryAccess().getCopySource(getOperation().getFirstTarget(), getOperation().getFirstTarget().getPegRevision()); if (copySource != null && copySource.getPath() != null) { suggestions.add(root[0].appendPath(copySource.getPath(), false)); } if (mergeInfo != null) { for (String path : mergeInfo.keySet()) { SVNURL url = root[0].appendPath(path, false); if (!suggestions.contains(url)) { suggestions.add(url); } } } return suggestions; }
@Override protected Void run(SVNWCContext context) throws SVNException { if (isPeggedDiff()) { SvnTarget target = getOperation().getSource(); SVNRevision revision1 = getOperation().getStartRevision(); SVNRevision revision2 = getOperation().getEndRevision(); SVNRevision pegRevision = target.getPegRevision(); doDiff(target, revision1, pegRevision, target, revision2); } else { SvnTarget target1 = getOperation().getFirstSource(); SvnTarget target2 = getOperation().getSecondSource(); SVNRevision revision1 = target1.getPegRevision(); SVNRevision revision2 = target2.getPegRevision(); SVNRevision pegRevision = SVNRevision.UNDEFINED; doDiff(target1, revision1, pegRevision, target2, revision2); } return null; }
@Override protected void ensureArgumentsAreValid() throws SVNException { if (getFirstTarget().getPegRevision() == null || getFirstTarget().getPegRevision() == SVNRevision.UNDEFINED) { if (getRevision() == null || !getRevision().isValid()) { setRevision(hasRemoteTargets() ? SVNRevision.HEAD : SVNRevision.WORKING); } } else { // TODO: should we add setRevision(getFirstTarget().getPegRevision()); ? currently everything is working without this line } if (getDepth() == null || getDepth() == SVNDepth.UNKNOWN) { setDepth(SVNDepth.EMPTY); } super.ensureArgumentsAreValid(); }
@Override protected Collection<SVNURL> run() throws SVNException { SVNDiffClient16 dc = new SVNDiffClient16(getOperation().getAuthenticationManager(), getOperation().getOptions()); if (getOperation().getFirstTarget().isURL()) { return dc.doSuggestMergeSources(getOperation().getFirstTarget().getURL(), getOperation().getFirstTarget().getPegRevision()); } return dc.doSuggestMergeSources(getOperation().getFirstTarget().getFile(), getOperation().getFirstTarget().getPegRevision()); }
diffClient.doGetLogEligibleMergeInfo( target.getURL(), target.getPegRevision(), mergeSource.getURL(), mergeSource.getPegRevision(), getOperation().isDiscoverChangedPaths(), getOperation().getRevisionProperties(), diffClient.doGetLogMergedMergeInfo( target.getURL(), target.getPegRevision(), mergeSource.getURL(), mergeSource.getPegRevision(), getOperation().isDiscoverChangedPaths(), getOperation().getRevisionProperties(), diffClient.doGetLogEligibleMergeInfo( target.getURL(), target.getPegRevision(), mergeSource.getFile(), mergeSource.getPegRevision(), getOperation().isDiscoverChangedPaths(), getOperation().getRevisionProperties(), diffClient.doGetLogMergedMergeInfo( target.getURL(), target.getPegRevision(), mergeSource.getFile(), mergeSource.getPegRevision(),
Structure<RepositoryInfo> sourceReposInfo = getRepositoryAccess().createRepositoryFor(mergeSource, mergeSource.getPegRevision(), mergeSource.getPegRevision(), null); SVNURL sourceReposRoot = ((SVNRepository) sourceReposInfo.get(RepositoryInfo.repository)).getRepositoryRoot(true); sourceReposInfo = getRepositoryAccess().createRepositoryFor(SvnTarget.fromURL(url2), SVNRevision.UNDEFINED, mergeSource.getPegRevision(), null); SVNRepository sourceRepository = sourceReposInfo.get(RepositoryInfo.repository); long rev2 = sourceReposInfo.lng(RepositoryInfo.revision); targetRepository.setLocation(url1.getURL(), false); rev1 = url1.getPegRevision().getNumber(); SVNLocationSegment yc = getRepositoryAccess().getYoungestCommonAncestor(url2, rev2, url1.getURL(), rev1);
@Override protected void ensureArgumentsAreValid() throws SVNException { super.ensureArgumentsAreValid(); //here we assume we have one target SVNRevision resolvedPegRevision; SVNRevision resolvedRevision; if (getFirstTarget().getPegRevision() == SVNRevision.UNDEFINED) { resolvedPegRevision = getFirstTarget().getResolvedPegRevision(SVNRevision.HEAD, SVNRevision.WORKING); if (getRevision() == null || getRevision() == SVNRevision.UNDEFINED) { resolvedRevision = getFirstTarget().isURL() ? SVNRevision.HEAD : SVNRevision.BASE; } else { resolvedRevision = getRevision(); } } else { resolvedPegRevision = getFirstTarget().getPegRevision(); if (getRevision() == null || getRevision() == SVNRevision.UNDEFINED) { resolvedRevision = resolvedPegRevision; } else { resolvedRevision = getRevision(); } } setRevision(resolvedRevision); setSingleTarget( getFirstTarget().isURL() ? SvnTarget.fromURL(getFirstTarget().getURL(), resolvedPegRevision) : SvnTarget.fromFile(getFirstTarget().getFile(), resolvedPegRevision)); }
SVNRevision pegRevision = getOperation().getFirstTarget().getPegRevision(); SvnTarget baseTarget = getOperation().getFirstTarget(); SVNRevision start = SVNRevision.UNDEFINED; SVNRevision end = SVNRevision.UNDEFINED; if (!getOperation().getFirstTarget().getPegRevision().isValid()) { if (getOperation().hasRemoteTargets()) { start = SVNRevision.HEAD; start = getOperation().getFirstTarget().getPegRevision();
final SVNRevision pegRevision = getOperation().getFirstTarget().getPegRevision();
@Override protected SVNDirEntry run() throws SVNException { SVNLogClient16 client = new SVNLogClient16(getOperation().getRepositoryPool(), getOperation().getOptions()); client.setEventHandler(getOperation().getEventHandler()); client.doList(getFirstTarget(), getOperation().getFirstTarget().getPegRevision(), getOperation().getRevision(), getOperation().isFetchLocks(), getOperation().getDepth(), SVNDirEntry.DIRENT_ALL, this); return getOperation().first(); }
@Override protected Void run() throws SVNException { assert getOperation().getTargets().size() == 1 || getOperation().getTargets().size() == 2; final SVNDiffClient16 diffClient = new SVNDiffClient16(getOperation().getRepositoryPool(), getOperation().getOptions()); diffClient.setDiffGenerator(getDiffGenerator()); diffClient.setMergeOptions(getOperation().getDiffOptions()); final Collection<SvnTarget> targets = getOperation().getTargets(); if (getOperation().getSource() != null) { diffClient.doDiff(getOperation().getSource().getURL(), getOperation().getSource().getResolvedPegRevision(), getOperation().getStartRevision(), getOperation().getEndRevision(), getOperation().getDepth(), !getOperation().isIgnoreAncestry(), getOperation().getOutput()); } else { diffClient.doDiff(getOperation().getFirstSource().getURL(), getOperation().getFirstSource().getPegRevision(), getOperation().getSecondSource().getURL(), getOperation().getSecondSource().getPegRevision(), getOperation().getDepth(), !getOperation().isIgnoreAncestry(), getOperation().getOutput()); } return null; }
@Override protected SvnDiffStatus run(SVNWCContext context) throws SVNException { final SvnTarget source = getOperation().getSource(); final SvnTarget firstSource = getOperation().getFirstSource(); final SvnTarget secondSource = getOperation().getSecondSource(); final ISVNDiffStatusHandler handler = createHandlerForReceiver(getOperation()); final SVNDepth depth = getOperation().getDepth(); final boolean useAncestry = !getOperation().isIgnoreAncestry(); if (source != null) { doDiff(source, getOperation().getStartRevision(), source, getOperation().getEndRevision(), source.getPegRevision(), depth, useAncestry, getOperation().isRecurseIntoDeletedDirectories(), handler); } else { doDiff(firstSource, firstSource.getResolvedPegRevision(), secondSource, secondSource.getResolvedPegRevision(), SVNRevision.UNDEFINED, depth, useAncestry, getOperation().isRecurseIntoDeletedDirectories(), handler); } return null; }
public static Map<String, Map<String, SVNMergeRangeList>> getMergeInfo(SVNWCContext context, SvnRepositoryAccess repoAccess, SvnTarget target, boolean includeDescendants, boolean ignoreInvalidMergeInfo, SVNURL[] root) throws SVNException { Structure<SvnRepositoryAccess.RepositoryInfo> repositoryInfo = repoAccess.createRepositoryFor(target, SVNRevision.UNDEFINED, target.getPegRevision(), null); SVNURL url = repositoryInfo.get(SvnRepositoryAccess.RepositoryInfo.url); long pegRev = repositoryInfo.lng(SvnRepositoryAccess.RepositoryInfo.revision);
@Override protected Void run() throws SVNException { final SVNDiffClient16 diffClient = new SVNDiffClient16(getOperation().getRepositoryPool(), getOperation().getOptions()); diffClient.setDiffGenerator(getDiffGenerator()); diffClient.setMergeOptions(getOperation().getDiffOptions()); final boolean peggedDiff = getOperation().getSource() != null; if (peggedDiff) { final SVNRevision startRevision = getOperation().getStartRevision() == null ? SVNRevision.UNDEFINED : getOperation().getStartRevision(); final SVNRevision endRevision = getOperation().getEndRevision() == null ? SVNRevision.UNDEFINED : getOperation().getEndRevision(); diffClient.doDiff(getOperation().getSource().getFile(), getOperation().getSource().getResolvedPegRevision(), startRevision, endRevision, getOperation().getDepth(), !getOperation().isIgnoreAncestry(), getOperation().getOutput(), getOperation().getApplicableChangelists()); } else { final SVNRevision startRevision = getOperation().getFirstSource().getPegRevision() == null ? SVNRevision.UNDEFINED : getOperation().getFirstSource().getPegRevision(); final SVNRevision endRevision = getOperation().getSecondSource().getPegRevision() == null ? SVNRevision.UNDEFINED : getOperation().getSecondSource().getPegRevision(); if (getOperation().getFirstSource().isURL() && getOperation().getSecondSource().isFile()) { diffClient.doDiff(getOperation().getFirstSource().getURL(), startRevision, getOperation().getSecondSource().getFile(), endRevision, getOperation().getDepth(), !getOperation().isIgnoreAncestry(), getOperation().getOutput(), getOperation().getApplicableChangelists()); } else if (getOperation().getFirstSource().isFile() && getOperation().getSecondSource().isURL()) { diffClient.doDiff(getOperation().getFirstSource().getFile(), startRevision, getOperation().getSecondSource().getURL(), endRevision, getOperation().getDepth(), !getOperation().isIgnoreAncestry(), getOperation().getOutput(), getOperation().getApplicableChangelists()); } else if (getOperation().getFirstSource().isFile() && getOperation().getSecondSource().isFile()) { diffClient.doDiff(getOperation().getFirstSource().getFile(), startRevision, getOperation().getSecondSource().getFile(), endRevision, getOperation().getDepth(), !getOperation().isIgnoreAncestry(), getOperation().getOutput(), getOperation().getApplicableChangelists()); } else { throw new UnsupportedOperationException("URL-URL diff is not supported"); } } return null; }
} else { target = SVNFileUtil.getFileName(path1); baseTarget = SvnTarget.fromFile(SVNFileUtil.getParentFile(target1.getFile()), target1.getPegRevision());
final SVNURL newLocation = getRepositoryAccess().resolveUrl(getOperation().getFirstTarget(), repository, getOperation().getFirstTarget().getPegRevision(), SVNRevision.create(latestEnd)); repository.setLocation(newLocation, false);