Author: jdcasey Date: Fri Jun 22 14:14:01 2007 New Revision: 549959 URL: http://svn.apache.org/viewvc?view=rev&rev=549959 Log: Consolidating down to one apply mojo, and adjusting documentation to match.
Added: maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyMojo.java (contents, props changed) - copied, changed from r549941, maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyPatchDirectoryMojo.java Removed: maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/AbstractPatchMojo.java maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyPatchDirectoryMojo.java maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyPatchesMojo.java Modified: maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-single-patch/pom.xml maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-two-patches-in-order/pom.xml maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-enum-missing/pom.xml maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-tracking-file-present/pom.xml maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/examples/multiple.apt maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/index.apt maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/usage.apt Modified: maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-single-patch/pom.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-single-patch/pom.xml?view=diff&rev=549959&r1=549958&r2=549959 ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-single-patch/pom.xml (original) +++ maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-single-patch/pom.xml Fri Jun 22 14:14:01 2007 @@ -49,7 +49,7 @@ <phase>initialize</phase> <goals> - <goal>apply-directory</goal> + <goal>apply</goal> </goals> </execution> </executions> Modified: maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-two-patches-in-order/pom.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-two-patches-in-order/pom.xml?view=diff&rev=549959&r1=549958&r2=549959 ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-two-patches-in-order/pom.xml (original) +++ maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/apply/apply-two-patches-in-order/pom.xml Fri Jun 22 14:14:01 2007 @@ -50,7 +50,7 @@ <phase>initialize</phase> <goals> - <goal>apply-directory</goal> + <goal>apply</goal> </goals> <configuration> Modified: maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-enum-missing/pom.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-enum-missing/pom.xml?view=diff&rev=549959&r1=549958&r2=549959 ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-enum-missing/pom.xml (original) +++ maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-enum-missing/pom.xml Fri Jun 22 14:14:01 2007 @@ -46,7 +46,7 @@ <phase>initialize</phase> <goals> - <goal>apply-directory</goal> + <goal>apply</goal> </goals> </execution> </executions> Modified: maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-tracking-file-present/pom.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-tracking-file-present/pom.xml?view=diff&rev=549959&r1=549958&r2=549959 ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-tracking-file-present/pom.xml (original) +++ maven/sandbox/trunk/plugins/maven-patch-plugin/src/it/projects/autoskip/skip-when-patch-tracking-file-present/pom.xml Fri Jun 22 14:14:01 2007 @@ -42,7 +42,7 @@ <phase>initialize</phase> <goals> - <goal>apply-directory</goal> + <goal>apply</goal> </goals> </execution> </executions> Copied: maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyMojo.java (from r549941, maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyPatchDirectoryMojo.java) URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyMojo.java?view=diff&rev=549959&p1=maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyPatchDirectoryMojo.java&r1=549941&p2=maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyMojo.java&r2=549959 ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyPatchDirectoryMojo.java (original) +++ maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyMojo.java Fri Jun 22 14:14:01 2007 @@ -15,13 +15,22 @@ * */ +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.cli.CommandLineException; +import org.codehaus.plexus.util.cli.CommandLineUtils; +import org.codehaus.plexus.util.cli.Commandline; +import org.codehaus.plexus.util.cli.StreamConsumer; +import org.codehaus.plexus.util.cli.shell.BourneShell; + import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; @@ -29,28 +38,22 @@ import java.util.Map; import java.util.Map.Entry; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.codehaus.plexus.util.FileUtils; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.cli.CommandLineException; -import org.codehaus.plexus.util.cli.CommandLineUtils; -import org.codehaus.plexus.util.cli.Commandline; -import org.codehaus.plexus.util.cli.StreamConsumer; -import org.codehaus.plexus.util.cli.shell.BourneShell; - /** - * Apply a set of patches to project sources. + * Apply one or more patches to project sources. * - * @goal apply-directory - * @phase generate-sources + * @goal apply + * @phase process-sources */ -public class ApplyPatchDirectoryMojo - extends AbstractPatchMojo +public class ApplyMojo + extends AbstractMojo { public static final List PATCH_FAILURE_WATCH_PHRASES; + public static final List DEFAULT_IGNORED_PATCHES; + + public static final List DEFAULT_IGNORED_PATCH_PATTERNS; + static { List watches = new ArrayList(); @@ -60,9 +63,38 @@ watches.add( "reject" ); PATCH_FAILURE_WATCH_PHRASES = watches; + + List ignored = new ArrayList(); + + ignored.add( ".svn" ); + ignored.add( "CVS" ); + + DEFAULT_IGNORED_PATCHES = ignored; + + List ignoredPatterns = new ArrayList(); + + ignoredPatterns.add( ".svn/**" ); + ignoredPatterns.add( "CVS/**" ); + + DEFAULT_IGNORED_PATCH_PATTERNS = ignoredPatterns; } /** + * Whether to exclude default ignored patch items, such as .svn or CVS directories. + * + * @parameter default-value="true" + */ + private boolean useDefaultIgnores; + + /** + * The list of patch file names (without directory information), supplying the order in which patches should be + * applied. (relative to 'patchSourceDir') + * + * @parameter + */ + protected List patches; + + /** * Whether to skip this mojo's execution. * * @parameter default-value="false" alias="patch.apply.skip" @@ -102,11 +134,11 @@ /** * setting natural order processing to true will all patches in a directory to be processed in an natural order * alleviating the need to declare patches directly in the project file. - * + * * @parameter default-value="false" */ private boolean naturalOrderProcessing; - + /** * When the strictPatching flag is set, this parameter is useful to mark certain contents of the patch-source * directory that should be ignored without causing the build to fail. @@ -163,7 +195,28 @@ * * @parameter */ - private List patchFailureWatchPhrases = PATCH_FAILURE_WATCH_PHRASES; + private List failurePhrases = PATCH_FAILURE_WATCH_PHRASES; + + /** + * The original file which will be modified by the patch. Mutually exclusive with workDir. + * + * @parameter + */ + private File originalFile; + + /** + * The file which is the original file, plus modifications from the patch. Mutually exclusive with workDir. + * + * @parameter + */ + private File destFile; + + /** + * The single patch file to apply. Mutually exclusive with 'patches'. + * + * @parameter + */ + private File patchFile; /** * @parameter default-value="src/main/patches" @@ -175,39 +228,51 @@ * Apply the patches. Give preference to patchFile over patchSourceDir/patches, and preference to originalFile over * workDir. */ - public void doExecute() + public void execute() throws MojoExecutionException, MojoFailureException { + boolean patchDirEnabled = ( ( patches != null ) && !patches.isEmpty() ) || naturalOrderProcessing; + boolean patchFileEnabled = patchFile != null; + // if patches is null or empty, and naturalOrderProcessing is not true then disable patching - if ( ( patches == null || patches.isEmpty() ) && !naturalOrderProcessing ) + if ( !patchFileEnabled && !patchDirEnabled ) { getLog().info( "Patching is disabled for this project." ); return; } - + if ( skipApplication ) { getLog().info( "Skipping patchfile application (per configuration)." ); return; } - patchTrackingFile.getParentFile().mkdirs(); + patchTrackingFile.getParentFile().mkdirs(); + + Map patchesToApply = null; - try + try { - List foundPatchFiles = FileUtils.getFileNames( patchDirectory, "*", null, false ); - - Map patchesApplied = findPatchesToApply(foundPatchFiles, patchDirectory ); + if ( patchFileEnabled ) + { + patchesToApply = Collections.singletonMap( patchFile.getName(), createPatchCommand( patchFile ) ); + } + else + { + List foundPatchFiles = FileUtils.getFileNames( patchDirectory, "*", null, false ); - checkStrictPatchCompliance(foundPatchFiles); + patchesToApply = findPatchesToApply(foundPatchFiles, patchDirectory ); - String output = applyPatches(patchesApplied); + checkStrictPatchCompliance(foundPatchFiles); + } + + String output = applyPatches(patchesToApply); checkForWatchPhrases(output); - writeTrackingFile(patchesApplied); - } - catch (IOException ioe) + writeTrackingFile(patchesToApply); + } + catch (IOException ioe) { throw new MojoExecutionException( "unable to obtain list of patch files", ioe); } @@ -216,18 +281,16 @@ private Map findPatchesToApply( List foundPatchFiles, File patchSourceDir ) throws MojoFailureException { - List patches = getPatches(); - - Map patchesApplied = new LinkedHashMap( ); + Map patchesApplied = new LinkedHashMap(); if ( naturalOrderProcessing ) { patches = new ArrayList( foundPatchFiles ) ; Collections.sort( patches ); } - + String alreadyAppliedPatches = ""; - + try { if ( optimizations && patchTrackingFile.exists() ) @@ -239,11 +302,11 @@ { throw new MojoFailureException( "unable to read patch tracking file: " + ioe.getMessage() ); } - + for ( Iterator it = patches.iterator(); it.hasNext(); ) { String patch = (String) it.next(); - + if ( alreadyAppliedPatches.indexOf( patch ) == -1 ) { File patchFile = new File( patchSourceDir, patch ); @@ -276,7 +339,7 @@ } } } - + return patchesApplied; } @@ -293,7 +356,7 @@ ignored.addAll( ignoredPatches ); } - if ( useDefaultIgnores() ) + if ( useDefaultIgnores ) { ignored.addAll( DEFAULT_IGNORED_PATCHES ); } @@ -354,7 +417,7 @@ try { getLog().info( "Applying patch: " + patchName ); - int result = CommandLineUtils.executeCommandLine( cli, consumer, consumer ); + int result = executeCommandLine( cli, consumer, consumer ); if ( result != 0 ) { @@ -371,6 +434,17 @@ return outputWriter.toString(); } + private int executeCommandLine( Commandline cli, StreamConsumer out, StreamConsumer err ) + throws CommandLineException + { + if ( getLog().isDebugEnabled() ) + { + getLog().debug( "Executing:\n" + cli + "\n" ); + } + + return CommandLineUtils.executeCommandLine( cli, out, err ); + } + private void writeTrackingFile( Map patchesApplied ) throws MojoExecutionException { @@ -378,16 +452,16 @@ try { boolean appending = patchTrackingFile.exists(); - + writer = new FileWriter( patchTrackingFile, appending ); - + for ( Iterator it = patchesApplied.keySet().iterator(); it.hasNext(); ) { if ( appending ) { - writer.write( System.getProperty( "line.separator" ) ); + writer.write( System.getProperty( "line.separator" ) ); } - + String patch = (String) it.next(); writer.write( patch ); @@ -412,7 +486,7 @@ private void checkForWatchPhrases( String output ) throws MojoExecutionException { - for ( Iterator it = patchFailureWatchPhrases.iterator(); it.hasNext(); ) + for ( Iterator it = failurePhrases.iterator(); it.hasNext(); ) { String phrase = (String) it.next(); @@ -437,6 +511,18 @@ cli.setExecutable( "patch" ); cli.setWorkingDirectory( targetDirectory.getAbsolutePath() ); + + if ( originalFile != null ) + { + cli.createArg().setLine( originalFile.getAbsolutePath() ); + + if ( destFile != null ) + { + cli.createArg().setLine( "-o " + destFile.getAbsolutePath() ); + } + + cli.createArg().setLine( patchFile.getAbsolutePath() ); + } cli.createArg().setLine( "-p" + strip ); Propchange: maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyMojo.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/sandbox/trunk/plugins/maven-patch-plugin/src/main/java/org/apache/maven/plugin/patch/ApplyMojo.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/examples/multiple.apt URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/examples/multiple.apt?view=diff&rev=549959&r1=549958&r2=549959 ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/examples/multiple.apt (original) +++ maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/examples/multiple.apt Fri Jun 22 14:14:01 2007 @@ -59,7 +59,7 @@ </configuration> <phase>process-sources</phase> <goals> - <goal>apply-directory</goal> + <goal>apply</goal> </goals> </execution> <execution> @@ -73,7 +73,7 @@ </configuration> <phase>process-sources</phase> <goals> - <goal>apply-directory</goal> + <goal>apply</goal> </goals> </execution> </executions> Modified: maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/index.apt URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/index.apt?view=diff&rev=549959&r1=549958&r2=549959 ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/index.apt (original) +++ maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/index.apt Fri Jun 22 14:14:01 2007 @@ -33,7 +33,7 @@ * Goals Overview - The patch plugin has two goals, one for applying a single declared patch and another for applying a directory of patches. + The patch plugin has a single goal that can apply either a single declared patch or a directory of patches. Application of an entire patch directory can be configured with various patch-inclusion, -exclusion, and -ordering options. * Usage Modified: maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/usage.apt URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/usage.apt?view=diff&rev=549959&r1=549958&r2=549959 ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/usage.apt (original) +++ maven/sandbox/trunk/plugins/maven-patch-plugin/src/site/apt/usage.apt Fri Jun 22 14:14:01 2007 @@ -56,7 +56,6 @@ <executions> <execution> <id>patch</id> - <phase>process-sources</phase> <goals> <goal>apply</goal> </goals>