Skip to content

Commit cf2e9a6

Browse files
authored
Revert "Fix empty folder missing problem when zip files. (#330)" (#350)
This reverts commit 90626df. Fixes #349 I've spent some time trying to do a fix forward but I don't have much time on my hand. Can we revert this in the meantime and @counter2015 can provide another PR for the empty folder issue?
1 parent ce59250 commit cf2e9a6

File tree

8 files changed

+35
-70
lines changed

8 files changed

+35
-70
lines changed

os/src/ZipOps.scala

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ object zip {
6262
excludePatterns,
6363
includePatterns,
6464
(path, sub) => {
65-
os.copy.over(path, opened / sub, createFolders = true)
65+
os.copy(path, opened / sub, createFolders = true)
6666
if (!preserveMtimes) {
6767
os.mtime.set(opened / sub, 0)
6868
// This is the only way we can properly zero out filesystem metadata within the
@@ -98,12 +98,10 @@ object zip {
9898
sources.foreach { source =>
9999
if (os.isDir(source.src)) {
100100
for (path <- os.walk(source.src)) {
101-
if (shouldInclude(path.toString, excludePatterns, includePatterns)) {
102-
val target = source.dest.getOrElse(os.sub) / path.subRelativeTo(source.src / os.up)
103-
makeZipEntry0(path, target)
101+
if (os.isFile(path) && shouldInclude(path.toString, excludePatterns, includePatterns)) {
102+
makeZipEntry0(path, source.dest.getOrElse(os.sub) / path.subRelativeTo(source.src))
104103
}
105104
}
106-
makeZipEntry0(source.src, source.dest.getOrElse(os.sub / source.src.last))
107105
} else if (shouldInclude(source.src.last, excludePatterns, includePatterns)) {
108106
makeZipEntry0(source.src, source.dest.getOrElse(os.sub / source.src.last))
109107
}
@@ -155,7 +153,6 @@ object zip {
155153
val mtimeOpt = if (preserveMtimes) Some(os.mtime(file)) else None
156154

157155
val fis = if (os.isFile(file)) Some(os.read.inputStream(file)) else None
158-
159156
try makeZipEntry0(sub, fis, mtimeOpt, zipOut)
160157
finally fis.foreach(_.close())
161158
}
@@ -166,14 +163,7 @@ object zip {
166163
preserveMtimes: Option[Long],
167164
zipOut: ZipOutputStream
168165
) = {
169-
val path = is match {
170-
// for folder
171-
case None => sub.toString + "/"
172-
// for file
173-
case Some(_) => sub.toString
174-
}
175-
176-
val zipEntry = new ZipEntry(path)
166+
val zipEntry = new ZipEntry(sub.toString)
177167

178168
preserveMtimes match {
179169
case Some(mtime) => zipEntry.setTime(mtime)

os/test/resources/test/emptyFolder/.gitkeep

Whitespace-only changes.

os/test/src-jvm/SpawningSubprocessesNewTests.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ object SpawningSubprocessesNewTests extends TestSuite {
8686
stdout =
8787
os.ProcessOutput((buf, len) => lineCount += buf.slice(0, len).count(_ == '\n'))
8888
)
89-
lineCount ==> 24
89+
lineCount ==> 22
9090
}
9191
}
9292
test - prep { wd =>
@@ -97,7 +97,7 @@ object SpawningSubprocessesNewTests extends TestSuite {
9797
cwd = wd,
9898
stdout = os.ProcessOutput.Readlines(line => lineCount += 1)
9999
)
100-
lineCount ==> 24
100+
lineCount ==> 22
101101
}
102102
}
103103
}

os/test/src-jvm/SpawningSubprocessesTests.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ object SpawningSubprocessesTests extends TestSuite {
8282
stdout =
8383
os.ProcessOutput((buf, len) => lineCount += buf.slice(0, len).count(_ == '\n'))
8484
)
85-
lineCount ==> 24
85+
lineCount ==> 22
8686
}
8787
}
8888
test - prep { wd =>
@@ -92,7 +92,7 @@ object SpawningSubprocessesTests extends TestSuite {
9292
cwd = wd,
9393
stdout = os.ProcessOutput.Readlines(line => lineCount += 1)
9494
)
95-
lineCount ==> 24
95+
lineCount ==> 22
9696
}
9797
}
9898
}

os/test/src-jvm/ZipOpJvmTests.scala

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,19 @@ object ZipOpJvmTests extends TestSuite {
3636
dest = wd / "unzipped folder"
3737
)
3838

39-
val paths = os.walk(unzippedFolder).toList.sorted
40-
val expected = List(
39+
val paths = os.walk(unzippedFolder)
40+
val expected = Seq(
4141
// Files get included in the zip root using their name
4242
wd / "unzipped folder/File.txt",
4343
wd / "unzipped folder/Multi Line.txt",
4444
// Folder contents get included relative to the source root
45-
wd / "unzipped folder/folder1",
46-
wd / "unzipped folder/folder1/one.txt",
47-
wd / "unzipped folder/folder2",
48-
wd / "unzipped folder/folder2/nestedA",
49-
wd / "unzipped folder/folder2/nestedA/a.txt",
50-
wd / "unzipped folder/folder2/nestedB",
51-
wd / "unzipped folder/folder2/nestedB/b.txt"
52-
).sorted
53-
assert(paths == expected)
45+
wd / "unzipped folder/nestedA",
46+
wd / "unzipped folder/nestedB",
47+
wd / "unzipped folder/one.txt",
48+
wd / "unzipped folder/nestedA/a.txt",
49+
wd / "unzipped folder/nestedB/b.txt"
50+
)
51+
assert(paths.sorted == expected)
5452
}
5553

5654
test("zipAndUnzipPreserveMtimes") - prep { wd =>

os/test/src/CheckerTests.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -453,9 +453,8 @@ object CheckerTests extends TestSuite {
453453
val unzipDir = os.unzip(zipFile, wd / "unzipped")
454454
os.walk(unzipDir).sorted ==> Seq(
455455
unzipDir / "File.txt",
456-
unzipDir / "folder1/one.txt",
457-
unzipDir / "folder1"
458-
).sorted
456+
unzipDir / "one.txt"
457+
)
459458
}
460459
test("unzip") - prepChecker { wd =>
461460
val zipFileName = "zipped.zip"
@@ -479,7 +478,7 @@ object CheckerTests extends TestSuite {
479478
source = zipFile,
480479
dest = wd / "unzipped"
481480
)
482-
os.walk(unzipDir).length ==> 3
481+
os.walk(unzipDir).length ==> 2
483482
}
484483
}
485484
}

os/test/src/OpTests.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ object OpTests extends TestSuite {
1818
res / "misc",
1919
res / "os",
2020
res / "File.txt",
21-
res / "Multi Line.txt",
22-
res / "emptyFolder"
21+
res / "Multi Line.txt"
2322
),
2423
os.list(res / "folder2").toSet == Set(
2524
res / "folder2/nestedA",

os/test/src/ZipOpTests.scala

Lines changed: 14 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,9 @@ object ZipOpTests extends TestSuite {
5454
val expected = Seq(
5555
wd / "unzipped folder/renamed-file.txt",
5656
wd / "unzipped folder/renamed-folder",
57-
wd / "unzipped folder/renamed-folder/folder1",
58-
wd / "unzipped folder/renamed-folder/folder1/one.txt"
57+
wd / "unzipped folder/renamed-folder/one.txt"
5958
)
60-
assert(paths.sorted == expected.sorted)
59+
assert(paths.sorted == expected)
6160
}
6261

6362
test("excludePatterns") - prep { wd =>
@@ -81,9 +80,8 @@ object ZipOpTests extends TestSuite {
8180
zipFile1,
8281
dest = wd / "zipByExcludingCertainFiles"
8382
)
84-
val paths = os.walk(outputZipFilePath).toList.sorted
85-
val expected =
86-
Seq(wd / "zipByExcludingCertainFiles/File.amx").toList.sorted
83+
val paths = os.walk(outputZipFilePath).sorted
84+
val expected = Seq(wd / "zipByExcludingCertainFiles/File.amx")
8785
assert(paths == expected)
8886
}
8987

@@ -106,8 +104,8 @@ object ZipOpTests extends TestSuite {
106104
// Unzip file to check for contents
107105
val outputZipFilePath =
108106
os.unzip(zipFile1, dest = wd / "zipByIncludingCertainFiles")
109-
val paths = os.walk(outputZipFilePath).toSeq.sorted
110-
val expected = List(wd / "zipByIncludingCertainFiles" / amxFile).sorted
107+
val paths = os.walk(outputZipFilePath)
108+
val expected = Seq(wd / "zipByIncludingCertainFiles" / amxFile)
111109
assert(paths == expected)
112110
}
113111

@@ -126,8 +124,8 @@ object ZipOpTests extends TestSuite {
126124
dest = wd / "zipStreamFunction"
127125
)
128126

129-
val paths = os.walk(unzippedFolder).toSeq
130-
assert(paths.sorted == Seq(unzippedFolder / "File.txt").sorted)
127+
val paths = os.walk(unzippedFolder)
128+
assert(paths == Seq(unzippedFolder / "File.txt"))
131129
}
132130

133131
test("list") - prep { wd =>
@@ -142,10 +140,9 @@ object ZipOpTests extends TestSuite {
142140
)
143141

144142
// Unzip file to a destination folder
145-
val listedContents = os.unzip.list(source = wd / zipFileName).toList.sorted
143+
val listedContents = os.unzip.list(source = wd / zipFileName).toSeq
146144

147-
val expected =
148-
List(os.sub / "File.txt", os.sub / "folder1/one.txt", os.sub / "folder1").sorted
145+
val expected = Seq(os.sub / "File.txt", os.sub / "one.txt")
149146
assert(listedContents == expected)
150147
}
151148

@@ -170,12 +167,11 @@ object ZipOpTests extends TestSuite {
170167
excludePatterns = Seq(amxFile.r)
171168
)
172169

173-
val paths = os.walk(unzippedFolder).toList.sorted
174-
val expected = List(
170+
val paths = os.walk(unzippedFolder)
171+
val expected = Seq(
175172
wd / "unzipAllExceptExcludingCertainFiles/File.txt",
176-
wd / "unzipAllExceptExcludingCertainFiles/folder1/one.txt",
177-
wd / "unzipAllExceptExcludingCertainFiles/folder1"
178-
).sorted
173+
wd / "unzipAllExceptExcludingCertainFiles/one.txt"
174+
)
179175

180176
assert(paths == expected)
181177
}
@@ -226,22 +222,5 @@ object ZipOpTests extends TestSuite {
226222
assert(file2Content == "Content of file2")
227223
}
228224

229-
test("emptyFolder") - prep { wd =>
230-
val zipFileName = "zipCheckEmptyDirectory.zip"
231-
val zipFile = os.zip(
232-
dest = wd / zipFileName,
233-
sources = Seq(
234-
wd / "emptyFolder",
235-
wd / "File.txt"
236-
)
237-
)
238-
239-
val unzippedFolder = os.unzip(
240-
source = wd / zipFileName,
241-
dest = wd / "unzipped-empty-directory"
242-
)
243-
244-
assert(os.exists(unzippedFolder / "emptyFolder"))
245-
}
246225
}
247226
}

0 commit comments

Comments
 (0)