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
// CreateFile and GetFinalPathNameByHandle on Windows
let realpath = std::fs::canonicalize(&path)?;
let mut realpath_str =
into_string(realpath.into_os_string())?.replace("\\", "/");
let mut realpath_str = into_string(realpath.into_os_string())?;
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))
}
@ -971,10 +970,9 @@ async fn op_realpath_async(
// corresponds to the realpath on Unix and
// CreateFile and GetFinalPathNameByHandle on Windows
let realpath = std::fs::canonicalize(&path)?;
let mut realpath_str =
into_string(realpath.into_os_string())?.replace("\\", "/");
let mut realpath_str = into_string(realpath.into_os_string())?;
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))
})

View file

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