git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270960 13f79535-47bb-0310-9956-ffa450edef68master
@@ -30,6 +30,7 @@ import org.apache.tools.ant.types.ScannerUtil; | |||||
import org.apache.tools.ant.types.SourceFileScanner; | import org.apache.tools.ant.types.SourceFileScanner; | ||||
import org.apache.tools.ant.util.mappers.MergingMapper; | import org.apache.tools.ant.util.mappers.MergingMapper; | ||||
import org.apache.tools.ant.taskdefs.MatchingTask; | import org.apache.tools.ant.taskdefs.MatchingTask; | ||||
import org.apache.avalon.excalibur.io.IOUtil; | |||||
/** | /** | ||||
* Create a ZIP archive. | * Create a ZIP archive. | ||||
@@ -263,7 +264,8 @@ public class Zip | |||||
{ | { | ||||
dss.add( getDirectoryScanner( m_baseDir ) ); | dss.add( getDirectoryScanner( m_baseDir ) ); | ||||
} | } | ||||
for( int i = 0; i < m_filesets.size(); i++ ) | |||||
final int size = m_filesets.size(); | |||||
for( int i = 0; i < size; i++ ) | |||||
{ | { | ||||
final FileSet fileSet = (FileSet)m_filesets.get( i ); | final FileSet fileSet = (FileSet)m_filesets.get( i ); | ||||
final DirectoryScanner scanner = getScanner( fileSet ); | final DirectoryScanner scanner = getScanner( fileSet ); | ||||
@@ -316,7 +318,8 @@ public class Zip | |||||
oldFiles.setSrc( renamedFile ); | oldFiles.setSrc( renamedFile ); | ||||
StringBuffer exclusionPattern = new StringBuffer(); | StringBuffer exclusionPattern = new StringBuffer(); | ||||
for( int i = 0; i < m_addedFiles.size(); i++ ) | |||||
final int addedFilesCount = m_addedFiles.size(); | |||||
for( int i = 0; i < addedFilesCount; i++ ) | |||||
{ | { | ||||
if( i != 0 ) | if( i != 0 ) | ||||
{ | { | ||||
@@ -573,7 +576,8 @@ public class Zip | |||||
throws IOException, TaskException | throws IOException, TaskException | ||||
{ | { | ||||
// Add each fileset in the ArrayList. | // Add each fileset in the ArrayList. | ||||
for( int i = 0; i < filesets.size(); i++ ) | |||||
final int size = filesets.size(); | |||||
for( int i = 0; i < size; i++ ) | |||||
{ | { | ||||
FileSet fs = (FileSet)filesets.get( i ); | FileSet fs = (FileSet)filesets.get( i ); | ||||
DirectoryScanner ds = getScanner( fs ); | DirectoryScanner ds = getScanner( fs ); | ||||
@@ -637,7 +641,7 @@ public class Zip | |||||
Stack directories = new Stack(); | Stack directories = new Stack(); | ||||
int slashPos = entry.length(); | int slashPos = entry.length(); | ||||
while( ( slashPos = entry.lastIndexOf( (int)'/', slashPos - 1 ) ) != -1 ) | |||||
while( ( slashPos = entry.lastIndexOf( '/', slashPos - 1 ) ) != -1 ) | |||||
{ | { | ||||
String dir = entry.substring( 0, slashPos + 1 ); | String dir = entry.substring( 0, slashPos + 1 ); | ||||
if( m_addedDirs.get( prefix + dir ) != null ) | if( m_addedDirs.get( prefix + dir ) != null ) | ||||
@@ -794,12 +798,14 @@ public class Zip | |||||
zOut.putNextEntry( ze ); | zOut.putNextEntry( ze ); | ||||
} | } | ||||
protected void zipFile( InputStream in, ZipOutputStream zOut, String vPath, | |||||
long lastModified ) | |||||
protected void zipFile( final InputStream input, | |||||
final ZipOutputStream output, | |||||
final String path, | |||||
final long lastModified ) | |||||
throws IOException, TaskException | throws IOException, TaskException | ||||
{ | { | ||||
ZipEntry ze = new ZipEntry( vPath ); | |||||
ze.setTime( lastModified ); | |||||
final ZipEntry entry = new ZipEntry( path ); | |||||
entry.setTime( lastModified ); | |||||
/* | /* | ||||
* XXX ZipOutputStream.putEntry expects the ZipEntry to know its | * XXX ZipOutputStream.putEntry expects the ZipEntry to know its | ||||
@@ -811,11 +817,13 @@ public class Zip | |||||
* I couldn't find any documentation on this, just found out by try | * I couldn't find any documentation on this, just found out by try | ||||
* and error. | * and error. | ||||
*/ | */ | ||||
InputStream inputToStore = input; | |||||
if( !m_compress ) | if( !m_compress ) | ||||
{ | { | ||||
final CRC32 crc = new CRC32(); | |||||
long size = 0; | long size = 0; | ||||
CRC32 cal = new CRC32(); | |||||
if( !in.markSupported() ) | |||||
if( !inputToStore.markSupported() ) | |||||
{ | { | ||||
// Store data into a byte[] | // Store data into a byte[] | ||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(); | ByteArrayOutputStream bos = new ByteArrayOutputStream(); | ||||
@@ -825,61 +833,55 @@ public class Zip | |||||
do | do | ||||
{ | { | ||||
size += count; | size += count; | ||||
cal.update( buffer, 0, count ); | |||||
crc.update( buffer, 0, count ); | |||||
bos.write( buffer, 0, count ); | bos.write( buffer, 0, count ); | ||||
count = in.read( buffer, 0, buffer.length ); | |||||
count = inputToStore.read( buffer, 0, buffer.length ); | |||||
} while( count != -1 ); | } while( count != -1 ); | ||||
in = new ByteArrayInputStream( bos.toByteArray() ); | |||||
inputToStore = new ByteArrayInputStream( bos.toByteArray() ); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
in.mark( Integer.MAX_VALUE ); | |||||
inputToStore.mark( Integer.MAX_VALUE ); | |||||
byte[] buffer = new byte[ 8 * 1024 ]; | byte[] buffer = new byte[ 8 * 1024 ]; | ||||
int count = 0; | int count = 0; | ||||
do | do | ||||
{ | { | ||||
size += count; | size += count; | ||||
cal.update( buffer, 0, count ); | |||||
count = in.read( buffer, 0, buffer.length ); | |||||
crc.update( buffer, 0, count ); | |||||
count = inputToStore.read( buffer, 0, buffer.length ); | |||||
} while( count != -1 ); | } while( count != -1 ); | ||||
in.reset(); | |||||
inputToStore.reset(); | |||||
} | } | ||||
ze.setSize( size ); | |||||
ze.setCrc( cal.getValue() ); | |||||
entry.setSize( size ); | |||||
entry.setCrc( crc.getValue() ); | |||||
} | } | ||||
zOut.putNextEntry( ze ); | |||||
output.putNextEntry( entry ); | |||||
byte[] buffer = new byte[ 8 * 1024 ]; | |||||
int count = 0; | |||||
do | |||||
{ | |||||
if( count != 0 ) | |||||
{ | |||||
zOut.write( buffer, 0, count ); | |||||
} | |||||
count = in.read( buffer, 0, buffer.length ); | |||||
} while( count != -1 ); | |||||
m_addedFiles.add( vPath ); | |||||
IOUtil.copy( inputToStore, output ); | |||||
m_addedFiles.add( path ); | |||||
} | } | ||||
protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||||
protected void zipFile( final File file, | |||||
final ZipOutputStream zOut, | |||||
final String vPath ) | |||||
throws IOException, TaskException | throws IOException, TaskException | ||||
{ | { | ||||
if( file.equals( m_file ) ) | if( file.equals( m_file ) ) | ||||
{ | { | ||||
throw new TaskException( "A zip file cannot include itself" ); | |||||
final String message = "A zip file cannot include itself"; | |||||
throw new TaskException( message ); | |||||
} | } | ||||
FileInputStream fIn = new FileInputStream( file ); | |||||
final FileInputStream fIn = new FileInputStream( file ); | |||||
try | try | ||||
{ | { | ||||
zipFile( fIn, zOut, vPath, file.lastModified() ); | zipFile( fIn, zOut, vPath, file.lastModified() ); | ||||
} | } | ||||
finally | finally | ||||
{ | { | ||||
fIn.close(); | |||||
IOUtil.shutdownStream( fIn ); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -30,6 +30,7 @@ import org.apache.tools.ant.types.ScannerUtil; | |||||
import org.apache.tools.ant.types.SourceFileScanner; | import org.apache.tools.ant.types.SourceFileScanner; | ||||
import org.apache.tools.ant.util.mappers.MergingMapper; | import org.apache.tools.ant.util.mappers.MergingMapper; | ||||
import org.apache.tools.ant.taskdefs.MatchingTask; | import org.apache.tools.ant.taskdefs.MatchingTask; | ||||
import org.apache.avalon.excalibur.io.IOUtil; | |||||
/** | /** | ||||
* Create a ZIP archive. | * Create a ZIP archive. | ||||
@@ -263,7 +264,8 @@ public class Zip | |||||
{ | { | ||||
dss.add( getDirectoryScanner( m_baseDir ) ); | dss.add( getDirectoryScanner( m_baseDir ) ); | ||||
} | } | ||||
for( int i = 0; i < m_filesets.size(); i++ ) | |||||
final int size = m_filesets.size(); | |||||
for( int i = 0; i < size; i++ ) | |||||
{ | { | ||||
final FileSet fileSet = (FileSet)m_filesets.get( i ); | final FileSet fileSet = (FileSet)m_filesets.get( i ); | ||||
final DirectoryScanner scanner = getScanner( fileSet ); | final DirectoryScanner scanner = getScanner( fileSet ); | ||||
@@ -316,7 +318,8 @@ public class Zip | |||||
oldFiles.setSrc( renamedFile ); | oldFiles.setSrc( renamedFile ); | ||||
StringBuffer exclusionPattern = new StringBuffer(); | StringBuffer exclusionPattern = new StringBuffer(); | ||||
for( int i = 0; i < m_addedFiles.size(); i++ ) | |||||
final int addedFilesCount = m_addedFiles.size(); | |||||
for( int i = 0; i < addedFilesCount; i++ ) | |||||
{ | { | ||||
if( i != 0 ) | if( i != 0 ) | ||||
{ | { | ||||
@@ -573,7 +576,8 @@ public class Zip | |||||
throws IOException, TaskException | throws IOException, TaskException | ||||
{ | { | ||||
// Add each fileset in the ArrayList. | // Add each fileset in the ArrayList. | ||||
for( int i = 0; i < filesets.size(); i++ ) | |||||
final int size = filesets.size(); | |||||
for( int i = 0; i < size; i++ ) | |||||
{ | { | ||||
FileSet fs = (FileSet)filesets.get( i ); | FileSet fs = (FileSet)filesets.get( i ); | ||||
DirectoryScanner ds = getScanner( fs ); | DirectoryScanner ds = getScanner( fs ); | ||||
@@ -637,7 +641,7 @@ public class Zip | |||||
Stack directories = new Stack(); | Stack directories = new Stack(); | ||||
int slashPos = entry.length(); | int slashPos = entry.length(); | ||||
while( ( slashPos = entry.lastIndexOf( (int)'/', slashPos - 1 ) ) != -1 ) | |||||
while( ( slashPos = entry.lastIndexOf( '/', slashPos - 1 ) ) != -1 ) | |||||
{ | { | ||||
String dir = entry.substring( 0, slashPos + 1 ); | String dir = entry.substring( 0, slashPos + 1 ); | ||||
if( m_addedDirs.get( prefix + dir ) != null ) | if( m_addedDirs.get( prefix + dir ) != null ) | ||||
@@ -794,12 +798,14 @@ public class Zip | |||||
zOut.putNextEntry( ze ); | zOut.putNextEntry( ze ); | ||||
} | } | ||||
protected void zipFile( InputStream in, ZipOutputStream zOut, String vPath, | |||||
long lastModified ) | |||||
protected void zipFile( final InputStream input, | |||||
final ZipOutputStream output, | |||||
final String path, | |||||
final long lastModified ) | |||||
throws IOException, TaskException | throws IOException, TaskException | ||||
{ | { | ||||
ZipEntry ze = new ZipEntry( vPath ); | |||||
ze.setTime( lastModified ); | |||||
final ZipEntry entry = new ZipEntry( path ); | |||||
entry.setTime( lastModified ); | |||||
/* | /* | ||||
* XXX ZipOutputStream.putEntry expects the ZipEntry to know its | * XXX ZipOutputStream.putEntry expects the ZipEntry to know its | ||||
@@ -811,11 +817,13 @@ public class Zip | |||||
* I couldn't find any documentation on this, just found out by try | * I couldn't find any documentation on this, just found out by try | ||||
* and error. | * and error. | ||||
*/ | */ | ||||
InputStream inputToStore = input; | |||||
if( !m_compress ) | if( !m_compress ) | ||||
{ | { | ||||
final CRC32 crc = new CRC32(); | |||||
long size = 0; | long size = 0; | ||||
CRC32 cal = new CRC32(); | |||||
if( !in.markSupported() ) | |||||
if( !inputToStore.markSupported() ) | |||||
{ | { | ||||
// Store data into a byte[] | // Store data into a byte[] | ||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(); | ByteArrayOutputStream bos = new ByteArrayOutputStream(); | ||||
@@ -825,61 +833,55 @@ public class Zip | |||||
do | do | ||||
{ | { | ||||
size += count; | size += count; | ||||
cal.update( buffer, 0, count ); | |||||
crc.update( buffer, 0, count ); | |||||
bos.write( buffer, 0, count ); | bos.write( buffer, 0, count ); | ||||
count = in.read( buffer, 0, buffer.length ); | |||||
count = inputToStore.read( buffer, 0, buffer.length ); | |||||
} while( count != -1 ); | } while( count != -1 ); | ||||
in = new ByteArrayInputStream( bos.toByteArray() ); | |||||
inputToStore = new ByteArrayInputStream( bos.toByteArray() ); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
in.mark( Integer.MAX_VALUE ); | |||||
inputToStore.mark( Integer.MAX_VALUE ); | |||||
byte[] buffer = new byte[ 8 * 1024 ]; | byte[] buffer = new byte[ 8 * 1024 ]; | ||||
int count = 0; | int count = 0; | ||||
do | do | ||||
{ | { | ||||
size += count; | size += count; | ||||
cal.update( buffer, 0, count ); | |||||
count = in.read( buffer, 0, buffer.length ); | |||||
crc.update( buffer, 0, count ); | |||||
count = inputToStore.read( buffer, 0, buffer.length ); | |||||
} while( count != -1 ); | } while( count != -1 ); | ||||
in.reset(); | |||||
inputToStore.reset(); | |||||
} | } | ||||
ze.setSize( size ); | |||||
ze.setCrc( cal.getValue() ); | |||||
entry.setSize( size ); | |||||
entry.setCrc( crc.getValue() ); | |||||
} | } | ||||
zOut.putNextEntry( ze ); | |||||
output.putNextEntry( entry ); | |||||
byte[] buffer = new byte[ 8 * 1024 ]; | |||||
int count = 0; | |||||
do | |||||
{ | |||||
if( count != 0 ) | |||||
{ | |||||
zOut.write( buffer, 0, count ); | |||||
} | |||||
count = in.read( buffer, 0, buffer.length ); | |||||
} while( count != -1 ); | |||||
m_addedFiles.add( vPath ); | |||||
IOUtil.copy( inputToStore, output ); | |||||
m_addedFiles.add( path ); | |||||
} | } | ||||
protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||||
protected void zipFile( final File file, | |||||
final ZipOutputStream zOut, | |||||
final String vPath ) | |||||
throws IOException, TaskException | throws IOException, TaskException | ||||
{ | { | ||||
if( file.equals( m_file ) ) | if( file.equals( m_file ) ) | ||||
{ | { | ||||
throw new TaskException( "A zip file cannot include itself" ); | |||||
final String message = "A zip file cannot include itself"; | |||||
throw new TaskException( message ); | |||||
} | } | ||||
FileInputStream fIn = new FileInputStream( file ); | |||||
final FileInputStream fIn = new FileInputStream( file ); | |||||
try | try | ||||
{ | { | ||||
zipFile( fIn, zOut, vPath, file.lastModified() ); | zipFile( fIn, zOut, vPath, file.lastModified() ); | ||||
} | } | ||||
finally | finally | ||||
{ | { | ||||
fIn.close(); | |||||
IOUtil.shutdownStream( fIn ); | |||||
} | } | ||||
} | } | ||||
} | } |