/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.cli.svnadmin;
import java.io.File;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.tmatesoft.svn.cli.AbstractSVNCommand;
import org.tmatesoft.svn.core.SVNErrorCode;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.wc.SVNErrorManager;
import org.tmatesoft.svn.core.internal.wc.SVNPath;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.util.SVNLogType;
/**
* @version 1.3
* @author TMate Software Ltd.
*/
public abstract class SVNAdminCommand extends AbstractSVNCommand {
protected SVNAdminCommand(String name, String[] aliases) {
super(name, aliases);
}
protected SVNAdminCommandEnvironment getSVNAdminEnvironment() {
return (SVNAdminCommandEnvironment) getEnvironment();
}
protected File getLocalRepository() throws SVNException {
return getLocalRepository(0);
}
protected File getLocalRepository(int index) throws SVNException {
List targets = getEnvironment().combineTargets(null, false);
if (targets.isEmpty()) {
targets.add("");
}
if (targets.isEmpty() || index > targets.size() - 1 ) {
SVNErrorManager.error(SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR,
"Repository argument required"), SVNLogType.CLIENT);
}
SVNPath target = new SVNPath((String) targets.get(index));
if (target.isURL()) {
SVNErrorManager.error(SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR,
"'" + target.getTarget() + "' is an URL when it should be a path"), SVNLogType.CLIENT);
}
return target.getFile();
}
protected String getResourceBundleName() {
return "org.tmatesoft.svn.cli.svnadmin.commands";
}
protected long getRevisionNumber(SVNRevision rev, long latestRevision, SVNRepository repos) throws SVNException {
long result = -1;
if (rev.getNumber() >= 0) {
result = rev.getNumber();
} else if (rev == SVNRevision.HEAD) {
result = latestRevision;
} else if (rev.getDate() != null) {
result = repos.getDatedRevision(rev.getDate());
} else if (rev != SVNRevision.UNDEFINED) {
SVNErrorManager.error(SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR, "Invalid revision specifier"), SVNLogType.CLIENT);
}
if (result > latestRevision) {
SVNErrorManager.error(SVNErrorMessage.create(SVNErrorCode.CL_ARG_PARSING_ERROR,
"Revisions must not be greater than the youngest revision (" + latestRevision + ")"), SVNLogType.CLIENT);
}
return result;
}
public Collection getGlobalOptions() {
return Collections.EMPTY_LIST;
}
}