git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270700 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -9,8 +9,8 @@ package org.apache.tools.ant.taskdefs; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import org.apache.myrmidon.api.AbstractTask; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.taskdefs.exec.Execute2; | import org.apache.tools.ant.taskdefs.exec.Execute2; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| @@ -18,25 +18,27 @@ import org.apache.tools.ant.types.Commandline; | |||||
| * Task as a layer on top of patch. Patch applies a diff file to an original. | * Task as a layer on top of patch. Patch applies a diff file to an original. | ||||
| * | * | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| */ | */ | ||||
| public class Patch extends Task | |||||
| public class Patch | |||||
| extends AbstractTask | |||||
| { | { | ||||
| private boolean havePatchfile = false; | |||||
| private Commandline cmd = new Commandline(); | |||||
| private File originalFile; | |||||
| private File m_originalFile; | |||||
| private File m_patchFile; | |||||
| private boolean m_backups; | |||||
| private boolean m_ignorewhitespace; | |||||
| private boolean m_reverse; | |||||
| private boolean m_quiet; | |||||
| private Integer m_strip; | |||||
| /** | /** | ||||
| * Shall patch write backups. | * Shall patch write backups. | ||||
| * | * | ||||
| * @param backups The new Backups value | * @param backups The new Backups value | ||||
| */ | */ | ||||
| public void setBackups( boolean backups ) | |||||
| public void setBackups( final boolean backups ) | |||||
| { | { | ||||
| if( backups ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-b" ); | |||||
| } | |||||
| m_backups = backups; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -44,12 +46,9 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param ignore The new Ignorewhitespace value | * @param ignore The new Ignorewhitespace value | ||||
| */ | */ | ||||
| public void setIgnorewhitespace( boolean ignore ) | |||||
| public void setIgnorewhitespace( final boolean ignorewhitespace ) | |||||
| { | { | ||||
| if( ignore ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-l" ); | |||||
| } | |||||
| m_ignorewhitespace = ignorewhitespace; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -57,9 +56,9 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param file The new Originalfile value | * @param file The new Originalfile value | ||||
| */ | */ | ||||
| public void setOriginalfile( File file ) | |||||
| public void setOriginalfile( final File originalFile ) | |||||
| { | { | ||||
| originalFile = file; | |||||
| m_originalFile = originalFile; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -67,16 +66,10 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param file The new Patchfile value | * @param file The new Patchfile value | ||||
| */ | */ | ||||
| public void setPatchfile( File file ) | |||||
| public void setPatchfile( final File patchFile ) | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( !file.exists() ) | |||||
| { | |||||
| throw new TaskException( "patchfile " + file + " doesn\'t exist" ); | |||||
| } | |||||
| cmd.createArgument().setValue( "-i" ); | |||||
| cmd.createArgument().setFile( file ); | |||||
| havePatchfile = true; | |||||
| m_patchFile = patchFile; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -84,12 +77,9 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param q The new Quiet value | * @param q The new Quiet value | ||||
| */ | */ | ||||
| public void setQuiet( boolean q ) | |||||
| public void setQuiet( final boolean quiet ) | |||||
| { | { | ||||
| if( q ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-s" ); | |||||
| } | |||||
| m_quiet = quiet; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -97,12 +87,9 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param r The new Reverse value | * @param r The new Reverse value | ||||
| */ | */ | ||||
| public void setReverse( boolean r ) | |||||
| public void setReverse( final boolean reverse ) | |||||
| { | { | ||||
| if( r ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-R" ); | |||||
| } | |||||
| m_reverse = reverse; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -111,46 +98,92 @@ public class Patch extends Task | |||||
| * | * | ||||
| * patch's <i>-p</i> option. | * patch's <i>-p</i> option. | ||||
| * | * | ||||
| * @param num The new Strip value | |||||
| * @exception TaskException Description of Exception | |||||
| * @param strip The new Strip value | |||||
| */ | */ | ||||
| public void setStrip( int num ) | |||||
| public void setStrip( final Integer strip ) | |||||
| { | |||||
| m_strip = strip; | |||||
| } | |||||
| public void execute() | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( num < 0 ) | |||||
| validate(); | |||||
| final Execute2 exe = new Execute2(); | |||||
| setupLogger( exe ); | |||||
| final Commandline cmd = buildCommand(); | |||||
| exe.setCommandline( cmd.getCommandline() ); | |||||
| try | |||||
| { | { | ||||
| throw new TaskException( "strip has to be >= 0" ); | |||||
| exe.execute(); | |||||
| } | |||||
| catch( IOException e ) | |||||
| { | |||||
| throw new TaskException( "Error", e ); | |||||
| } | } | ||||
| cmd.createArgument().setValue( "-p" + num ); | |||||
| } | } | ||||
| public void execute() | |||||
| private void validate() | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( !havePatchfile ) | |||||
| if( null == m_patchFile ) | |||||
| { | { | ||||
| throw new TaskException( "patchfile argument is required" ); | |||||
| final String message = "patchfile argument is required"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| Commandline toExecute = (Commandline)cmd.clone(); | |||||
| toExecute.setExecutable( "patch" ); | |||||
| if( !m_patchFile.exists() ) | |||||
| { | |||||
| final String message = "patchfile " + m_patchFile + " doesn\'t exist"; | |||||
| throw new TaskException( message ); | |||||
| } | |||||
| if( originalFile != null ) | |||||
| if( null != m_strip && m_strip.intValue() < 0 ) | |||||
| { | { | ||||
| toExecute.createArgument().setFile( originalFile ); | |||||
| throw new TaskException( "strip has to be >= 0" ); | |||||
| } | } | ||||
| } | |||||
| final Execute2 exe = new Execute2(); | |||||
| setupLogger( exe ); | |||||
| exe.setCommandline( toExecute.getCommandline() ); | |||||
| try | |||||
| private Commandline buildCommand() | |||||
| { | |||||
| final Commandline cmd = new Commandline(); | |||||
| cmd.setExecutable( "patch" ); | |||||
| if( m_backups ) | |||||
| { | { | ||||
| exe.execute(); | |||||
| cmd.createArgument().setValue( "-b" ); | |||||
| } | } | ||||
| catch( IOException e ) | |||||
| if( null != m_strip ) | |||||
| { | { | ||||
| throw new TaskException( "Error", e ); | |||||
| cmd.createArgument().setValue( "-p" + m_strip.intValue() ); | |||||
| } | |||||
| if( m_quiet ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-s" ); | |||||
| } | |||||
| if( m_reverse ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-R" ); | |||||
| } | |||||
| cmd.createArgument().setValue( "-i" ); | |||||
| cmd.createArgument().setFile( m_patchFile ); | |||||
| if( m_ignorewhitespace ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-l" ); | |||||
| } | } | ||||
| } | |||||
| }// Patch | |||||
| if( null != m_originalFile ) | |||||
| { | |||||
| cmd.createArgument().setFile( m_originalFile ); | |||||
| } | |||||
| return cmd; | |||||
| } | |||||
| } | |||||
| @@ -9,8 +9,8 @@ package org.apache.tools.ant.taskdefs; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import org.apache.myrmidon.api.AbstractTask; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.taskdefs.exec.Execute2; | import org.apache.tools.ant.taskdefs.exec.Execute2; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| @@ -18,25 +18,27 @@ import org.apache.tools.ant.types.Commandline; | |||||
| * Task as a layer on top of patch. Patch applies a diff file to an original. | * Task as a layer on top of patch. Patch applies a diff file to an original. | ||||
| * | * | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| */ | */ | ||||
| public class Patch extends Task | |||||
| public class Patch | |||||
| extends AbstractTask | |||||
| { | { | ||||
| private boolean havePatchfile = false; | |||||
| private Commandline cmd = new Commandline(); | |||||
| private File originalFile; | |||||
| private File m_originalFile; | |||||
| private File m_patchFile; | |||||
| private boolean m_backups; | |||||
| private boolean m_ignorewhitespace; | |||||
| private boolean m_reverse; | |||||
| private boolean m_quiet; | |||||
| private Integer m_strip; | |||||
| /** | /** | ||||
| * Shall patch write backups. | * Shall patch write backups. | ||||
| * | * | ||||
| * @param backups The new Backups value | * @param backups The new Backups value | ||||
| */ | */ | ||||
| public void setBackups( boolean backups ) | |||||
| public void setBackups( final boolean backups ) | |||||
| { | { | ||||
| if( backups ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-b" ); | |||||
| } | |||||
| m_backups = backups; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -44,12 +46,9 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param ignore The new Ignorewhitespace value | * @param ignore The new Ignorewhitespace value | ||||
| */ | */ | ||||
| public void setIgnorewhitespace( boolean ignore ) | |||||
| public void setIgnorewhitespace( final boolean ignorewhitespace ) | |||||
| { | { | ||||
| if( ignore ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-l" ); | |||||
| } | |||||
| m_ignorewhitespace = ignorewhitespace; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -57,9 +56,9 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param file The new Originalfile value | * @param file The new Originalfile value | ||||
| */ | */ | ||||
| public void setOriginalfile( File file ) | |||||
| public void setOriginalfile( final File originalFile ) | |||||
| { | { | ||||
| originalFile = file; | |||||
| m_originalFile = originalFile; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -67,16 +66,10 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param file The new Patchfile value | * @param file The new Patchfile value | ||||
| */ | */ | ||||
| public void setPatchfile( File file ) | |||||
| public void setPatchfile( final File patchFile ) | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( !file.exists() ) | |||||
| { | |||||
| throw new TaskException( "patchfile " + file + " doesn\'t exist" ); | |||||
| } | |||||
| cmd.createArgument().setValue( "-i" ); | |||||
| cmd.createArgument().setFile( file ); | |||||
| havePatchfile = true; | |||||
| m_patchFile = patchFile; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -84,12 +77,9 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param q The new Quiet value | * @param q The new Quiet value | ||||
| */ | */ | ||||
| public void setQuiet( boolean q ) | |||||
| public void setQuiet( final boolean quiet ) | |||||
| { | { | ||||
| if( q ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-s" ); | |||||
| } | |||||
| m_quiet = quiet; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -97,12 +87,9 @@ public class Patch extends Task | |||||
| * | * | ||||
| * @param r The new Reverse value | * @param r The new Reverse value | ||||
| */ | */ | ||||
| public void setReverse( boolean r ) | |||||
| public void setReverse( final boolean reverse ) | |||||
| { | { | ||||
| if( r ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-R" ); | |||||
| } | |||||
| m_reverse = reverse; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -111,46 +98,92 @@ public class Patch extends Task | |||||
| * | * | ||||
| * patch's <i>-p</i> option. | * patch's <i>-p</i> option. | ||||
| * | * | ||||
| * @param num The new Strip value | |||||
| * @exception TaskException Description of Exception | |||||
| * @param strip The new Strip value | |||||
| */ | */ | ||||
| public void setStrip( int num ) | |||||
| public void setStrip( final Integer strip ) | |||||
| { | |||||
| m_strip = strip; | |||||
| } | |||||
| public void execute() | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( num < 0 ) | |||||
| validate(); | |||||
| final Execute2 exe = new Execute2(); | |||||
| setupLogger( exe ); | |||||
| final Commandline cmd = buildCommand(); | |||||
| exe.setCommandline( cmd.getCommandline() ); | |||||
| try | |||||
| { | { | ||||
| throw new TaskException( "strip has to be >= 0" ); | |||||
| exe.execute(); | |||||
| } | |||||
| catch( IOException e ) | |||||
| { | |||||
| throw new TaskException( "Error", e ); | |||||
| } | } | ||||
| cmd.createArgument().setValue( "-p" + num ); | |||||
| } | } | ||||
| public void execute() | |||||
| private void validate() | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( !havePatchfile ) | |||||
| if( null == m_patchFile ) | |||||
| { | { | ||||
| throw new TaskException( "patchfile argument is required" ); | |||||
| final String message = "patchfile argument is required"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| Commandline toExecute = (Commandline)cmd.clone(); | |||||
| toExecute.setExecutable( "patch" ); | |||||
| if( !m_patchFile.exists() ) | |||||
| { | |||||
| final String message = "patchfile " + m_patchFile + " doesn\'t exist"; | |||||
| throw new TaskException( message ); | |||||
| } | |||||
| if( originalFile != null ) | |||||
| if( null != m_strip && m_strip.intValue() < 0 ) | |||||
| { | { | ||||
| toExecute.createArgument().setFile( originalFile ); | |||||
| throw new TaskException( "strip has to be >= 0" ); | |||||
| } | } | ||||
| } | |||||
| final Execute2 exe = new Execute2(); | |||||
| setupLogger( exe ); | |||||
| exe.setCommandline( toExecute.getCommandline() ); | |||||
| try | |||||
| private Commandline buildCommand() | |||||
| { | |||||
| final Commandline cmd = new Commandline(); | |||||
| cmd.setExecutable( "patch" ); | |||||
| if( m_backups ) | |||||
| { | { | ||||
| exe.execute(); | |||||
| cmd.createArgument().setValue( "-b" ); | |||||
| } | } | ||||
| catch( IOException e ) | |||||
| if( null != m_strip ) | |||||
| { | { | ||||
| throw new TaskException( "Error", e ); | |||||
| cmd.createArgument().setValue( "-p" + m_strip.intValue() ); | |||||
| } | |||||
| if( m_quiet ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-s" ); | |||||
| } | |||||
| if( m_reverse ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-R" ); | |||||
| } | |||||
| cmd.createArgument().setValue( "-i" ); | |||||
| cmd.createArgument().setFile( m_patchFile ); | |||||
| if( m_ignorewhitespace ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-l" ); | |||||
| } | } | ||||
| } | |||||
| }// Patch | |||||
| if( null != m_originalFile ) | |||||
| { | |||||
| cmd.createArgument().setFile( m_originalFile ); | |||||
| } | |||||
| return cmd; | |||||
| } | |||||
| } | |||||