package org.tmatesoft.svn.core.internal.wc2.ng; import java.util.Comparator; import java.util.Map; import java.util.TreeMap; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNMergeRangeList; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.internal.util.SVNURLUtil; import org.tmatesoft.svn.core.internal.wc.SVNFileUtil; import org.tmatesoft.svn.core.internal.wc17.SVNWCContext; import org.tmatesoft.svn.core.internal.wc2.SvnWcGeneration; import org.tmatesoft.svn.core.wc2.SvnGetMergeInfo; import org.tmatesoft.svn.core.wc2.SvnOperationFactory; public class SvnNgGetMergeInfo extends SvnNgOperationRunner<Map<SVNURL, SVNMergeRangeList>, SvnGetMergeInfo> { @Override public boolean isApplicable(SvnGetMergeInfo operation, SvnWcGeneration wcGeneration) throws SVNException { return operation.getFirstTarget().isURL() || SvnOperationFactory.detectWcGeneration(operation.getFirstTarget().getFile(), true) == SvnWcGeneration.V17; } @Override public SvnWcGeneration getWcGeneration() { return SvnWcGeneration.NOT_DETECTED; } @Override protected Map<SVNURL, SVNMergeRangeList> run(SVNWCContext context) throws SVNException { SVNURL[] root = new SVNURL[1]; Map<String, Map<String, SVNMergeRangeList>> catalog = SvnNgMergeinfoUtil.getMergeInfo(getWcContext(), getRepositoryAccess(), getOperation().getFirstTarget(), false, false, root); Map<String, SVNMergeRangeList> mergeinfo = null; if (catalog != null) { String relativePath; if (getOperation().getFirstTarget().isURL()) { relativePath = SVNURLUtil.getRelativeURL(root[0], getOperation().getFirstTarget().getURL(), false); } else { relativePath = SVNFileUtil.getFilePath(getWcContext().getNodeReposRelPath(getFirstTarget())); } mergeinfo = catalog.get(relativePath); } if (mergeinfo != null) { Map<SVNURL, SVNMergeRangeList> result = new TreeMap<SVNURL, SVNMergeRangeList>(new Comparator<SVNURL>() { public int compare(SVNURL o1, SVNURL o2) { return o1.toString().compareTo(o2.toString()); } }); for (String path : mergeinfo.keySet()) { SVNURL fullURL = root[0].appendPath(path, false); result.put(fullURL, mergeinfo.get(path)); } return result; } return null; } }