Skip to content

Commit 304997f

Browse files
committed
Add folder zipEntry when zip files.
1 parent 4a02278 commit 304997f

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

os/src/ZipOps.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ object zip {
102102
makeZipEntry0(path, source.dest.getOrElse(os.sub) / path.subRelativeTo(source.src))
103103
}
104104
}
105+
makeZipEntry0(source.src, source.dest.getOrElse(os.sub / source.src.last))
105106
} else if (shouldInclude(source.src.last, excludePatterns, includePatterns)) {
106107
makeZipEntry0(source.src, source.dest.getOrElse(os.sub / source.src.last))
107108
}
@@ -153,17 +154,19 @@ object zip {
153154
val mtimeOpt = if (preserveMtimes) Some(os.mtime(file)) else None
154155

155156
val fis = if (os.isFile(file)) Some(os.read.inputStream(file)) else None
156-
try makeZipEntry0(sub, fis, mtimeOpt, zipOut)
157+
158+
val path = if (os.isDir(file)) sub.toString + "/" else sub.toString
159+
try makeZipEntry0(path, fis, mtimeOpt, zipOut)
157160
finally fis.foreach(_.close())
158161
}
159162

160163
private def makeZipEntry0(
161-
sub: os.SubPath,
164+
path: String,
162165
is: Option[java.io.InputStream],
163166
preserveMtimes: Option[Long],
164167
zipOut: ZipOutputStream
165168
) = {
166-
val zipEntry = new ZipEntry(sub.toString)
169+
val zipEntry = new ZipEntry(path)
167170

168171
preserveMtimes match {
169172
case Some(mtime) => zipEntry.setTime(mtime)

os/test/src/ZipOpTests.scala

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ object ZipOpTests extends TestSuite {
8080
dest = wd / "zipByExcludingCertainFiles"
8181
)
8282
val paths = os.walk(outputZipFilePath).sorted
83-
val expected = Seq(wd / "zipByExcludingCertainFiles/File.amx")
83+
val expected = Seq(wd / "zipByExcludingCertainFiles/File.amx", wd / "zipByExcludingCertainFiles")
8484
assert(paths == expected)
8585
}
8686

@@ -141,7 +141,7 @@ object ZipOpTests extends TestSuite {
141141
// Unzip file to a destination folder
142142
val listedContents = os.unzip.list(source = wd / zipFileName).toSeq
143143

144-
val expected = Seq(os.sub / "File.txt", os.sub / "one.txt")
144+
val expected = Seq(os.sub / "File.txt", os.sub / "one.txt", os.sub / "folder1")
145145
assert(listedContents == expected)
146146
}
147147

@@ -169,7 +169,8 @@ object ZipOpTests extends TestSuite {
169169
val paths = os.walk(unzippedFolder)
170170
val expected = Seq(
171171
wd / "unzipAllExceptExcludingCertainFiles/File.txt",
172-
wd / "unzipAllExceptExcludingCertainFiles/one.txt"
172+
wd / "unzipAllExceptExcludingCertainFiles/one.txt",
173+
wd / "folder1",
173174
)
174175

175176
assert(paths == expected)
@@ -221,5 +222,23 @@ object ZipOpTests extends TestSuite {
221222
assert(file2Content == "Content of file2")
222223
}
223224

225+
test("emptyFolder") - prep { wd =>
226+
val zipFileName = "zipCheckEmptyDirectory.zip"
227+
val zipFile = os.zip(
228+
dest = wd / zipFileName,
229+
sources = Seq(
230+
wd / "emptyFolder",
231+
wd / "File.txt"
232+
)
233+
)
234+
235+
val unzippedFolder = os.unzip(
236+
source = wd / zipFileName,
237+
dest = wd / "unzipped-empty-directory"
238+
)
239+
240+
os.walk(unzippedFolder).foreach(println)
241+
assert(os.exists(unzippedFolder / "emptyFolder"))
242+
}
224243
}
225244
}

0 commit comments

Comments
 (0)