package ru.yandex.jenkins.plugins.debuilder;
import hudson.scm.SvnClientManager;
import hudson.scm.SubversionSCM;
import java.io.File;
import java.io.Serializable;
import java.text.MessageFormat;
import jenkins.security.SlaveToMasterCallable;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmatesoft.svn.core.SVNDepth;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationProvider;
import org.tmatesoft.svn.core.wc.SVNCommitPacket;
public class SVNCommitHelper extends SlaveToMasterCallable<String, DebianizingException> implements Serializable{
private static final long serialVersionUID = 1L;
private final ISVNAuthenticationProvider provider;
private final String path;
private final String commitMessage;
public SVNCommitHelper(ISVNAuthenticationProvider provider, String path, String commitMessage) {
this.provider = provider;
this.path = path;
this.commitMessage = commitMessage;
}
@Override
public String call() throws DebianizingException {
SvnClientManager clientManager = SubversionSCM.createClientManager(provider);
try {
SVNCommitPacket changeset = clientManager.getCommitClient().doCollectCommitItems(new File[] {new File(path)}, false, true, SVNDepth.INFINITY, null);
if (changeset != SVNCommitPacket.EMPTY) {
SVNCommitInfo commitInfo = clientManager.getCommitClient().doCommit(changeset, false, commitMessage);
if (commitInfo.getErrorMessage() != null) {
throw new DebianizingException(MessageFormat.format("Error while commiting <{0}>: {1}", path, commitInfo.getErrorMessage().toString()));
} else {
return Long.toString(commitInfo.getNewRevision());
}
} else {
throw new DebianizingException("There was nothing to commit.");
}
} catch (SVNException e) {
throw new DebianizingException("SVNException: " + e.getMessage(), e);
} finally {
clientManager.dispose();
}
}
}