mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
fix(ext/node): support junction symlinks on Windows (#22762)
Fixes https://github.com/denoland/deno/issues/20609 Vitepress support! `vitepress dev` and `vitepress build` via BYONM
This commit is contained in:
parent
26cee4eb0d
commit
0bed4d3e51
8 changed files with 27 additions and 2 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1425,6 +1425,7 @@ dependencies = [
|
|||
"deno_io",
|
||||
"filetime",
|
||||
"fs3",
|
||||
"junction",
|
||||
"libc",
|
||||
"log",
|
||||
"nix 0.26.2",
|
||||
|
|
|
@ -194,6 +194,7 @@ nix = "=0.26.2"
|
|||
|
||||
# windows deps
|
||||
fwdansi = "=1.1.0"
|
||||
junction = "=0.2.0"
|
||||
winapi = "=0.3.9"
|
||||
windows-sys = { version = "0.48.0", features = ["Win32_Media"] }
|
||||
winres = "=0.1.12"
|
||||
|
|
|
@ -154,7 +154,7 @@ zstd.workspace = true
|
|||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
fwdansi.workspace = true
|
||||
junction = "=0.2.0"
|
||||
junction.workspace = true
|
||||
winapi = { workspace = true, features = ["knownfolders", "mswsock", "objbase", "shlobj", "tlhelp32", "winbase", "winerror", "winsock2"] }
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
|
|
|
@ -35,3 +35,4 @@ nix.workspace = true
|
|||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
winapi = { workspace = true, features = ["winbase"] }
|
||||
junction.workspace = true
|
||||
|
|
|
@ -64,6 +64,8 @@ pub enum FsFileType {
|
|||
File,
|
||||
#[serde(rename = "dir")]
|
||||
Directory,
|
||||
#[serde(rename = "junction")]
|
||||
Junction,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
|
|
|
@ -810,6 +810,9 @@ fn symlink(
|
|||
FsFileType::Directory => {
|
||||
std::os::windows::fs::symlink_dir(oldpath, newpath)?;
|
||||
}
|
||||
FsFileType::Junction => {
|
||||
junction::create(oldpath, newpath)?;
|
||||
}
|
||||
};
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -7,7 +7,7 @@ import { CallbackWithError } from "ext:deno_node/_fs/_fs_common.ts";
|
|||
import { pathFromURL } from "ext:deno_web/00_infra.js";
|
||||
import { promisify } from "ext:deno_node/internal/util.mjs";
|
||||
|
||||
type SymlinkType = "file" | "dir";
|
||||
type SymlinkType = "file" | "dir" | "junction";
|
||||
|
||||
export function symlink(
|
||||
target: string | URL,
|
||||
|
|
|
@ -105,3 +105,20 @@ Deno.test({
|
|||
}
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "SYNC: symlink junction",
|
||||
fn() {
|
||||
const dir: string = Deno.makeTempDirSync();
|
||||
const linkedDir: string = dir + "-junction";
|
||||
|
||||
try {
|
||||
symlinkSync(dir, linkedDir, "junction");
|
||||
const stat = Deno.lstatSync(linkedDir);
|
||||
assert(stat.isSymlink);
|
||||
} finally {
|
||||
Deno.removeSync(dir);
|
||||
Deno.removeSync(linkedDir);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue