From 537c6b3ed9a783b64bec0d41260c13ac84b7feb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=A8=E6=9D=89?= Date: Mon, 2 Dec 2019 03:23:35 +0800 Subject: [PATCH] fix realpath behavior in windows (#3425) --- cli/js/realpath_test.ts | 12 ++++++++++-- cli/ops/fs.rs | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cli/js/realpath_test.ts b/cli/js/realpath_test.ts index 1dc9765784..1faac94cc7 100644 --- a/cli/js/realpath_test.ts +++ b/cli/js/realpath_test.ts @@ -4,7 +4,11 @@ import { testPerm, assert, assertEquals } from "./test_util.ts"; testPerm({ read: true }, function realpathSyncSuccess(): void { const incompletePath = "cli/tests/fixture.json"; const realPath = Deno.realpathSync(incompletePath); - assert(realPath.startsWith("/")); + if (Deno.build.os !== "win") { + assert(realPath.startsWith("/")); + } else { + assert(/^[A-Z]/.test(realPath)); + } assert(realPath.endsWith(incompletePath)); }); @@ -47,7 +51,11 @@ testPerm({ read: true }, function realpathSyncNotFound(): void { testPerm({ read: true }, async function realpathSuccess(): Promise { const incompletePath = "cli/tests/fixture.json"; const realPath = await Deno.realpath(incompletePath); - assert(realPath.startsWith("/")); + if (Deno.build.os !== "win") { + assert(realPath.startsWith("/")); + } else { + assert(/^[A-Z]/.test(realPath)); + } assert(realPath.endsWith(incompletePath)); }); diff --git a/cli/ops/fs.rs b/cli/ops/fs.rs index 54ac1971bb..c847931aba 100644 --- a/cli/ops/fs.rs +++ b/cli/ops/fs.rs @@ -300,7 +300,11 @@ fn op_realpath( // corresponds to the realpath on Unix and // CreateFile and GetFinalPathNameByHandle on Windows let realpath = fs::canonicalize(&path)?; - let realpath_str = realpath.to_str().unwrap().to_owned().replace("\\", "/"); + let mut realpath_str = + realpath.to_str().unwrap().to_owned().replace("\\", "/"); + if cfg!(windows) { + realpath_str = realpath_str.trim_start_matches("//?/").to_string(); + } Ok(json!(realpath_str)) }) }