Browse Source

Keep permissions of directories as well when updating a zip archive.

PR: 21308


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274991 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
39e82431e7
1 changed files with 28 additions and 1 deletions
  1. +28
    -1
      src/main/org/apache/tools/ant/taskdefs/Zip.java

+ 28
- 1
src/main/org/apache/tools/ant/taskdefs/Zip.java View File

@@ -449,12 +449,24 @@ public class Zip extends MatchingTask {
DirectoryScanner ds =
oldFiles.getDirectoryScanner(getProject());
((ZipScanner) ds).setEncoding(encoding);

String[] f = ds.getIncludedFiles();
Resource[] r = new Resource[f.length];
for (int i = 0; i < f.length; i++) {
r[i] = ds.getResource(f[i]);
}

if (!doFilesonly) {
String[] d = ds.getIncludedDirectories();
Resource[] dr = new Resource[d.length];
for (int i = 0; i < d.length; i++) {
dr[i] = ds.getResource(d[i]);
}
Resource[] tmp = r;
r = new Resource[tmp.length + dr.length];
System.arraycopy(dr, 0, r, 0, dr.length);
System.arraycopy(tmp, 0, r, dr.length, tmp.length);
}
addResources(oldFiles, r, zOut);
}
finalizeZipOutputStream(zOut);
@@ -596,7 +608,22 @@ public class Zip extends MatchingTask {
name = name + "/";
}

addParentDirs(base, name, zOut, prefix, dirMode);
if (!doFilesonly && !dealingWithFiles
&& resources[i].isDirectory()
&& !zfs.hasDirModeBeenSet()) {
int nextToLastSlash = name.lastIndexOf("/",
name.length() - 2);
if (nextToLastSlash != -1) {
addParentDirs(base, name.substring(0,
nextToLastSlash + 1),
zOut, prefix, dirMode);
}
ZipEntry ze = zf.getEntry(resources[i].getName());
addParentDirs(base, name, zOut, prefix, ze.getUnixMode());
} else {
addParentDirs(base, name, zOut, prefix, dirMode);
}

if (!resources[i].isDirectory() && dealingWithFiles) {
File f = fileUtils.resolveFile(base,


Loading…
Cancel
Save