From 21eb0654efad0ffbeedfe8319dd1194319b30d29 Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 12 Nov 2021 10:41:39 +0100 Subject: [PATCH] [#35] Unzip: entry in dir can come before dir in zip entries --- .gitignore | 2 ++ src/babashka/fs.cljc | 8 +++++--- test-resources/bencode-1.1.0.jar | Bin 0 -> 13890 bytes test/babashka/fs_test.clj | 10 ++++++++-- 4 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 test-resources/bencode-1.1.0.jar diff --git a/.gitignore b/.gitignore index e9077ae..36cda07 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,5 @@ gh-pages/ # lsp .lsp/ + +!test-resources/bencode-1.1.0.jar diff --git a/src/babashka/fs.cljc b/src/babashka/fs.cljc index 0aa3501..2e02c95 100644 --- a/src/babashka/fs.cljc +++ b/src/babashka/fs.cljc @@ -793,7 +793,9 @@ new-path (.resolve output-path entry-name)] (if (.isDirectory entry) (create-dirs new-path) - (Files/copy ^java.io.InputStream zis - new-path - cp-opts))) + (do + (create-dirs (parent new-path)) + (Files/copy ^java.io.InputStream zis + new-path + cp-opts)))) (recur)))))))) diff --git a/test-resources/bencode-1.1.0.jar b/test-resources/bencode-1.1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..a989ba3a914048245d8c831f778148019976b257 GIT binary patch literal 13890 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