package org.tmatesoft.svn.core.wc2;
import java.io.File;
import org.tmatesoft.sqljet.core.SqlJetTransactionMode;
import org.tmatesoft.svn.core.SVNErrorCode;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetDb;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetDb.Mode;
import org.tmatesoft.svn.core.internal.wc.SVNErrorManager;
import org.tmatesoft.svn.core.internal.wc.SVNFileType;
import org.tmatesoft.svn.core.internal.wc.SVNFileUtil;
import org.tmatesoft.svn.core.internal.wc2.ng.SvnNgUpgradeSDb;
import org.tmatesoft.svn.util.SVNLogType;
/**
*
* @author TMate Software Ltd.
* @version 1.8
*/
public class SvnSetWCDbVersion extends SvnOperation<Void> {
public static final int WC_DB_17_VERSION = 29;
public static final int WC_DB_18_VERSION = 31;
private int version;
protected SvnSetWCDbVersion(SvnOperationFactory factory) {
super(factory);
}
public void setVersion(int version) {
this.version = version;
}
public int getVersion() {
return version;
}
@Override
public boolean isChangesWorkingCopy() {
return false;
}
@Override
public Void run() throws SVNException {
for (SvnTarget target : getTargets()) {
if (!target.isFile()) {
continue;
}
final File wc = getFirstTarget().getFile();
final File wcDb = new File(wc, SVNFileUtil.getAdminDirectoryName() + "/wc.db");
if (SVNFileType.getType(wcDb) != SVNFileType.FILE) {
continue;
}
final SVNSqlJetDb db = SVNSqlJetDb.open(wcDb, Mode.ReadWrite);
db.beginTransaction(SqlJetTransactionMode.WRITE);
try {
SvnNgUpgradeSDb.setVersion(db, getVersion());
} finally {
db.commit();
}
}
return null;
}
@Override
protected void initDefaults() {
super.initDefaults();
setVersion(WC_DB_18_VERSION);
}
@Override
protected void ensureArgumentsAreValid() throws SVNException {
super.ensureArgumentsAreValid();
if (getVersion() != WC_DB_17_VERSION && getVersion() != WC_DB_18_VERSION) {
final SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.INCORRECT_PARAMS, "wc.db version could only be {1} or {2}.",
new Object[] {WC_DB_17_VERSION, WC_DB_18_VERSION});
SVNErrorManager.error(err, SVNLogType.WC);
}
}
}