git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271347 13f79535-47bb-0310-9956-ffa450edef68master
@@ -1,188 +0,0 @@ | |||||
/* | |||||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
* | |||||
* This software is published under the terms of the Apache Software License | |||||
* version 1.1, a copy of which has been included with this distribution in | |||||
* the LICENSE.txt file. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.unix; | |||||
import java.io.File; | |||||
import java.io.IOException; | |||||
import org.apache.aut.nativelib.Os; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.myrmidon.framework.Pattern; | |||||
import org.apache.myrmidon.framework.PatternSet; | |||||
import org.apache.tools.ant.taskdefs.exec.Execute; | |||||
import org.apache.tools.ant.taskdefs.exec.ExecuteOn; | |||||
import org.apache.tools.ant.types.Argument; | |||||
import org.apache.tools.ant.types.FileSet; | |||||
/** | |||||
* Chmod equivalent for unix-like environments. | |||||
* | |||||
* @author costin@eng.sun.com | |||||
* @author Mariusz Nowostawski (Marni) <a | |||||
* href="mailto:mnowostawski@infoscience.otago.ac.nz"> | |||||
* mnowostawski@infoscience.otago.ac.nz</a> | |||||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||||
*/ | |||||
public class Chmod | |||||
extends ExecuteOn | |||||
{ | |||||
private FileSet m_defaultSet = new FileSet(); | |||||
private boolean m_defaultSetDefined; | |||||
private boolean m_havePerm; | |||||
public Chmod() | |||||
throws TaskException | |||||
{ | |||||
super.setExecutable( "chmod" ); | |||||
super.setParallel( true ); | |||||
super.setSkipEmptyFilesets( true ); | |||||
} | |||||
/** | |||||
* Sets whether default exclusions should be used or not. | |||||
* | |||||
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions | |||||
* should be used, "false"|"off"|"no" when they shouldn't be used. | |||||
*/ | |||||
public void setDefaultExcludes( boolean useDefaultExcludes ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.setDefaultExcludes( useDefaultExcludes ); | |||||
} | |||||
public void setDir( File src ) | |||||
{ | |||||
m_defaultSet.setDir( src ); | |||||
} | |||||
/** | |||||
* Sets the set of exclude patterns. Patterns may be separated by a comma or | |||||
* a space. | |||||
*/ | |||||
public void setExcludes( String excludes ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.setExcludes( excludes ); | |||||
} | |||||
public void setExecutable( String e ) | |||||
throws TaskException | |||||
{ | |||||
throw new TaskException( getContext().getName() + " doesn\'t support the executable attribute" ); | |||||
} | |||||
public void setFile( File src ) | |||||
{ | |||||
final FileSet fileSet = new FileSet(); | |||||
fileSet.setDir( new File( src.getParent() ) ); | |||||
fileSet.addInclude( new Pattern( src.getName() ) ); | |||||
addFileset( fileSet ); | |||||
} | |||||
/** | |||||
* Sets the set of include patterns. Patterns may be separated by a comma or | |||||
* a space. | |||||
* | |||||
* @param includes the string containing the include patterns | |||||
*/ | |||||
public void setIncludes( String includes ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.setIncludes( includes ); | |||||
} | |||||
public void setPerm( String perm ) | |||||
{ | |||||
addArg( new Argument( perm ) ); | |||||
m_havePerm = true; | |||||
} | |||||
public void setSkipEmptyFilesets( final boolean skip ) | |||||
{ | |||||
final String message = getContext().getName() + " doesn\'t support the skipemptyfileset attribute"; | |||||
throw new IllegalArgumentException( message ); | |||||
} | |||||
/** | |||||
* add a name entry on the exclude list | |||||
*/ | |||||
public void addExclude( final Pattern pattern ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.addExclude( pattern ); | |||||
} | |||||
/** | |||||
* add a name entry on the include list | |||||
*/ | |||||
public void addInclude( final Pattern pattern ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.addInclude( pattern ); | |||||
} | |||||
/** | |||||
* add a set of patterns | |||||
*/ | |||||
public void addPatternSet( final PatternSet set ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.addPatternSet( set ); | |||||
} | |||||
public void execute() | |||||
throws TaskException | |||||
{ | |||||
if( m_defaultSetDefined || m_defaultSet.getDir() == null ) | |||||
{ | |||||
super.execute(); | |||||
} | |||||
else if( isValidOs() ) | |||||
{ | |||||
// we are chmodding the given directory | |||||
final Argument argument = | |||||
new Argument( m_defaultSet.getDir().getPath() ); | |||||
addArg( argument ); | |||||
final Execute execute = prepareExec(); | |||||
try | |||||
{ | |||||
execute.setCommandline( getCommand().getCommandline() ); | |||||
runExecute( execute ); | |||||
} | |||||
catch( final IOException ioe ) | |||||
{ | |||||
final String message = "Execute failed: " + ioe; | |||||
throw new TaskException( message, ioe ); | |||||
} | |||||
finally | |||||
{ | |||||
// close the output file if required | |||||
logFlush(); | |||||
} | |||||
} | |||||
} | |||||
protected boolean isValidOs() | |||||
{ | |||||
return Os.isFamily( "unix" ) && super.isValidOs(); | |||||
} | |||||
protected void validate() | |||||
throws TaskException | |||||
{ | |||||
if( !m_havePerm ) | |||||
{ | |||||
throw new TaskException( "Required attribute perm not set in chmod" ); | |||||
} | |||||
if( m_defaultSetDefined && m_defaultSet.getDir() != null ) | |||||
{ | |||||
addFileset( m_defaultSet ); | |||||
} | |||||
super.validate(); | |||||
} | |||||
} |
@@ -1,188 +0,0 @@ | |||||
/* | |||||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
* | |||||
* This software is published under the terms of the Apache Software License | |||||
* version 1.1, a copy of which has been included with this distribution in | |||||
* the LICENSE.txt file. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.unix; | |||||
import java.io.File; | |||||
import java.io.IOException; | |||||
import org.apache.aut.nativelib.Os; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.myrmidon.framework.Pattern; | |||||
import org.apache.myrmidon.framework.PatternSet; | |||||
import org.apache.tools.ant.taskdefs.exec.Execute; | |||||
import org.apache.tools.ant.taskdefs.exec.ExecuteOn; | |||||
import org.apache.tools.ant.types.Argument; | |||||
import org.apache.tools.ant.types.FileSet; | |||||
/** | |||||
* Chmod equivalent for unix-like environments. | |||||
* | |||||
* @author costin@eng.sun.com | |||||
* @author Mariusz Nowostawski (Marni) <a | |||||
* href="mailto:mnowostawski@infoscience.otago.ac.nz"> | |||||
* mnowostawski@infoscience.otago.ac.nz</a> | |||||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||||
*/ | |||||
public class Chmod | |||||
extends ExecuteOn | |||||
{ | |||||
private FileSet m_defaultSet = new FileSet(); | |||||
private boolean m_defaultSetDefined; | |||||
private boolean m_havePerm; | |||||
public Chmod() | |||||
throws TaskException | |||||
{ | |||||
super.setExecutable( "chmod" ); | |||||
super.setParallel( true ); | |||||
super.setSkipEmptyFilesets( true ); | |||||
} | |||||
/** | |||||
* Sets whether default exclusions should be used or not. | |||||
* | |||||
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions | |||||
* should be used, "false"|"off"|"no" when they shouldn't be used. | |||||
*/ | |||||
public void setDefaultExcludes( boolean useDefaultExcludes ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.setDefaultExcludes( useDefaultExcludes ); | |||||
} | |||||
public void setDir( File src ) | |||||
{ | |||||
m_defaultSet.setDir( src ); | |||||
} | |||||
/** | |||||
* Sets the set of exclude patterns. Patterns may be separated by a comma or | |||||
* a space. | |||||
*/ | |||||
public void setExcludes( String excludes ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.setExcludes( excludes ); | |||||
} | |||||
public void setExecutable( String e ) | |||||
throws TaskException | |||||
{ | |||||
throw new TaskException( getContext().getName() + " doesn\'t support the executable attribute" ); | |||||
} | |||||
public void setFile( File src ) | |||||
{ | |||||
final FileSet fileSet = new FileSet(); | |||||
fileSet.setDir( new File( src.getParent() ) ); | |||||
fileSet.addInclude( new Pattern( src.getName() ) ); | |||||
addFileset( fileSet ); | |||||
} | |||||
/** | |||||
* Sets the set of include patterns. Patterns may be separated by a comma or | |||||
* a space. | |||||
* | |||||
* @param includes the string containing the include patterns | |||||
*/ | |||||
public void setIncludes( String includes ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.setIncludes( includes ); | |||||
} | |||||
public void setPerm( String perm ) | |||||
{ | |||||
addArg( new Argument( perm ) ); | |||||
m_havePerm = true; | |||||
} | |||||
public void setSkipEmptyFilesets( final boolean skip ) | |||||
{ | |||||
final String message = getContext().getName() + " doesn\'t support the skipemptyfileset attribute"; | |||||
throw new IllegalArgumentException( message ); | |||||
} | |||||
/** | |||||
* add a name entry on the exclude list | |||||
*/ | |||||
public void addExclude( final Pattern pattern ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.addExclude( pattern ); | |||||
} | |||||
/** | |||||
* add a name entry on the include list | |||||
*/ | |||||
public void addInclude( final Pattern pattern ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.addInclude( pattern ); | |||||
} | |||||
/** | |||||
* add a set of patterns | |||||
*/ | |||||
public void addPatternSet( final PatternSet set ) | |||||
{ | |||||
m_defaultSetDefined = true; | |||||
m_defaultSet.addPatternSet( set ); | |||||
} | |||||
public void execute() | |||||
throws TaskException | |||||
{ | |||||
if( m_defaultSetDefined || m_defaultSet.getDir() == null ) | |||||
{ | |||||
super.execute(); | |||||
} | |||||
else if( isValidOs() ) | |||||
{ | |||||
// we are chmodding the given directory | |||||
final Argument argument = | |||||
new Argument( m_defaultSet.getDir().getPath() ); | |||||
addArg( argument ); | |||||
final Execute execute = prepareExec(); | |||||
try | |||||
{ | |||||
execute.setCommandline( getCommand().getCommandline() ); | |||||
runExecute( execute ); | |||||
} | |||||
catch( final IOException ioe ) | |||||
{ | |||||
final String message = "Execute failed: " + ioe; | |||||
throw new TaskException( message, ioe ); | |||||
} | |||||
finally | |||||
{ | |||||
// close the output file if required | |||||
logFlush(); | |||||
} | |||||
} | |||||
} | |||||
protected boolean isValidOs() | |||||
{ | |||||
return Os.isFamily( "unix" ) && super.isValidOs(); | |||||
} | |||||
protected void validate() | |||||
throws TaskException | |||||
{ | |||||
if( !m_havePerm ) | |||||
{ | |||||
throw new TaskException( "Required attribute perm not set in chmod" ); | |||||
} | |||||
if( m_defaultSetDefined && m_defaultSet.getDir() != null ) | |||||
{ | |||||
addFileset( m_defaultSet ); | |||||
} | |||||
super.validate(); | |||||
} | |||||
} |