Skip to content

Commit 04e55ca

Browse files
committed
Fix Windows
1 parent defbe38 commit 04e55ca

File tree

2 files changed

+62
-52
lines changed

2 files changed

+62
-52
lines changed

os/src/ZipOps.scala

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,16 @@ object zip {
164164
val mtime = if (preserveMtimes) os.mtime(file) else 0
165165
zipEntry.setTime(mtime)
166166

167-
val mode = apache.PermissionUtils.modeFromPermissions(
168-
os.perms(file, followLinks = false).toSet(),
169-
toFileType(file)
170-
)
171-
zipEntry.setUnixMode(mode)
167+
if (!scala.util.Properties.isWin) {
168+
val mode = apache.PermissionUtils.modeFromPermissions(
169+
os.perms(file, followLinks = false).toSet(),
170+
toFileType(file)
171+
)
172+
zipEntry.setUnixMode(mode)
173+
}
172174

173175
val fis =
174-
if (os.isLink(file))
176+
if (!scala.util.Properties.isWin && os.isLink(file))
175177
Some(new java.io.ByteArrayInputStream(os.readLink(file).toString().getBytes()))
176178
else if (os.isFile(file)) Some(os.read.inputStream(file))
177179
else None
@@ -277,13 +279,13 @@ object unzip {
277279
for ((zipEntry, zipInputStream) <- zipEntryInputStreams) {
278280
val newFile = dest / os.SubPath(zipEntry.getName)
279281
val mode = zipEntry.getUnixMode
280-
val perms = if (mode > 0) {
282+
val perms = if (mode > 0 || scala.util.Properties.isWin) {
281283
os.PermSet.fromSet(apache.PermissionUtils.permissionsFromMode(mode))
282284
} else null
283285

284286
if (zipEntry.isDirectory) {
285287
os.makeDir.all(newFile, perms = perms)
286-
} else if (isSymLink(mode)) {
288+
} else if (!scala.util.Properties.isWin && isSymLink(mode)) {
287289
val target = scala.io.Source.fromInputStream(zipInputStream).mkString
288290
val path = java.nio.file.Paths.get(target)
289291
val dest = if (path.isAbsolute) os.Path(path) else os.RelPath(path)
@@ -293,7 +295,7 @@ object unzip {
293295
val outputStream = os.write.outputStream(newFile, createFolders = true)
294296
os.Internals.transfer(zipInputStream, outputStream, close = false)
295297
outputStream.close()
296-
if (perms != null) os.perms.set(newFile, perms)
298+
if (!scala.util.Properties.isWin && perms != null) os.perms.set(newFile, perms)
297299
}
298300
}
299301
} finally {

os/test/src/ZipOpTests.scala

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,10 @@ object ZipOpTests extends TestSuite {
195195
) = {
196196
val zipFileName = "zipped.zip"
197197
val source = wd / "folder2"
198-
os.perms.set(source / "nestedA" / "a.txt", os.PermSet.fromString("rw-rw-rw-"))
199-
os.symlink(source / "nestedA" / "link.txt", os.rel / "a.txt")
198+
if (!scala.util.Properties.isWin) {
199+
os.perms.set(source / "nestedA" / "a.txt", os.PermSet.fromString("rw-rw-rw-"))
200+
os.symlink(source / "nestedA" / "link.txt", os.rel / "a.txt")
201+
}
200202

201203
val zipped =
202204
if (zipStream) {
@@ -232,53 +234,59 @@ object ZipOpTests extends TestSuite {
232234
def walkRel(p: os.Path) = os.walk(p).map(_.relativeTo(p))
233235

234236
test("zip") - prep { wd =>
235-
val (source, unzipped) = prepare(wd)
236-
237-
assert(walkRel(source).toSet == walkRel(unzipped).toSet)
238-
assert(os.walk.stream(source)
239-
.filter(!os.isLink(_))
240-
.forall(p => os.perms(p) == os.perms(unzipped / p.relativeTo(source))))
241-
assert(
242-
os.walk.stream(source)
243-
.filter(os.isLink(_))
244-
.forall { p =>
245-
val unzippedLink = unzipped / p.relativeTo(source)
246-
os.isLink(unzippedLink) &&
247-
os.readLink(p) == os.readLink(unzippedLink)
248-
}
249-
)
237+
if (!scala.util.Properties.isWin) {
238+
val (source, unzipped) = prepare(wd)
239+
240+
assert(walkRel(source).toSet == walkRel(unzipped).toSet)
241+
assert(os.walk.stream(source)
242+
.filter(!os.isLink(_))
243+
.forall(p => os.perms(p) == os.perms(unzipped / p.relativeTo(source))))
244+
assert(
245+
os.walk.stream(source)
246+
.filter(os.isLink(_))
247+
.forall { p =>
248+
val unzippedLink = unzipped / p.relativeTo(source)
249+
os.isLink(unzippedLink) &&
250+
os.readLink(p) == os.readLink(unzippedLink)
251+
}
252+
)
253+
}
250254
}
251255

252256
test("zipStream") - prep { wd =>
253-
val (source, unzipped) = prepare(wd, zipStream = true)
254-
255-
assert(walkRel(source).toSet == walkRel(unzipped).toSet)
256-
assert(os.walk.stream(source)
257-
.filter(!os.isLink(_))
258-
.forall(p => os.perms(p) == os.perms(unzipped / p.relativeTo(source))))
259-
assert(
260-
os.walk.stream(source)
261-
.filter(os.isLink(_))
262-
.forall { p =>
263-
val unzippedLink = unzipped / p.relativeTo(source)
264-
os.isLink(unzippedLink) &&
265-
os.readLink(p) == os.readLink(unzippedLink)
266-
}
267-
)
257+
if (!scala.util.Properties.isWin) {
258+
val (source, unzipped) = prepare(wd, zipStream = true)
259+
260+
assert(walkRel(source).toSet == walkRel(unzipped).toSet)
261+
assert(os.walk.stream(source)
262+
.filter(!os.isLink(_))
263+
.forall(p => os.perms(p) == os.perms(unzipped / p.relativeTo(source))))
264+
assert(
265+
os.walk.stream(source)
266+
.filter(os.isLink(_))
267+
.forall { p =>
268+
val unzippedLink = unzipped / p.relativeTo(source)
269+
os.isLink(unzippedLink) &&
270+
os.readLink(p) == os.readLink(unzippedLink)
271+
}
272+
)
273+
}
268274
}
269275

270276
test("unzipStream") - prep { wd =>
271-
val (source, unzipped) = prepare(wd, zipStream = true)
272-
273-
assert(walkRel(source).toSet == walkRel(unzipped).toSet)
274-
assert(
275-
os.walk.stream(source)
276-
.filter(os.isLink(_))
277-
.forall { p =>
278-
val unzippedLink = unzipped / p.relativeTo(source)
279-
os.read(p) == os.read(unzippedLink)
280-
}
281-
)
277+
if (!scala.util.Properties.isWin) {
278+
val (source, unzipped) = prepare(wd, zipStream = true)
279+
280+
assert(walkRel(source).toSet == walkRel(unzipped).toSet)
281+
assert(
282+
os.walk.stream(source)
283+
.filter(os.isLink(_))
284+
.forall { p =>
285+
val unzippedLink = unzipped / p.relativeTo(source)
286+
os.read(p) == os.read(unzippedLink)
287+
}
288+
)
289+
}
282290
}
283291
}
284292

0 commit comments

Comments
 (0)