Author: bimargulies
Date: Tue Feb 14 02:05:41 2012
New Revision: 1243761
URL: http://svn.apache.org/viewvc?rev=1243761&view=rev
Log:
Purported first pass at first mojo.
Added:
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventory.java
(with props)
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventoryMojo.java
- copied, changed from r1243344,
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/MyMojo.java
Removed:
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/MyMojo.java
Modified:
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/pom.xml
Modified: maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/pom.xml?rev=1243761&r1=1243760&r2=1243761&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/pom.xml (original)
+++ maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/pom.xml Tue Feb 14
02:05:41 2012
@@ -1,51 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>maven-plugins-sandbox</artifactId>
- <groupId>org.apache.maven.plugins</groupId>
- <version>1.0-SNAPSHOT</version>
- </parent>
- <groupId>org.apache.maven</groupId>
- <artifactId>asf-svnpubsub-plugin</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>maven-plugin</packaging>
- <name>asf-svnpubsub-plugin Maven Plugin</name>
- <url>http://maven.apache.org</url>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-plugin-plugin</artifactId>
- <version>2.5.1</version>
- <executions>
- <execution>
- <id>generated-helpmojo</id>
- <goals>
- <goal>helpmojo</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <goalPrefix>asf-svnpubsub-plugin</goalPrefix>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-plugin-api</artifactId>
- <version>2.0</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>maven-plugins</artifactId>
+ <groupId>org.apache.maven.plugins</groupId>
+ <version>22</version>
+ <!-- <relativePath>../maven-plugins/pom.xml</relativePath> -->
+ </parent>
+
+ <artifactId>asf-svnpubsub-plugin</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>maven-plugin</packaging>
+ <name>asf-svnpubsub-plugin Maven Plugin</name>
+ <url>http://maven.apache.org</url>
+
+ <properties>
+ <scmVersion>1.6</scmVersion>
+ <mavenVersion>2.0.9</mavenVersion>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>generated-helpmojo</id>
+ <goals>
+ <goal>helpmojo</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <goalPrefix>asf-svnpubsub-plugin</goalPrefix>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.release</groupId>
+ <version>2.2.2</version>
+ <artifactId>maven-release-manager</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-api</artifactId>
+ <version>${scmVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ <version>4.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-core-asl</artifactId>
+ <version>1.9.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-mapper-asl</artifactId>
+ <version>1.9.4</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.0.1</version>
+ </dependency>
+ </dependencies>
</project>
Added:
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventory.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventory.java?rev=1243761&view=auto
==============================================================================
---
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventory.java
(added)
+++
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventory.java
Tue Feb 14 02:05:41 2012
@@ -0,0 +1,47 @@
+package org.apache.maven.plugins.svnpubsub;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * A class designed for json serialization to store the existing inventory, if
any. In this version, there's no attempt
+ * to account for directories as managed items.
+ */
+public class SvnpubsubInventory
+{
+ private Set<String> paths;
+
+ public SvnpubsubInventory()
+ {
+ paths = new HashSet<String>();
+ }
+
+ public Set<String> getPaths()
+ {
+ return paths;
+ }
+
+ public void setPaths( Set<String> paths )
+ {
+ this.paths = paths;
+ }
+}
Propchange:
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied:
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventoryMojo.java
(from r1243344,
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/MyMojo.java)
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventoryMojo.java?p2=maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventoryMojo.java&p1=maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/MyMojo.java&r1=1243344&r2=1243761&rev=1243761&view=diff
==============================================================================
---
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/MyMojo.java
(original)
+++
maven/sandbox/trunk/plugins/asf-svnpubsub-plugin/src/main/java/org/apache/maven/plugins/svnpubsub/SvnpubsubInventoryMojo.java
Tue Feb 14 02:05:41 2012
@@ -1,81 +1,411 @@
package org.apache.maven.plugins.svnpubsub;
/*
- * Copyright 2001-2005 The Apache Software Foundation.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
*/
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
import java.io.File;
-import java.io.FileWriter;
import java.io.IOException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.IOFileFilter;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.shared.release.ReleaseExecutionException;
+import org.apache.maven.shared.release.ReleaseFailureException;
+import org.apache.maven.shared.release.config.ReleaseDescriptor;
+import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
+import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
+import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
+import org.apache.maven.shared.release.util.ReleaseUtil;
+import org.codehaus.jackson.JsonEncoding;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.JsonProcessingException;
+import org.codehaus.jackson.map.MappingJsonFactory;
+import org.codehaus.plexus.util.StringUtils;
/**
- * Goal which touches a timestamp file.
- *
- * @goal touch
+ * Prepare a directory for version-managed site generation. This checks out
the specified directory from the SCM and
+ * then takes inventory of all the resulting files. This inventory then allows
the 'checkin' target to tee up deletions
+ * as well as modifications and additions. There's an assumption here that an
entire directory in svn is dedicated to
+ * the publication process for this project. In the aggregate case, this is
going to take some doing. TODO: we want
+ * multiple includes/excludes, but the scm API doesn't go there.
*
- * @phase process-sources
+ * @goal prepare
+ * @phase pre-site
*/
-public class MyMojo
+public class SvnpubsubInventoryMojo
extends AbstractMojo
{
/**
- * Location of the file.
- * @parameter expression="${project.build.directory}"
+ * Location of the inventory file.
+ *
+ * @parameter expression="${svnpubsub.inventoryFile}"
+ *
default-value="${project.build.directory}/svnpubsub-inventory.js"
+ */
+ private File inventoryFile;
+
+ /**
+ * Location of the svn publication tree.
+ *
+ * @parameter expression="${svnpubsub.pubScmUrl}"
* @required
*/
- private File outputDirectory;
+ private String pubScmUrl;
- public void execute()
- throws MojoExecutionException
+ /**
+ * Location of the svn publication tree.
+ *
+ * @parameter expression="${svnpubsub.checkoutDirectory}"
+ * default-value="${project.build.directory}/svnpubsub-checkout"
+ */
+ private File checkoutDirectory;
+
+ /**
+ * Patterns to exclude from the scm tree.
+ *
+ * @parameter
+ */
+ private String excludes;
+
+ /**
+ * Patterns to include in the scm tree.
+ *
+ * @parameter
+ */
+ private String includes;
+
+ /**
+ * Tool that gets a configured SCM repository from release configuration.
+ *
+ * @plexus.requirement
+ */
+ private ScmRepositoryConfigurator scmRepositoryConfigurator;
+
+ /**
+ * The SCM username to use.
+ *
+ * @parameter expression="${username}"
+ */
+ private String username;
+
+ /**
+ * The SCM password to use.
+ *
+ * @parameter expression="${password}"
+ */
+ private String password;
+
+ /**
+ * @parameter expression="${settings}"
+ * @required
+ * @readonly
+ */
+ protected Settings settings;
+
+ /**
+ * @parameter expression="${project}"
+ * @required
+ * @readonly
+ */
+ protected MavenProject project;
+
+ /**
+ * @parameter expression="${reactorProjects}"
+ * @required
+ * @readonly
+ */
+ protected List<MavenProject> reactorProjects;
+
+ /**
+ * Use a local checkout instead of doing a checkout from the upstream
repository. ATTENTION: This will only work
+ * with distributed SCMs which support the file:// protocol TODO: we
should think about having the defaults for the
+ * various SCM providers provided via modello!
+ *
+ * @parameter expression="${localCheckout}" default-value="false"
+ * @since 2.0
+ */
+ private boolean localCheckout;
+
+ /**
+ * @parameter expression="${basedir}"
+ * @required
+ * @readonly
+ */
+ protected File basedir;
+
+ /**
+ * @parameter expression="${session}"
+ * @readonly
+ * @required
+ */
+ protected MavenSession session;
+
+ private ScmProvider scmProvider;
+
+ private ScmRepository scmRepository;
+
+ private Collection<File> inventory;
+
+ private void logInfo( String format, Object... params )
+ {
+ getLog().info( String.format( format, params ) );
+ }
+
+ private void logError( String format, Object... params )
+ {
+ getLog().error( String.format( format, params ) );
+ }
+
+ private void checkoutExisting()
+ throws ReleaseExecutionException, ReleaseFailureException
{
- File f = outputDirectory;
- if ( !f.exists() )
+ logInfo( "Checking out the pub tree ..." );
+
+ String scmUrl = pubScmUrl;
+
+ if ( localCheckout )
{
- f.mkdirs();
+ // in the release phase we have to change the checkout URL
+ // to do a local checkout instead of going over the network.
+
+ // the first step is a bit tricky, we need to know which provider!
like e.g. "scm:jgit:http://"
+ // the offset of 4 is because 'scm:' has 4 characters...
+ String providerPart = pubScmUrl.substring( 0, pubScmUrl.indexOf(
':', 4 ) );
+
+ // X TODO: also check the information from
releaseDescriptor.getScmRelativePathProjectDirectory()
+ // X TODO: in case our toplevel git directory has no pom.
+ // X TODO: fix pathname once I understand this.
+ scmUrl = providerPart + ":file://" + "target/localCheckout";
+ logInfo( "Performing a LOCAL checkout from " + scmUrl );
}
- File touch = new File( f, "touch.txt" );
+ ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
+ releaseDescriptor.setInteractive( settings.isInteractiveMode() );
+
+ releaseDescriptor.setScmPassword( password );
+ releaseDescriptor.setScmUsername( username );
+
+ releaseDescriptor.setWorkingDirectory( basedir.getAbsolutePath() );
+ releaseDescriptor.setLocalCheckout( localCheckout );
- FileWriter w = null;
try
{
- w = new FileWriter( touch );
+ scmRepository = scmRepositoryConfigurator.getConfiguredRepository(
releaseDescriptor, settings );
- w.write( "touch.txt" );
+ scmProvider = scmRepositoryConfigurator.getRepositoryProvider(
scmRepository );
+ }
+ catch ( ScmRepositoryException e )
+ {
+ // TODO: rethink this error pattern.
+ logError( e.getMessage() );
+
+ throw new ReleaseScmRepositoryException( e.getMessage(),
e.getValidationMessages() );
+ }
+ catch ( NoSuchScmProviderException e )
+ {
+ logError( e.getMessage() );
+
+ throw new ReleaseExecutionException( "Unable to configure SCM
repository: " + e.getMessage(), e );
+ }
+
+ MavenProject rootProject = ReleaseUtil.getRootProject( reactorProjects
);
+ if ( checkoutDirectory.exists() )
+ {
+ try
+ {
+ FileUtils.deleteDirectory( checkoutDirectory );
+ }
+ catch ( IOException e )
+ {
+ logError( e.getMessage() );
+
+ throw new ReleaseExecutionException( "Unable to remove old
checkout directory: " + e.getMessage(), e );
+ }
+ }
+
+ checkoutDirectory.mkdirs();
+
+ CheckOutScmResult scmResult;
+
+ try
+ {
+ ScmFileSet fileSet = new ScmFileSet( checkoutDirectory, includes,
excludes );
+ scmResult = scmProvider.checkOut( scmRepository, fileSet );
+ }
+ catch ( ScmException e )
+ {
+ logError( e.getMessage() );
+
+ throw new ReleaseExecutionException( "An error is occurred in the
checkout process: " + e.getMessage(), e );
}
catch ( IOException e )
{
- throw new MojoExecutionException( "Error creating file " + touch,
e );
+ logError( e.getMessage() );
+
+ throw new ReleaseExecutionException( "An error is occurred in the
checkout process: " + e.getMessage(), e );
}
- finally
+
+ String scmRelativePathProjectDirectory =
scmResult.getRelativePathProjectDirectory();
+ if ( StringUtils.isEmpty( scmRelativePathProjectDirectory ) )
{
- if ( w != null )
+ String basedir;
+ try
{
- try
- {
- w.close();
- }
- catch ( IOException e )
+ basedir = ReleaseUtil.getCommonBasedir( reactorProjects );
+ }
+ catch ( IOException e )
+ {
+ throw new ReleaseExecutionException( "Exception occurred while
calculating common basedir: "
+ + e.getMessage(), e );
+ }
+
+ String rootProjectBasedir =
rootProject.getBasedir().getAbsolutePath();
+ try
+ {
+ if ( ReleaseUtil.isSymlink( rootProject.getBasedir() ) )
{
- // ignore
+ rootProjectBasedir =
rootProject.getBasedir().getCanonicalPath();
}
}
+ catch ( IOException e )
+ {
+ throw new ReleaseExecutionException( e.getMessage(), e );
+ }
+ if ( rootProjectBasedir.length() > basedir.length() )
+ {
+ scmRelativePathProjectDirectory =
rootProjectBasedir.substring( basedir.length() + 1 );
+ }
+ }
+ releaseDescriptor.setScmRelativePathProjectDirectory(
scmRelativePathProjectDirectory );
+
+ if ( !scmResult.isSuccess() )
+ {
+ logError( scmResult.getProviderMessage() );
+
+ throw new ReleaseScmCommandException( "Unable to checkout from
SCM", scmResult );
+ }
+ }
+
+ private static class DotFilter implements IOFileFilter {
+
+ public boolean accept( File file )
+ {
+ return !file.getName().startsWith( "." );
+ }
+
+ public boolean accept( File dir, String name )
+ {
+ return !name.startsWith( "." );
+ }
+
+ }
+
+ /**
+ * Create a list of all the files in the checkout (which we will presently
remove). For now, duck anything that
+ * starts with a ., since the site plugin won't make any and it will dodge
metadata I'm familiar with. None if this
+ * is really good enough for safe usage with exotics like clearcase.
Perhaps protest if anything other than svn or
+ * git?
+ * @throws MojoFailureException
+ */
+ private void writeInventory() throws MojoFailureException
+ {
+ inventory = FileUtils.listFiles( checkoutDirectory, new DotFilter(),
new DotFilter());
+ SvnpubsubInventory initialInventory = new SvnpubsubInventory();
+ Set<String> paths = new HashSet<String>();
+ /*
+ * It might be cleverer to store paths relative to the
checkoutDirectory, but this really should work.
+ */
+ for ( File f : inventory )
+ {
+ // See below. We only bother about files.
+ if ( f.isFile() )
+ {
+ paths.add( f.getAbsolutePath() );
+ }
+ }
+ initialInventory.setPaths( paths );
+ try
+ {
+ MappingJsonFactory factory = new MappingJsonFactory();
+ JsonGenerator gen = factory.createJsonGenerator( inventoryFile,
JsonEncoding.UTF8 );
+ gen.writeObject( initialInventory );
+ gen.close();
+ }
+ catch ( JsonProcessingException e )
+ {
+ throw new MojoFailureException( "Failed to write inventory to " +
inventoryFile.getAbsolutePath(), e );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoFailureException( "Failed to write inventory to " +
inventoryFile.getAbsolutePath(), e );
+ }
+ }
+
+ /**
+ * Clear out the data, so we can tell what's left after the run of the
site plugin.
+ * For now, don't bother with deleting empty directories. They are fairly
harmless,
+ * and leaving them around allows this to work with pre-1.7 svn.
+ */
+ private void deleteInventory()
+ {
+ for ( File f : inventory )
+ {
+ if ( f.isFile() )
+ {
+ FileUtils.deleteQuietly( f );
+ }
+ }
+ }
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ try
+ {
+ checkoutExisting();
+ writeInventory();
+ deleteInventory();
+ }
+ catch ( ReleaseExecutionException e )
+ {
+ throw new MojoExecutionException( e.getMessage() );
+ }
+ catch ( ReleaseFailureException e )
+ {
+ throw new MojoFailureException( e.getMessage() );
+
}
}
}