Browse Source

Refactor and clean code

Also start using Execute2 abstraction


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270563 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
ceaf662ffb
2 changed files with 114 additions and 278 deletions
  1. +57
    -139
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/unix/Rpm.java
  2. +57
    -139
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/unix/Rpm.java

+ 57
- 139
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/unix/Rpm.java View File

@@ -7,220 +7,138 @@
*/ */
package org.apache.tools.ant.taskdefs.unix; package org.apache.tools.ant.taskdefs.unix;


import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
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.Execute;
import org.apache.tools.ant.taskdefs.exec.LogOutputStream;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;


/** /**
* @author lucas@collab.net * @author lucas@collab.net
*/ */
public class Rpm extends Task
public class Rpm
extends AbstractTask
{ {

/** /**
* the rpm command to use * the rpm command to use
*/ */
private String command = "-bb";
private String m_command = "-bb";


/** /**
* clean BUILD directory * clean BUILD directory
*/ */
private boolean cleanBuildDir = false;
private boolean m_cleanBuildDir;


/** /**
* remove spec file * remove spec file
*/ */
private boolean removeSpec = false;
private boolean m_removeSpec;


/** /**
* remove sources * remove sources
*/ */
private boolean removeSource = false;

/**
* the file to direct standard error from the command
*/
private File error;

/**
* the file to direct standard output from the command
*/
private File output;
private boolean m_removeSource;


/** /**
* the spec file * the spec file
*/ */
private String specFile;
private String m_specFile;


/** /**
* the rpm top dir * the rpm top dir
*/ */
private File topDir;

public void setCleanBuildDir( boolean cbd )
{
cleanBuildDir = cbd;
}

public void setCommand( String c )
{
this.command = c;
}
private File m_topDir;


public void setError( File error )
public void setCleanBuildDir( boolean cleanBuildDir )
{ {
this.error = error;
m_cleanBuildDir = cleanBuildDir;
} }


public void setOutput( File output )
public void setCommand( final String command )
{ {
this.output = output;
m_command = command;
} }


public void setRemoveSource( boolean rs )
public void setRemoveSource( final boolean removeSource )
{ {
removeSource = rs;
m_removeSource = removeSource;
} }


public void setRemoveSpec( boolean rs )
public void setRemoveSpec( final boolean removeSpec )
{ {
removeSpec = rs;
m_removeSpec = removeSpec;
} }


public void setSpecFile( String sf )
public void setSpecFile( final String specFile )
throws TaskException throws TaskException
{ {
if( ( sf == null ) || ( sf.trim().equals( "" ) ) )
if( ( specFile == null ) || ( specFile.trim().equals( "" ) ) )
{ {
throw new TaskException( "You must specify a spec file" ); throw new TaskException( "You must specify a spec file" );
} }
this.specFile = sf;
m_specFile = specFile;
} }


public void setTopDir( File td )
public void setTopDir( final File topDir )
{ {
this.topDir = td;
m_topDir = topDir;
} }


public void execute() public void execute()
throws TaskException throws TaskException
{ {
final Commandline cmd = createCommand();
final Execute2 exe = new Execute2();
setupLogger( exe );


Commandline toExecute = new Commandline();
if( m_topDir == null ) m_topDir = getBaseDirectory();
exe.setWorkingDirectory( m_topDir );


toExecute.setExecutable( "rpm" );
if( topDir != null )
exe.setCommandline( cmd.getCommandline() );
try
{ {
toExecute.createArgument().setValue( "--define" );
toExecute.createArgument().setValue( "_topdir" + topDir );
}
final String message = "Building the RPM based on the " + m_specFile + " file";
getLogger().info( message );


toExecute.createArgument().setLine( command );

if( cleanBuildDir )
{
toExecute.createArgument().setValue( "--clean" );
}
if( removeSpec )
{
toExecute.createArgument().setValue( "--rmspec" );
if( 0 != exe.execute() )
{
throw new TaskException( "Failed to execute rpm" );
}
} }
if( removeSource )
catch( IOException e )
{ {
toExecute.createArgument().setValue( "--rmsource" );
throw new TaskException( "Error", e );
} }
}


toExecute.createArgument().setValue( "SPECS/" + specFile );
OutputStream outputstream = null;
OutputStream errorstream = null;
if( error == null && output == null )
private Commandline createCommand()
throws TaskException
{
final Commandline cmd = new Commandline();
cmd.setExecutable( "rpm" );
if( m_topDir != null )
{ {
outputstream = new LogOutputStream( getLogger(), false );
errorstream = new LogOutputStream( getLogger(), true );
cmd.createArgument().setValue( "--define" );
cmd.createArgument().setValue( "_topdir" + m_topDir );
} }
else
{
if( output != null )
{
try
{
outputstream = new PrintStream( new BufferedOutputStream( new FileOutputStream( output ) ) );
}
catch( IOException e )
{
throw new TaskException( "Error", e );
}
}
else
{
outputstream = new LogOutputStream( getLogger(), false );
}
if( error != null )
{
try
{
errorstream = new PrintStream( new BufferedOutputStream( new FileOutputStream( error ) ) );
}
catch( IOException e )
{
throw new TaskException( "Error", e );
}
}
else
{
errorstream = new LogOutputStream( getLogger(), true );
}
}

Execute exe = new Execute();
exe.setOutput( outputstream );
exe.setError( errorstream );


if( topDir == null ) topDir = getBaseDirectory();
exe.setWorkingDirectory( topDir );
cmd.createArgument().setLine( m_command );


exe.setCommandline( toExecute.getCommandline() );
try
if( m_cleanBuildDir )
{ {
exe.execute();
getLogger().info( "Building the RPM based on the " + specFile + " file" );
cmd.createArgument().setValue( "--clean" );
} }
catch( IOException e )
if( m_removeSpec )
{ {
throw new TaskException( "Error", e );
cmd.createArgument().setValue( "--rmspec" );
} }
finally
if( m_removeSource )
{ {
if( output != null )
{
try
{
outputstream.close();
}
catch( IOException e )
{
}
}
if( error != null )
{
try
{
errorstream.close();
}
catch( IOException e )
{
}
}
cmd.createArgument().setValue( "--rmsource" );
} }

cmd.createArgument().setValue( "SPECS/" + m_specFile );
return cmd;
} }
} }

