1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 07:14:47 -05:00

fix(cli/ops/fs): Don't force Windows paths separate paths with forward slash (#7833)

This commit is contained in:
Nayeem Rahman 2020-10-07 13:05:43 +01:00 committed by GitHub
parent 99aa23b8dd
commit c226d3af25
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 22 deletions

View file

@ -941,10 +941,9 @@ fn op_realpath_sync(
// corresponds to the realpath on Unix and // corresponds to the realpath on Unix and
// CreateFile and GetFinalPathNameByHandle on Windows // CreateFile and GetFinalPathNameByHandle on Windows
let realpath = std::fs::canonicalize(&path)?; let realpath = std::fs::canonicalize(&path)?;
let mut realpath_str = let mut realpath_str = into_string(realpath.into_os_string())?;
into_string(realpath.into_os_string())?.replace("\\", "/");
if cfg!(windows) { if cfg!(windows) {
realpath_str = realpath_str.trim_start_matches("//?/").to_string(); realpath_str = realpath_str.trim_start_matches("\\\\?\\").to_string();
} }
Ok(json!(realpath_str)) Ok(json!(realpath_str))
} }
@ -971,10 +970,9 @@ async fn op_realpath_async(
// corresponds to the realpath on Unix and // corresponds to the realpath on Unix and
// CreateFile and GetFinalPathNameByHandle on Windows // CreateFile and GetFinalPathNameByHandle on Windows
let realpath = std::fs::canonicalize(&path)?; let realpath = std::fs::canonicalize(&path)?;
let mut realpath_str = let mut realpath_str = into_string(realpath.into_os_string())?;
into_string(realpath.into_os_string())?.replace("\\", "/");
if cfg!(windows) { if cfg!(windows) {
realpath_str = realpath_str.trim_start_matches("//?/").to_string(); realpath_str = realpath_str.trim_start_matches("\\\\?\\").to_string();
} }
Ok(json!(realpath_str)) Ok(json!(realpath_str))
}) })

View file

@ -1,20 +1,22 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import { import {
assert, assert,
assertMatch,
assertThrows, assertThrows,
assertThrowsAsync, assertThrowsAsync,
unitTest, unitTest,
} from "./test_util.ts"; } from "./test_util.ts";
unitTest({ perms: { read: true } }, function realPathSyncSuccess(): void { unitTest({ perms: { read: true } }, function realPathSyncSuccess(): void {
const incompletePath = "cli/tests/fixture.json"; const relative = "cli/tests/fixture.json";
const realPath = Deno.realPathSync(incompletePath); const realPath = Deno.realPathSync(relative);
if (Deno.build.os !== "windows") { if (Deno.build.os !== "windows") {
assert(realPath.startsWith("/")); assert(realPath.startsWith("/"));
assert(realPath.endsWith(relative));
} else { } else {
assert(/^[A-Z]/.test(realPath)); assertMatch(realPath, /^[A-Z]:\\/);
assert(realPath.endsWith(relative.replace(/\//g, "\\")));
} }
assert(realPath.endsWith(incompletePath));
}); });
unitTest( unitTest(
@ -27,13 +29,14 @@ unitTest(
const symlink = testDir + "/symln"; const symlink = testDir + "/symln";
Deno.mkdirSync(target); Deno.mkdirSync(target);
Deno.symlinkSync(target, symlink); Deno.symlinkSync(target, symlink);
const targetPath = Deno.realPathSync(symlink); const realPath = Deno.realPathSync(symlink);
if (Deno.build.os !== "windows") { if (Deno.build.os !== "windows") {
assert(targetPath.startsWith("/")); assert(realPath.startsWith("/"));
assert(realPath.endsWith("/target"));
} else { } else {
assert(/^[A-Z]/.test(targetPath)); assertMatch(realPath, /^[A-Z]:\\/);
assert(realPath.endsWith("\\target"));
} }
assert(targetPath.endsWith("/target"));
}, },
); );
@ -52,14 +55,15 @@ unitTest({ perms: { read: true } }, function realPathSyncNotFound(): void {
unitTest({ perms: { read: true } }, async function realPathSuccess(): Promise< unitTest({ perms: { read: true } }, async function realPathSuccess(): Promise<
void void
> { > {
const incompletePath = "cli/tests/fixture.json"; const relativePath = "cli/tests/fixture.json";
const realPath = await Deno.realPath(incompletePath); const realPath = await Deno.realPath(relativePath);
if (Deno.build.os !== "windows") { if (Deno.build.os !== "windows") {
assert(realPath.startsWith("/")); assert(realPath.startsWith("/"));
assert(realPath.endsWith(relativePath));
} else { } else {
assert(/^[A-Z]/.test(realPath)); assertMatch(realPath, /^[A-Z]:\\/);
assert(realPath.endsWith(relativePath.replace(/\//g, "\\")));
} }
assert(realPath.endsWith(incompletePath));
}); });
unitTest( unitTest(
@ -72,13 +76,14 @@ unitTest(
const symlink = testDir + "/symln"; const symlink = testDir + "/symln";
Deno.mkdirSync(target); Deno.mkdirSync(target);
Deno.symlinkSync(target, symlink); Deno.symlinkSync(target, symlink);
const targetPath = await Deno.realPath(symlink); const realPath = await Deno.realPath(symlink);
if (Deno.build.os !== "windows") { if (Deno.build.os !== "windows") {
assert(targetPath.startsWith("/")); assert(realPath.startsWith("/"));
assert(realPath.endsWith("/target"));
} else { } else {
assert(/^[A-Z]/.test(targetPath)); assertMatch(realPath, /^[A-Z]:\\/);
assert(realPath.endsWith("\\target"));
} }
assert(targetPath.endsWith("/target"));
}, },
); );