git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270942 13f79535-47bb-0310-9956-ffa450edef68master
@@ -18,14 +18,15 @@ import java.util.Date; | |||
import java.util.zip.ZipEntry; | |||
import java.util.zip.ZipInputStream; | |||
import org.apache.avalon.excalibur.io.FileUtil; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.avalon.excalibur.io.IOUtil; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.tools.ant.types.DirectoryScanner; | |||
import org.apache.tools.ant.types.FileSet; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.framework.PatternSet; | |||
import org.apache.myrmidon.framework.PatternUtil; | |||
import org.apache.tools.ant.types.ScannerUtil; | |||
import org.apache.tools.ant.taskdefs.MatchingTask; | |||
import org.apache.tools.ant.types.DirectoryScanner; | |||
import org.apache.tools.ant.types.FileSet; | |||
import org.apache.tools.ant.types.ScannerUtil; | |||
/** | |||
* Unzip a file. | |||
@@ -34,23 +35,24 @@ import org.apache.tools.ant.taskdefs.MatchingTask; | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
*/ | |||
public class Expand extends MatchingTask | |||
{// req | |||
private boolean overwrite = true; | |||
private ArrayList patternsets = new ArrayList(); | |||
private ArrayList filesets = new ArrayList(); | |||
private File dest;//req | |||
private File source; | |||
public class Expand | |||
extends MatchingTask | |||
{ | |||
private boolean m_overwrite = true; | |||
private ArrayList m_patternsets = new ArrayList(); | |||
private ArrayList m_filesets = new ArrayList(); | |||
private File m_dest;//req | |||
private File m_src; | |||
/** | |||
* Set the destination directory. File will be unzipped into the destination | |||
* directory. | |||
* | |||
* @param d Path to the directory. | |||
* @param dest Path to the directory. | |||
*/ | |||
public void setDest( File d ) | |||
public void setDest( final File dest ) | |||
{ | |||
this.dest = d; | |||
m_dest = dest; | |||
} | |||
/** | |||
@@ -59,9 +61,9 @@ public class Expand extends MatchingTask | |||
* | |||
* @param b The new Overwrite value | |||
*/ | |||
public void setOverwrite( boolean b ) | |||
public void setOverwrite( final boolean overwrite ) | |||
{ | |||
overwrite = b; | |||
m_overwrite = overwrite; | |||
} | |||
/** | |||
@@ -69,9 +71,9 @@ public class Expand extends MatchingTask | |||
* | |||
* @param s Path to zip-file. | |||
*/ | |||
public void setSrc( File s ) | |||
public void setSrc( final File src ) | |||
{ | |||
this.source = s; | |||
m_src = src; | |||
} | |||
/** | |||
@@ -79,9 +81,9 @@ public class Expand extends MatchingTask | |||
* | |||
* @param set The feature to be added to the Fileset attribute | |||
*/ | |||
public void addFileset( FileSet set ) | |||
public void addFileset( final FileSet set ) | |||
{ | |||
filesets.add( set ); | |||
m_filesets.add( set ); | |||
} | |||
/** | |||
@@ -89,9 +91,9 @@ public class Expand extends MatchingTask | |||
* | |||
* @param set The feature to be added to the Patternset attribute | |||
*/ | |||
public void addPatternset( PatternSet set ) | |||
public void addPatternset( final PatternSet set ) | |||
{ | |||
patternsets.add( set ); | |||
m_patternsets.add( set ); | |||
} | |||
/** | |||
@@ -102,115 +104,121 @@ public class Expand extends MatchingTask | |||
public void execute() | |||
throws TaskException | |||
{ | |||
if( source == null && filesets.size() == 0 ) | |||
validate(); | |||
if( m_src != null ) | |||
{ | |||
throw new TaskException( "src attribute and/or filesets must be specified" ); | |||
expandFile( m_src, m_dest ); | |||
} | |||
if( dest == null ) | |||
final int size = m_filesets.size(); | |||
if( size > 0 ) | |||
{ | |||
throw new TaskException( | |||
"Dest attribute must be specified" ); | |||
for( int j = 0; j < size; j++ ) | |||
{ | |||
final FileSet fileSet = (FileSet)m_filesets.get( j ); | |||
final DirectoryScanner scanner = ScannerUtil.getDirectoryScanner( fileSet ); | |||
final File fromDir = fileSet.getDir(); | |||
final String[] files = scanner.getIncludedFiles(); | |||
for( int i = 0; i < files.length; ++i ) | |||
{ | |||
final File file = new File( fromDir, files[ i ] ); | |||
expandFile( file, m_dest ); | |||
} | |||
} | |||
} | |||
} | |||
if( dest.exists() && !dest.isDirectory() ) | |||
private void validate() | |||
throws TaskException | |||
{ | |||
if( m_src == null && m_filesets.size() == 0 ) | |||
{ | |||
throw new TaskException( "Dest must be a directory." ); | |||
final String message = "src attribute and/or filesets must be specified"; | |||
throw new TaskException( message ); | |||
} | |||
if( source != null ) | |||
if( m_dest == null ) | |||
{ | |||
if( source.isDirectory() ) | |||
{ | |||
throw new TaskException( "Src must not be a directory." + | |||
" Use nested filesets instead." ); | |||
} | |||
else | |||
{ | |||
expandFile( source, dest ); | |||
} | |||
final String message = "Dest attribute must be specified"; | |||
throw new TaskException( message ); | |||
} | |||
if( filesets.size() > 0 ) | |||
if( m_dest.exists() && !m_dest.isDirectory() ) | |||
{ | |||
for( int j = 0; j < filesets.size(); j++ ) | |||
{ | |||
FileSet fs = (FileSet)filesets.get( j ); | |||
DirectoryScanner ds = ScannerUtil.getDirectoryScanner( fs ); | |||
File fromDir = fs.getDir(); | |||
final String message = "Dest must be a directory."; | |||
throw new TaskException( message ); | |||
} | |||
String[] files = ds.getIncludedFiles(); | |||
for( int i = 0; i < files.length; ++i ) | |||
{ | |||
File file = new File( fromDir, files[ i ] ); | |||
expandFile( file, dest ); | |||
} | |||
} | |||
if( m_src != null && m_src.isDirectory() ) | |||
{ | |||
final String message = "Src must not be a directory." + | |||
" Use nested filesets instead."; | |||
throw new TaskException( message ); | |||
} | |||
} | |||
/* | |||
* This method is to be overridden by extending unarchival tasks. | |||
*/ | |||
protected void expandFile( File srcF, File dir ) | |||
protected void expandFile( final File src, final File dir ) | |||
throws TaskException | |||
{ | |||
ZipInputStream zis = null; | |||
try | |||
{ | |||
// code from WarExpand | |||
zis = new ZipInputStream( new FileInputStream( srcF ) ); | |||
zis = new ZipInputStream( new FileInputStream( src ) ); | |||
ZipEntry ze = null; | |||
while( ( ze = zis.getNextEntry() ) != null ) | |||
{ | |||
extractFile( srcF, dir, zis, | |||
ze.getName(), | |||
new Date( ze.getTime() ), | |||
ze.isDirectory() ); | |||
final Date date = new Date( ze.getTime() ); | |||
extractFile( | |||
dir, | |||
zis, | |||
ze.getName(), | |||
date, | |||
ze.isDirectory() ); | |||
} | |||
getLogger().debug( "expand complete" ); | |||
} | |||
catch( IOException ioe ) | |||
catch( final IOException ioe ) | |||
{ | |||
throw new TaskException( "Error while expanding " + srcF.getPath(), ioe ); | |||
final String message = "Error while expanding " + src.getPath(); | |||
throw new TaskException( message, ioe ); | |||
} | |||
finally | |||
{ | |||
if( zis != null ) | |||
{ | |||
try | |||
{ | |||
zis.close(); | |||
} | |||
catch( IOException e ) | |||
{ | |||
} | |||
} | |||
IOUtil.shutdownStream( zis ); | |||
} | |||
final String message = "expand complete"; | |||
getLogger().debug( message ); | |||
} | |||
protected void extractFile( File srcF, File dir, | |||
InputStream compressedInputStream, | |||
String entryName, | |||
Date entryDate, boolean isDirectory ) | |||
protected void extractFile( final File dir, | |||
final InputStream input, | |||
final String entryName, | |||
final Date date, | |||
final boolean isDirectory ) | |||
throws IOException, TaskException | |||
{ | |||
if( patternsets != null && patternsets.size() > 0 ) | |||
final int size = m_patternsets.size(); | |||
if( m_patternsets != null && size > 0 ) | |||
{ | |||
String name = entryName; | |||
boolean included = false; | |||
for( int v = 0; v < patternsets.size(); v++ ) | |||
for( int i = 0; i < size; i++ ) | |||
{ | |||
PatternSet p = (PatternSet)patternsets.get( v ); | |||
PatternSet p = (PatternSet)m_patternsets.get( i ); | |||
final TaskContext context = getContext(); | |||
String[] incls = PatternUtil.getIncludePatterns( p, context ); | |||
if( incls != null ) | |||
{ | |||
for( int w = 0; w < incls.length; w++ ) | |||
for( int j = 0; j < incls.length; j++ ) | |||
{ | |||
boolean isIncl = ScannerUtil.match( incls[ w ], name ); | |||
boolean isIncl = ScannerUtil.match( incls[ j ], entryName ); | |||
if( isIncl ) | |||
{ | |||
included = true; | |||
@@ -222,9 +230,9 @@ public class Expand extends MatchingTask | |||
String[] excls = PatternUtil.getExcludePatterns( p, context1 ); | |||
if( excls != null ) | |||
{ | |||
for( int w = 0; w < excls.length; w++ ) | |||
for( int j = 0; j < excls.length; j++ ) | |||
{ | |||
boolean isExcl = ScannerUtil.match( excls[ w ], name ); | |||
boolean isExcl = ScannerUtil.match( excls[ j ], entryName ); | |||
if( isExcl ) | |||
{ | |||
included = false; | |||
@@ -233,6 +241,7 @@ public class Expand extends MatchingTask | |||
} | |||
} | |||
} | |||
if( !included ) | |||
{ | |||
//Do not process this file | |||
@@ -243,8 +252,8 @@ public class Expand extends MatchingTask | |||
File f = FileUtil.resolveFile( dir, entryName ); | |||
try | |||
{ | |||
if( !overwrite && f.exists() | |||
&& f.lastModified() >= entryDate.getTime() ) | |||
if( !m_overwrite && f.exists() | |||
&& f.lastModified() >= date.getTime() ) | |||
{ | |||
getLogger().debug( "Skipping " + f + " as it is up-to-date" ); | |||
return; | |||
@@ -261,43 +270,23 @@ public class Expand extends MatchingTask | |||
} | |||
else | |||
{ | |||
byte[] buffer = new byte[ 1024 ]; | |||
int length = 0; | |||
FileOutputStream fos = null; | |||
try | |||
{ | |||
fos = new FileOutputStream( f ); | |||
while( ( length = | |||
compressedInputStream.read( buffer ) ) >= 0 ) | |||
{ | |||
fos.write( buffer, 0, length ); | |||
} | |||
fos.close(); | |||
fos = null; | |||
IOUtil.copy( input, fos ); | |||
} | |||
finally | |||
{ | |||
if( fos != null ) | |||
{ | |||
try | |||
{ | |||
fos.close(); | |||
} | |||
catch( IOException e ) | |||
{ | |||
} | |||
} | |||
IOUtil.shutdownStream( fos ); | |||
} | |||
} | |||
f.setLastModified( entryDate.getTime() ); | |||
f.setLastModified( date.getTime() ); | |||
} | |||
catch( FileNotFoundException ex ) | |||
{ | |||
getLogger().warn( "Unable to expand to file " + f.getPath() ); | |||
} | |||
} | |||
} |
@@ -10,9 +10,10 @@ package org.apache.tools.ant.taskdefs.archive; | |||
import java.io.File; | |||
import java.io.FileInputStream; | |||
import java.io.IOException; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.aut.tar.TarEntry; | |||
import org.apache.aut.tar.TarInputStream; | |||
import org.apache.avalon.excalibur.io.IOUtil; | |||
import org.apache.myrmidon.api.TaskException; | |||
/** | |||
* Untar a file. Heavily based on the Expand task. | |||
@@ -20,45 +21,47 @@ import org.apache.aut.tar.TarInputStream; | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
*/ | |||
public class Untar extends Expand | |||
public class Untar | |||
extends Expand | |||
{ | |||
protected void expandFile( File srcF, File dir ) | |||
protected void expandFile( final File src, final File dir ) | |||
throws TaskException | |||
{ | |||
TarInputStream tis = null; | |||
try | |||
if( getLogger().isInfoEnabled() ) | |||
{ | |||
getLogger().info( "Expanding: " + srcF + " into " + dir ); | |||
final String message = "Expanding: " + src + " into " + dir; | |||
getLogger().info( message ); | |||
} | |||
tis = new TarInputStream( new FileInputStream( srcF ) ); | |||
TarEntry te = null; | |||
TarInputStream input = null; | |||
FileInputStream fileInput = null; | |||
try | |||
{ | |||
fileInput = new FileInputStream( src ); | |||
input = new TarInputStream( fileInput ); | |||
while( ( te = tis.getNextEntry() ) != null ) | |||
TarEntry entry = null; | |||
while( ( entry = input.getNextEntry() ) != null ) | |||
{ | |||
extractFile( srcF, dir, tis, | |||
te.getName(), | |||
te.getModTime(), te.isDirectory() ); | |||
extractFile( dir, | |||
input, | |||
entry.getName(), | |||
entry.getModTime(), | |||
entry.isDirectory() ); | |||
} | |||
getLogger().debug( "expand complete" ); | |||
} | |||
catch( IOException ioe ) | |||
catch( final IOException ioe ) | |||
{ | |||
throw new TaskException( "Error while expanding " + srcF.getPath(), ioe ); | |||
final String message = "Error while expanding " + src.getPath(); | |||
throw new TaskException( message, ioe ); | |||
} | |||
finally | |||
{ | |||
if( tis != null ) | |||
{ | |||
try | |||
{ | |||
tis.close(); | |||
} | |||
catch( IOException e ) | |||
{ | |||
} | |||
} | |||
IOUtil.shutdownStream( fileInput ); | |||
IOUtil.shutdownStream( input ); | |||
} | |||
final String message = "expand complete"; | |||
getLogger().debug( message ); | |||
} | |||
} |
@@ -18,14 +18,15 @@ import java.util.Date; | |||
import java.util.zip.ZipEntry; | |||
import java.util.zip.ZipInputStream; | |||
import org.apache.avalon.excalibur.io.FileUtil; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.avalon.excalibur.io.IOUtil; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.tools.ant.types.DirectoryScanner; | |||
import org.apache.tools.ant.types.FileSet; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.framework.PatternSet; | |||
import org.apache.myrmidon.framework.PatternUtil; | |||
import org.apache.tools.ant.types.ScannerUtil; | |||
import org.apache.tools.ant.taskdefs.MatchingTask; | |||
import org.apache.tools.ant.types.DirectoryScanner; | |||
import org.apache.tools.ant.types.FileSet; | |||
import org.apache.tools.ant.types.ScannerUtil; | |||
/** | |||
* Unzip a file. | |||
@@ -34,23 +35,24 @@ import org.apache.tools.ant.taskdefs.MatchingTask; | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
*/ | |||
public class Expand extends MatchingTask | |||
{// req | |||
private boolean overwrite = true; | |||
private ArrayList patternsets = new ArrayList(); | |||
private ArrayList filesets = new ArrayList(); | |||
private File dest;//req | |||
private File source; | |||
public class Expand | |||
extends MatchingTask | |||
{ | |||
private boolean m_overwrite = true; | |||
private ArrayList m_patternsets = new ArrayList(); | |||
private ArrayList m_filesets = new ArrayList(); | |||
private File m_dest;//req | |||
private File m_src; | |||
/** | |||
* Set the destination directory. File will be unzipped into the destination | |||
* directory. | |||
* | |||
* @param d Path to the directory. | |||
* @param dest Path to the directory. | |||
*/ | |||
public void setDest( File d ) | |||
public void setDest( final File dest ) | |||
{ | |||
this.dest = d; | |||
m_dest = dest; | |||
} | |||
/** | |||
@@ -59,9 +61,9 @@ public class Expand extends MatchingTask | |||
* | |||
* @param b The new Overwrite value | |||
*/ | |||
public void setOverwrite( boolean b ) | |||
public void setOverwrite( final boolean overwrite ) | |||
{ | |||
overwrite = b; | |||
m_overwrite = overwrite; | |||
} | |||
/** | |||
@@ -69,9 +71,9 @@ public class Expand extends MatchingTask | |||
* | |||
* @param s Path to zip-file. | |||
*/ | |||
public void setSrc( File s ) | |||
public void setSrc( final File src ) | |||
{ | |||
this.source = s; | |||
m_src = src; | |||
} | |||
/** | |||
@@ -79,9 +81,9 @@ public class Expand extends MatchingTask | |||
* | |||
* @param set The feature to be added to the Fileset attribute | |||
*/ | |||
public void addFileset( FileSet set ) | |||
public void addFileset( final FileSet set ) | |||
{ | |||
filesets.add( set ); | |||
m_filesets.add( set ); | |||
} | |||
/** | |||
@@ -89,9 +91,9 @@ public class Expand extends MatchingTask | |||
* | |||
* @param set The feature to be added to the Patternset attribute | |||
*/ | |||
public void addPatternset( PatternSet set ) | |||
public void addPatternset( final PatternSet set ) | |||
{ | |||
patternsets.add( set ); | |||
m_patternsets.add( set ); | |||
} | |||
/** | |||
@@ -102,115 +104,121 @@ public class Expand extends MatchingTask | |||
public void execute() | |||
throws TaskException | |||
{ | |||
if( source == null && filesets.size() == 0 ) | |||
validate(); | |||
if( m_src != null ) | |||
{ | |||
throw new TaskException( "src attribute and/or filesets must be specified" ); | |||
expandFile( m_src, m_dest ); | |||
} | |||
if( dest == null ) | |||
final int size = m_filesets.size(); | |||
if( size > 0 ) | |||
{ | |||
throw new TaskException( | |||
"Dest attribute must be specified" ); | |||
for( int j = 0; j < size; j++ ) | |||
{ | |||
final FileSet fileSet = (FileSet)m_filesets.get( j ); | |||
final DirectoryScanner scanner = ScannerUtil.getDirectoryScanner( fileSet ); | |||
final File fromDir = fileSet.getDir(); | |||
final String[] files = scanner.getIncludedFiles(); | |||
for( int i = 0; i < files.length; ++i ) | |||
{ | |||
final File file = new File( fromDir, files[ i ] ); | |||
expandFile( file, m_dest ); | |||
} | |||
} | |||
} | |||
} | |||
if( dest.exists() && !dest.isDirectory() ) | |||
private void validate() | |||
throws TaskException | |||
{ | |||
if( m_src == null && m_filesets.size() == 0 ) | |||
{ | |||
throw new TaskException( "Dest must be a directory." ); | |||
final String message = "src attribute and/or filesets must be specified"; | |||
throw new TaskException( message ); | |||
} | |||
if( source != null ) | |||
if( m_dest == null ) | |||
{ | |||
if( source.isDirectory() ) | |||
{ | |||
throw new TaskException( "Src must not be a directory." + | |||
" Use nested filesets instead." ); | |||
} | |||
else | |||
{ | |||
expandFile( source, dest ); | |||
} | |||
final String message = "Dest attribute must be specified"; | |||
throw new TaskException( message ); | |||
} | |||
if( filesets.size() > 0 ) | |||
if( m_dest.exists() && !m_dest.isDirectory() ) | |||
{ | |||
for( int j = 0; j < filesets.size(); j++ ) | |||
{ | |||
FileSet fs = (FileSet)filesets.get( j ); | |||
DirectoryScanner ds = ScannerUtil.getDirectoryScanner( fs ); | |||
File fromDir = fs.getDir(); | |||
final String message = "Dest must be a directory."; | |||
throw new TaskException( message ); | |||
} | |||
String[] files = ds.getIncludedFiles(); | |||
for( int i = 0; i < files.length; ++i ) | |||
{ | |||
File file = new File( fromDir, files[ i ] ); | |||
expandFile( file, dest ); | |||
} | |||
} | |||
if( m_src != null && m_src.isDirectory() ) | |||
{ | |||
final String message = "Src must not be a directory." + | |||
" Use nested filesets instead."; | |||
throw new TaskException( message ); | |||
} | |||
} | |||
/* | |||
* This method is to be overridden by extending unarchival tasks. | |||
*/ | |||
protected void expandFile( File srcF, File dir ) | |||
protected void expandFile( final File src, final File dir ) | |||
throws TaskException | |||
{ | |||
ZipInputStream zis = null; | |||
try | |||
{ | |||
// code from WarExpand | |||
zis = new ZipInputStream( new FileInputStream( srcF ) ); | |||
zis = new ZipInputStream( new FileInputStream( src ) ); | |||
ZipEntry ze = null; | |||
while( ( ze = zis.getNextEntry() ) != null ) | |||
{ | |||
extractFile( srcF, dir, zis, | |||
ze.getName(), | |||
new Date( ze.getTime() ), | |||
ze.isDirectory() ); | |||
final Date date = new Date( ze.getTime() ); | |||
extractFile( | |||
dir, | |||
zis, | |||
ze.getName(), | |||
date, | |||
ze.isDirectory() ); | |||
} | |||
getLogger().debug( "expand complete" ); | |||
} | |||
catch( IOException ioe ) | |||
catch( final IOException ioe ) | |||
{ | |||
throw new TaskException( "Error while expanding " + srcF.getPath(), ioe ); | |||
final String message = "Error while expanding " + src.getPath(); | |||
throw new TaskException( message, ioe ); | |||
} | |||
finally | |||
{ | |||
if( zis != null ) | |||
{ | |||
try | |||
{ | |||
zis.close(); | |||
} | |||
catch( IOException e ) | |||
{ | |||
} | |||
} | |||
IOUtil.shutdownStream( zis ); | |||
} | |||
final String message = "expand complete"; | |||
getLogger().debug( message ); | |||
} | |||
protected void extractFile( File srcF, File dir, | |||
InputStream compressedInputStream, | |||
String entryName, | |||
Date entryDate, boolean isDirectory ) | |||
protected void extractFile( final File dir, | |||
final InputStream input, | |||
final String entryName, | |||
final Date date, | |||
final boolean isDirectory ) | |||
throws IOException, TaskException | |||
{ | |||
if( patternsets != null && patternsets.size() > 0 ) | |||
final int size = m_patternsets.size(); | |||
if( m_patternsets != null && size > 0 ) | |||
{ | |||
String name = entryName; | |||
boolean included = false; | |||
for( int v = 0; v < patternsets.size(); v++ ) | |||
for( int i = 0; i < size; i++ ) | |||
{ | |||
PatternSet p = (PatternSet)patternsets.get( v ); | |||
PatternSet p = (PatternSet)m_patternsets.get( i ); | |||
final TaskContext context = getContext(); | |||
String[] incls = PatternUtil.getIncludePatterns( p, context ); | |||
if( incls != null ) | |||
{ | |||
for( int w = 0; w < incls.length; w++ ) | |||
for( int j = 0; j < incls.length; j++ ) | |||
{ | |||
boolean isIncl = ScannerUtil.match( incls[ w ], name ); | |||
boolean isIncl = ScannerUtil.match( incls[ j ], entryName ); | |||
if( isIncl ) | |||
{ | |||
included = true; | |||
@@ -222,9 +230,9 @@ public class Expand extends MatchingTask | |||
String[] excls = PatternUtil.getExcludePatterns( p, context1 ); | |||
if( excls != null ) | |||
{ | |||
for( int w = 0; w < excls.length; w++ ) | |||
for( int j = 0; j < excls.length; j++ ) | |||
{ | |||
boolean isExcl = ScannerUtil.match( excls[ w ], name ); | |||
boolean isExcl = ScannerUtil.match( excls[ j ], entryName ); | |||
if( isExcl ) | |||
{ | |||
included = false; | |||
@@ -233,6 +241,7 @@ public class Expand extends MatchingTask | |||
} | |||
} | |||
} | |||
if( !included ) | |||
{ | |||
//Do not process this file | |||
@@ -243,8 +252,8 @@ public class Expand extends MatchingTask | |||
File f = FileUtil.resolveFile( dir, entryName ); | |||
try | |||
{ | |||
if( !overwrite && f.exists() | |||
&& f.lastModified() >= entryDate.getTime() ) | |||
if( !m_overwrite && f.exists() | |||
&& f.lastModified() >= date.getTime() ) | |||
{ | |||
getLogger().debug( "Skipping " + f + " as it is up-to-date" ); | |||
return; | |||
@@ -261,43 +270,23 @@ public class Expand extends MatchingTask | |||
} | |||
else | |||
{ | |||
byte[] buffer = new byte[ 1024 ]; | |||
int length = 0; | |||
FileOutputStream fos = null; | |||
try | |||
{ | |||
fos = new FileOutputStream( f ); | |||
while( ( length = | |||
compressedInputStream.read( buffer ) ) >= 0 ) | |||
{ | |||
fos.write( buffer, 0, length ); | |||
} | |||
fos.close(); | |||
fos = null; | |||
IOUtil.copy( input, fos ); | |||
} | |||
finally | |||
{ | |||
if( fos != null ) | |||
{ | |||
try | |||
{ | |||
fos.close(); | |||
} | |||
catch( IOException e ) | |||
{ | |||
} | |||
} | |||
IOUtil.shutdownStream( fos ); | |||
} | |||
} | |||
f.setLastModified( entryDate.getTime() ); | |||
f.setLastModified( date.getTime() ); | |||
} | |||
catch( FileNotFoundException ex ) | |||
{ | |||
getLogger().warn( "Unable to expand to file " + f.getPath() ); | |||
} | |||
} | |||
} |
@@ -10,9 +10,10 @@ package org.apache.tools.ant.taskdefs.archive; | |||
import java.io.File; | |||
import java.io.FileInputStream; | |||
import java.io.IOException; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.aut.tar.TarEntry; | |||
import org.apache.aut.tar.TarInputStream; | |||
import org.apache.avalon.excalibur.io.IOUtil; | |||
import org.apache.myrmidon.api.TaskException; | |||
/** | |||
* Untar a file. Heavily based on the Expand task. | |||
@@ -20,45 +21,47 @@ import org.apache.aut.tar.TarInputStream; | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
*/ | |||
public class Untar extends Expand | |||
public class Untar | |||
extends Expand | |||
{ | |||
protected void expandFile( File srcF, File dir ) | |||
protected void expandFile( final File src, final File dir ) | |||
throws TaskException | |||
{ | |||
TarInputStream tis = null; | |||
try | |||
if( getLogger().isInfoEnabled() ) | |||
{ | |||
getLogger().info( "Expanding: " + srcF + " into " + dir ); | |||
final String message = "Expanding: " + src + " into " + dir; | |||
getLogger().info( message ); | |||
} | |||
tis = new TarInputStream( new FileInputStream( srcF ) ); | |||
TarEntry te = null; | |||
TarInputStream input = null; | |||
FileInputStream fileInput = null; | |||
try | |||
{ | |||
fileInput = new FileInputStream( src ); | |||
input = new TarInputStream( fileInput ); | |||
while( ( te = tis.getNextEntry() ) != null ) | |||
TarEntry entry = null; | |||
while( ( entry = input.getNextEntry() ) != null ) | |||
{ | |||
extractFile( srcF, dir, tis, | |||
te.getName(), | |||
te.getModTime(), te.isDirectory() ); | |||
extractFile( dir, | |||
input, | |||
entry.getName(), | |||
entry.getModTime(), | |||
entry.isDirectory() ); | |||
} | |||
getLogger().debug( "expand complete" ); | |||
} | |||
catch( IOException ioe ) | |||
catch( final IOException ioe ) | |||
{ | |||
throw new TaskException( "Error while expanding " + srcF.getPath(), ioe ); | |||
final String message = "Error while expanding " + src.getPath(); | |||
throw new TaskException( message, ioe ); | |||
} | |||
finally | |||
{ | |||
if( tis != null ) | |||
{ | |||
try | |||
{ | |||
tis.close(); | |||
} | |||
catch( IOException e ) | |||
{ | |||
} | |||
} | |||
IOUtil.shutdownStream( fileInput ); | |||
IOUtil.shutdownStream( input ); | |||
} | |||
final String message = "expand complete"; | |||
getLogger().debug( message ); | |||
} | |||
} |