import org.apache.maven.project.MavenProject
import org.apache.maven.scm.provider.ScmUrlUtils
import org.codehaus.gmaven.mojo.GroovyMojo
/**
* @goal commit-projects
*/
public class CommitProjectsMojo extends GroovyMojo
{
/**
* @parameter expression="${project}"
* @required
* @readonly
*/
MavenProject project
/**
* The SCM connection URL for developers.
*
* @parameter default-value="${project.scm.developerConnection}"
* @required
*/
private String developerConnectionUrl;
/**
* @parameter expression="${commit-projects.svnUserName}"
*/
private String svnUsername;
/**
* @parameter expression="${commit-projects.svnPassword}"
*/
private String svnPassword;
void execute() {
if (!ScmUrlUtils.isValid(developerConnectionUrl)) {
log.info('developerConnectionUrl is not valid: ' + developerConnectionUrl)
log.info('skipping...')
return
}
def providerSpecificPart = ScmUrlUtils.getProviderSpecificPart(developerConnectionUrl)
if(svnUsername == null) {
ant.input(message: 'SVN Username: ', addproperty: 'commit-projects.svnUserName')
svnUsername = ant.project.properties.'commit-projects.svnUserName'
System.properties.setProperty('commit-projects.svnUserName', svnUsername)
}
if(svnPassword == null) {
ant.input(message: 'SVN Password: ', addproperty: 'commit-projects.svnPassword') {
handler(classname: "org.apache.tools.ant.input.SecureInputHandler")
}
svnPassword = ant.project.properties.'commit-projects.svnPassword'
System.properties.setProperty('commit-projects.svnPassword', svnPassword)
}
log.info('Getting ready to create: ' + providerSpecificPart)
ant.input(message: 'Press Return key to continue...')
ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) {
arg(value: 'mkdir')
arg(value: '--parents')
arg(value: '-m')
arg(value: '[wizard-archetype-maven-plugin] Create project directory.')
arg(value: providerSpecificPart)
arg(value: '--username')
arg(value: svnUsername)
arg(value: '--password')
arg(value: svnPassword)
}
log.info('Checking out: ' + providerSpecificPart)
ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) {
arg(value: 'checkout')
arg(value: providerSpecificPart)
arg(value: '-r')
arg(value: 'HEAD')
arg(value: '--depth=immediates')
arg(value: '--force')
arg(value: '--username')
arg(value: svnUsername)
arg(value: '--password')
arg(value: svnPassword)
arg(value: project.basedir)
}
log.info('Adding src')
ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) {
arg(value: 'add')
arg(value: 'src')
arg(value: '--force')
}
log.info('Adding pom.xml')
ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) {
arg(value: 'add')
arg(value: 'pom.xml')
arg(value: '--force')
}
def CrLf = "\r\n";
def ignores = '.checkstyle' + CrLf + '.classpath' + CrLf + '.fbprefs' + CrLf + '.project' + CrLf + '.settings' + CrLf + 'META-INF' + CrLf + 'bin' + CrLf + 'plugin.xml' + CrLf + 'target' + CrLf + 'OSGI-INF'
log.info('Ignoring: ' + ignores)
ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) {
arg(value: 'propset')
arg(value: 'svn:ignore')
arg(value: ignores)
arg(value: project.basedir)
}
log.info('Committing project')
ant.exec(executable: 'svn', dir: project.basedir) {
arg(value: 'commit')
arg(value: '-m')
arg(value: '[wizard-archetype-maven-plugin] Create initial project.')
arg(value: '--username')
arg(value: svnUsername)
arg(value: '--password')
arg(value: svnPassword)
}
}
}