package org.tmatesoft.svn.core.internal.wc17.db; import java.io.File; import org.tmatesoft.svn.core.SVNDepth; import org.tmatesoft.svn.core.SVNErrorCode; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.internal.wc.SVNFileType; import org.tmatesoft.svn.core.internal.wc.SVNFileUtil; import org.tmatesoft.svn.core.internal.wc17.SVNReporter17; import org.tmatesoft.svn.core.internal.wc17.SVNWCContext; import org.tmatesoft.svn.core.internal.wc17.db.ISVNWCDb.SVNWCDbKind; import org.tmatesoft.svn.core.internal.wc17.db.ISVNWCDb.WCDbBaseInfo; import org.tmatesoft.svn.core.internal.wc17.db.ISVNWCDb.WCDbBaseInfo.BaseInfoField; import org.tmatesoft.svn.core.io.ISVNReporter; import org.tmatesoft.svn.core.io.ISVNReporterBaton; public class SvnExternalFileReporter implements ISVNReporterBaton { private SVNWCContext context; private File localAbsPath; private boolean restoreFiles; private boolean useCommitTimes; public SvnExternalFileReporter(SVNWCContext context, File localAbsPath, boolean restoreFiles, boolean useCommitTimes) { this.context = context; this.localAbsPath = localAbsPath; this.restoreFiles = restoreFiles; this.useCommitTimes = useCommitTimes; } public void report(ISVNReporter reporter) throws SVNException { WCDbBaseInfo baseInfo = null; try { baseInfo = context.getDb().getBaseInfo(localAbsPath, BaseInfoField.kind, BaseInfoField.revision, BaseInfoField.reposRelPath, BaseInfoField.reposRootUrl, BaseInfoField.updateRoot, BaseInfoField.lock); if (baseInfo.kind == SVNWCDbKind.Dir || !baseInfo.updateRoot) { reporter.setPath("", null, 0, SVNDepth.INFINITY, false); reporter.deletePath(""); } else { if (restoreFiles) { SVNFileType ft = SVNFileType.getType(localAbsPath); if (ft == SVNFileType.NONE) { SVNReporter17.restoreNode(context, localAbsPath, SVNWCDbKind.File, baseInfo.revision, useCommitTimes); } } reporter.setPath("", null, baseInfo.revision, SVNDepth.INFINITY, false); SVNURL url = baseInfo.reposRootUrl.appendPath(SVNFileUtil.getFilePath(baseInfo.reposRelPath), false); String lockToken = baseInfo.lock != null ? baseInfo.lock.token : null; reporter.linkPath(url, "", lockToken, baseInfo.revision, SVNDepth.INFINITY, false); } } catch (SVNException e) { if (e.getErrorMessage().getErrorCode() != SVNErrorCode.WC_PATH_NOT_FOUND) { throw e; } reporter.setPath("", null, 0, SVNDepth.INFINITY, false); reporter.deletePath(""); } reporter.finishReport(); } }