Mercurial > hg > openjdk > jigsaw > jdk
changeset 7283:729ca1ef7c75
8002390: (zipfs) Problems moving files between zip file systems
Summary: fixed the corner cases in zipfs
Reviewed-by: sherman
Contributed-by: mark.sheppard@oracle.com
author | sherman |
---|---|
date | Fri, 12 Apr 2013 12:12:53 -0700 |
parents | 6c935c5ac7ff |
children | d8cae0195fe9 |
files | src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystem.java test/demo/zipfs/ZipFSTester.java test/demo/zipfs/basic.sh |
diffstat | 3 files changed, 26 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystem.java Fri Apr 12 12:03:00 2013 -0700 +++ b/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystem.java Fri Apr 12 12:12:53 2013 -0700 @@ -466,7 +466,10 @@ if (eSrc.type == Entry.NEW || eSrc.type == Entry.FILECH) { u.type = eSrc.type; // make it the same type - if (!deletesrc) { // if it's not "rename", just take the data + if (deletesrc) { // if it's a "rename", take the data + u.bytes = eSrc.bytes; + u.file = eSrc.file; + } else { // if it's not "rename", copy the data if (eSrc.bytes != null) u.bytes = Arrays.copyOf(eSrc.bytes, eSrc.bytes.length); else if (eSrc.file != null) { @@ -1118,7 +1121,7 @@ if (old != null) { removeFromTree(old); } - if (e.type == Entry.NEW || e.type == Entry.FILECH) { + if (e.type == Entry.NEW || e.type == Entry.FILECH || e.type == Entry.COPY) { IndexNode parent = inodes.get(LOOKUPKEY.as(getParent(e.name))); e.sibling = parent.child; parent.child = e; @@ -2326,12 +2329,12 @@ private void removeFromTree(IndexNode inode) { IndexNode parent = inodes.get(LOOKUPKEY.as(getParent(inode.name))); IndexNode child = parent.child; - if (child == inode) { + if (child.equals(inode)) { parent.child = child.sibling; } else { IndexNode last = child; while ((child = child.sibling) != null) { - if (child == inode) { + if (child.equals(inode)) { last.sibling = child.sibling; break; } else {
--- a/test/demo/zipfs/ZipFSTester.java Fri Apr 12 12:03:00 2013 -0700 +++ b/test/demo/zipfs/ZipFSTester.java Fri Apr 12 12:12:53 2013 -0700 @@ -138,14 +138,31 @@ Path dst3 = Paths.get(tmpName + "_Tmp"); Files.move(dst2, dst3); checkEqual(src, dst3); + if (Files.exists(dst2)) + throw new RuntimeException("Failed!"); + + // copyback + move + Files.copy(dst3, dst); + Path dst4 = getPathWithParents(fs, tmpName + "_Tmp0"); + Files.move(dst, dst4); + checkEqual(src, dst4); // delete - if (Files.exists(dst2)) + Files.delete(dst4); + if (Files.exists(dst4)) throw new RuntimeException("Failed!"); Files.delete(dst3); if (Files.exists(dst3)) throw new RuntimeException("Failed!"); + // move (existing entry) + Path dst5 = fs.getPath("META-INF/MANIFEST.MF"); + if (Files.exists(dst5)) { + Path dst6 = fs.getPath("META-INF/MANIFEST.MF_TMP"); + Files.move(dst5, dst6); + walk(fs.getPath("/")); + } + // newInputStream on dir Path parent = dst2.getParent(); try {
--- a/test/demo/zipfs/basic.sh Fri Apr 12 12:03:00 2013 -0700 +++ b/test/demo/zipfs/basic.sh Fri Apr 12 12:12:53 2013 -0700 @@ -22,7 +22,7 @@ # # @test # @bug 6990846 7009092 7009085 7015391 7014948 7005986 7017840 7007596 -# 7157656 +# 7157656 8002390 # @summary Test ZipFileSystem demo # @build Basic PathOps ZipFSTester # @run shell basic.sh