+ 57
- 139
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/unix/Rpm.java View File

@@ -7,220 +7,138 @@
*/ */
package org.apache.tools.ant.taskdefs.unix; package org.apache.tools.ant.taskdefs.unix;


import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
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.Execute;
import org.apache.tools.ant.taskdefs.exec.LogOutputStream;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;


/** /**
* @author lucas@collab.net * @author lucas@collab.net
*/ */
public class Rpm extends Task
public class Rpm
extends AbstractTask
{ {

/** /**
* the rpm command to use * the rpm command to use
*/ */
private String command = "-bb";
private String m_command = "-bb";


/** /**
* clean BUILD directory * clean BUILD directory
*/ */
private boolean cleanBuildDir = false;
private boolean m_cleanBuildDir;


/** /**
* remove spec file * remove spec file
*/ */
private boolean removeSpec = false;
private boolean m_removeSpec;


/** /**
* remove sources * remove sources
*/ */
private boolean removeSource = false;

/**
* the file to direct standard error from the command
*/
private File error;

/**
* the file to direct standard output from the command
*/
private File output;
private boolean m_removeSource;


/** /**
* the spec file * the spec file
*/ */
private String specFile;
private String m_specFile;


/** /**
* the rpm top dir * the rpm top dir
*/ */
private File topDir;

public void setCleanBuildDir( boolean cbd )
{
cleanBuildDir = cbd;
}

public void setCommand( String c )
{
this.command = c;
}
private File m_topDir;


public void setError( File error )
public void setCleanBuildDir( boolean cleanBuildDir )
{ {
this.error = error;
m_cleanBuildDir = cleanBuildDir;
} }


public void setOutput( File output )
public void setCommand( final String command )
{ {
this.output = output;
m_command = command;
} }


public void setRemoveSource( boolean rs )
public void setRemoveSource( final boolean removeSource )
{ {
removeSource = rs;
m_removeSource = removeSource;
} }


public void setRemoveSpec( boolean rs )
public void setRemoveSpec( final boolean removeSpec )
{ {
removeSpec = rs;
m_removeSpec = removeSpec;
} }


public void setSpecFile( String sf )
public void setSpecFile( final String specFile )
throws TaskException throws TaskException
{ {
if( ( sf == null ) || ( sf.trim().equals( "" ) ) )
if( ( specFile == null ) || ( specFile.trim().equals( "" ) ) )
{ {
throw new TaskException( "You must specify a spec file" ); throw new TaskException( "You must specify a spec file" );
} }
this.specFile = sf;
m_specFile = specFile;
} }


public void setTopDir( File td )
public void setTopDir( final File topDir )
{ {
this.topDir = td;
m_topDir = topDir;
} }


public void execute() public void execute()
throws TaskException throws TaskException
{ {
final Commandline cmd = createCommand();
final Execute2 exe = new Execute2();
setupLogger( exe );


Commandline toExecute = new Commandline();
if( m_topDir == null ) m_topDir = getBaseDirectory();
exe.setWorkingDirectory( m_topDir );


toExecute.setExecutable( "rpm" );
if( topDir != null )
exe.setCommandline( cmd.getCommandline() );
try
{ {
toExecute.createArgument().setValue( "--define" );
toExecute.createArgument().setValue( "_topdir" + topDir );
}
final String message = "Building the RPM based on the " + m_specFile + " file";
getLogger().info( message );


toExecute.createArgument().setLine( command );

if( cleanBuildDir )
{
toExecute.createArgument().setValue( "--clean" );
}
if( removeSpec )
{
toExecute.createArgument().setValue( "--rmspec" );
if( 0 != exe.execute() )
{
throw new TaskException( "Failed to execute rpm" );
}
} }
if( removeSource )
catch( IOException e )
{ {
toExecute.createArgument().setValue( "--rmsource" );
throw new TaskException( "Error", e );
} }
}


toExecute.createArgument().setValue( "SPECS/" + specFile );
OutputStream outputstream = null;
OutputStream errorstream = null;
if( error == null && output == null )
private Commandline createCommand()
throws TaskException
{
final Commandline cmd = new Commandline();
cmd.setExecutable( "rpm" );
if( m_topDir != null )
{ {
outputstream = new LogOutputStream( getLogger(), false );
errorstream = new LogOutputStream( getLogger(), true );
cmd.createArgument().setValue( "--define" );
cmd.createArgument().setValue( "_topdir" + m_topDir );
} }
else
{
if( output != null )
{
try
{
outputstream = new PrintStream( new BufferedOutputStream( new FileOutputStream( output ) ) );
}
catch( IOException e )
{
throw new TaskException( "Error", e );
}
}
else
{
outputstream = new LogOutputStream( getLogger(), false );
}
if( error != null )
{
try
{
errorstream = new PrintStream( new BufferedOutputStream( new FileOutputStream( error ) ) );
}
catch( IOException e )
{
throw new TaskException( "Error", e );
}
}
else
{
errorstream = new LogOutputStream( getLogger(), true );
}
}

Execute exe = new Execute();
exe.setOutput( outputstream );
exe.setError( errorstream );


if( topDir == null ) topDir = getBaseDirectory();
exe.setWorkingDirectory( topDir );
cmd.createArgument().setLine( m_command );


exe.setCommandline( toExecute.getCommandline() );
try
if( m_cleanBuildDir )
{ {
exe.execute();
getLogger().info( "Building the RPM based on the " + specFile + " file" );
cmd.createArgument().setValue( "--clean" );
} }
catch( IOException e )
if( m_removeSpec )
{ {
throw new TaskException( "Error", e );
cmd.createArgument().setValue( "--rmspec" );
} }
finally
if( m_removeSource )
{ {
if( output != null )
{
try
{
outputstream.close();
}
catch( IOException e )
{
}
}
if( error != null )
{
try
{
errorstream.close();
}
catch( IOException e )
{
}
}
cmd.createArgument().setValue( "--rmsource" );
} }

cmd.createArgument().setValue( "SPECS/" + m_specFile );
return cmd;
} }
} }

Loading…
Cancel
Save