@@ -268,7 +268,7 @@ public class Zip extends MatchingTask {
boolean success = false;
try {
ZipOutputStream zOut =
new ZipOutputStream(new FileOutputStream(zipFile));
new ZipOutputStream(new FileOutputStream(zipFile));
zOut.setEncoding(encoding);
try {
if (doCompress) {
@@ -367,7 +367,7 @@ public class Zip extends MatchingTask {
protected void addFiles(FileScanner scanner, ZipOutputStream zOut,
String prefix, String fullpath) throws IOException {
if (prefix.length() > 0 && fullpath.length() > 0)
throw new BuildException("Both prefix and fullpath attributes may not be set on the same fileset.");
throw new BuildException("Both prefix and fullpath attributes may not be set on the same fileset.");
File thisBaseDir = scanner.getBasedir();
@@ -388,7 +388,7 @@ public class Zip extends MatchingTask {
// files that matched include patterns
String[] files = scanner.getIncludedFiles();
if (files.length > 1 && fullpath.length() > 0)
if (files.length > 1 && fullpath.length() > 0)
throw new BuildException("fullpath attribute may only be specified for filesets that specify a single file.");
for (int i = 0; i < files.length; i++) {
File f = new File(thisBaseDir, files[i]);
@@ -409,9 +409,12 @@ public class Zip extends MatchingTask {
}
protected void addZipEntries(ZipFileSet fs, DirectoryScanner ds,
ZipOutputStream zOut, String prefix)
ZipOutputStream zOut, String prefix, String fullpath )
throws IOException
{
if (prefix.length() > 0 && fullpath.length() > 0)
throw new BuildException("Both prefix and fullpath attributes may not be set on the same fileset.");
ZipScanner zipScanner = (ZipScanner) ds;
File zipSrc = fs.getSrc();
@@ -425,9 +428,14 @@ public class Zip extends MatchingTask {
entry = new ZipEntry(origEntry);
String vPath = entry.getName();
if (zipScanner.match(vPath)) {
addParentDirs(null, vPath, zOut, prefix);
if (! entry.isDirectory()) {
zipFile(in, zOut, prefix+vPath, entry.getTime());
if (prefix.length() > 0) {
addParentDirs(null, vPath, zOut, prefix);
if (! entry.isDirectory()) {
zipFile(in, zOut, prefix+vPath, entry.getTime());
}
}
else if (fullpath.length() > 0) {
zipFile(in, zOut, fullpath, entry.getTime());
}
}
}
@@ -691,7 +699,8 @@ public class Zip extends MatchingTask {
/**
* Iterate over the given Vector of (zip)filesets and add
* all files to the ZipOutputStream using the given prefix.
* all files to the ZipOutputStream using the given prefix
* or fullpath.
*/
protected void addFiles(Vector filesets, ZipOutputStream zOut)
throws IOException {
@@ -725,7 +734,7 @@ public class Zip extends MatchingTask {
if (fs instanceof ZipFileSet
&& ((ZipFileSet) fs).getSrc() != null) {
addZipEntries((ZipFileSet) fs, ds, zOut, prefix);
addZipEntries((ZipFileSet) fs, ds, zOut, prefix, fullpath );
} else {
// Add the fileset.
addFiles(ds, zOut, prefix, fullpath);