package org.tmatesoft.svn.core.internal.wc2.remote;
import org.tmatesoft.svn.core.SVNErrorCode;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNProperties;
import org.tmatesoft.svn.core.internal.wc.SVNErrorManager;
import org.tmatesoft.svn.core.internal.wc17.db.Structure;
import org.tmatesoft.svn.core.internal.wc2.SvnRemoteOperationRunner;
import org.tmatesoft.svn.core.internal.wc2.SvnRepositoryAccess;
import org.tmatesoft.svn.core.internal.wc2.SvnRepositoryAccess.RepositoryInfo;
import org.tmatesoft.svn.core.internal.wc2.SvnRepositoryAccess.RevisionsPair;
import org.tmatesoft.svn.core.internal.wc2.SvnWcGeneration;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc2.SvnGetProperties;
import org.tmatesoft.svn.core.wc2.SvnTarget;
import org.tmatesoft.svn.util.SVNLogType;
public class SvnRemoteGetRevisionProperties extends SvnRemoteOperationRunner<SVNProperties, SvnGetProperties> {
@Override
public boolean isApplicable(SvnGetProperties operation, SvnWcGeneration wcGeneration) throws SVNException {
return operation.isRevisionProperties();
}
@Override
protected SVNProperties run() throws SVNException {
SVNRevision revision = getOperation().getRevision();
if (!revision.isValid()) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.CLIENT_BAD_REVISION, "Valid revision have to be specified to fetch revision property");
SVNErrorManager.error(err, SVNLogType.DEFAULT);
}
SvnRepositoryAccess access = getRepositoryAccess();
Structure<RepositoryInfo> repositoryInfo = access.createRepositoryFor(getOperation().getFirstTarget(), SVNRevision.HEAD, SVNRevision.HEAD, null);
SVNRepository repository = repositoryInfo.get(RepositoryInfo.repository);
repositoryInfo.release();
Structure<RevisionsPair> revPair = access.getRevisionNumber(repository, getOperation().getFirstTarget(), getOperation().getRevision(), null);
long revNumber = revPair.lng(RevisionsPair.revNumber);
getOperation().setRevisionNumber(revNumber);
SVNProperties revisionProperties = repository.getRevisionProperties(revNumber, null);
if (revisionProperties != null) {
getOperation().receive(getOperation().getFirstTarget(), revisionProperties);
}
return revisionProperties;
}
}