/*
* Sonar SCM Activity Plugin
* Copyright (C) 2010 SonarSource
* dev@sonar.codehaus.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
package org.sonar.plugins.scmactivity;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.scm.log.ScmLogger;
import org.apache.maven.scm.manager.AbstractScmManager;
import org.apache.maven.scm.provider.accurev.AccuRevScmProvider;
import org.apache.maven.scm.provider.bazaar.BazaarScmProvider;
import org.apache.maven.scm.provider.clearcase.FixedClearCaseScmProvider;
import org.apache.maven.scm.provider.cvslib.cvsexe.CvsExeScmProvider;
import org.apache.maven.scm.provider.git.gitexe.GitExeScmProvider;
import org.apache.maven.scm.provider.hg.HgScmProvider;
import org.apache.maven.scm.provider.perforce.PerforceScmProvider;
import org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider;
import org.apache.maven.scm.provider.svn.util.SvnUtil;
import org.apache.maven.scm.provider.tfs.TfsScmProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.BatchExtension;
/**
* @author Evgeny Mandrikov
*/
public class SonarScmManager extends AbstractScmManager implements BatchExtension {
public SonarScmManager(ScmConfiguration conf) {
if (conf.isEnabled()) {
setScmProvider("svn", new SvnExeScmProvider());
setScmProvider("cvs", new CvsExeScmProvider());
setScmProvider("git", new GitExeScmProvider());
setScmProvider("hg", new HgScmProvider());
setScmProvider("bazaar", new BazaarScmProvider());
setScmProvider("clearcase", new FixedClearCaseScmProvider());
setScmProvider("accurev", new AccuRevScmProvider());
setScmProvider("perforce", new PerforceScmProvider());
setScmProvider("tfs", new TfsScmProvider());
if (StringUtils.equals(conf.getScmProvider(), "svn")) {
initSvn();
}
}
}
private void initSvn() {
/*
http://jira.codehaus.org/browse/SONARPLUGINS-1082
The goal is to always trust SSL certificates. It's partially implemented with the SVN property --trust-server-cert.
However it bypasses ONLY the "CA is unknown" check. It doesn't bypass hostname and expiry checks
*/
SvnUtil.getSettings().setTrustServerCert(true);
}
@Override
protected ScmLogger getScmLogger() {
return new SonarScmLogger(LoggerFactory.getLogger(getClass()));
}
private static class SonarScmLogger implements ScmLogger {
private Logger log;
SonarScmLogger(Logger log) {
this.log = log;
}
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
public void debug(String content) {
log.debug(content);
}
public void debug(String content, Throwable error) {
log.debug(content, error);
}
public void debug(Throwable error) {
log.debug(error.getMessage(), error);
}
public boolean isInfoEnabled() {
return log.isInfoEnabled();
}
public void info(String content) {
log.info("\t" + content);
}
public void info(String content, Throwable error) {
log.info("\t" + content, error);
}
public void info(Throwable error) {
log.info("\t" + error.getMessage(), error);
}
public boolean isWarnEnabled() {
return log.isWarnEnabled();
}
public void warn(String content) {
log.warn(content);
}
public void warn(String content, Throwable error) {
log.warn(content, error);
}
public void warn(Throwable error) {
log.warn(error.getMessage(), error);
}
public boolean isErrorEnabled() {
return log.isErrorEnabled();
}
public void error(String content) {
log.error(content);
}
public void error(String content, Throwable error) {
log.error(content, error);
}
public void error(Throwable error) {
log.error(error.getMessage(), error);
}
}
}