summaryrefslogtreecommitdiff
path: root/std/fs/ensure_link.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/fs/ensure_link.ts')
m---------std0
-rw-r--r--std/fs/ensure_link.ts53
2 files changed, 53 insertions, 0 deletions
diff --git a/std b/std
deleted file mode 160000
-Subproject 43aafbf33285753e7b42230f0eb7969b300f71c
diff --git a/std/fs/ensure_link.ts b/std/fs/ensure_link.ts
new file mode 100644
index 000000000..707f2bee9
--- /dev/null
+++ b/std/fs/ensure_link.ts
@@ -0,0 +1,53 @@
+// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+import * as path from "./path/mod.ts";
+import { ensureDir, ensureDirSync } from "./ensure_dir.ts";
+import { exists, existsSync } from "./exists.ts";
+import { getFileInfoType } from "./utils.ts";
+
+/**
+ * Ensures that the hard link exists.
+ * If the directory structure does not exist, it is created.
+ *
+ * @param src the source file path. Directory hard links are not allowed.
+ * @param dest the destination link path
+ */
+export async function ensureLink(src: string, dest: string): Promise<void> {
+ if (await exists(dest)) {
+ const destStatInfo = await Deno.lstat(dest);
+ const destFilePathType = getFileInfoType(destStatInfo);
+ if (destFilePathType !== "file") {
+ throw new Error(
+ `Ensure path exists, expected 'file', got '${destFilePathType}'`
+ );
+ }
+ return;
+ }
+
+ await ensureDir(path.dirname(dest));
+
+ await Deno.link(src, dest);
+}
+
+/**
+ * Ensures that the hard link exists.
+ * If the directory structure does not exist, it is created.
+ *
+ * @param src the source file path. Directory hard links are not allowed.
+ * @param dest the destination link path
+ */
+export function ensureLinkSync(src: string, dest: string): void {
+ if (existsSync(dest)) {
+ const destStatInfo = Deno.lstatSync(dest);
+ const destFilePathType = getFileInfoType(destStatInfo);
+ if (destFilePathType !== "file") {
+ throw new Error(
+ `Ensure path exists, expected 'file', got '${destFilePathType}'`
+ );
+ }
+ return;
+ }
+
+ ensureDirSync(path.dirname(dest));
+
+ Deno.linkSync(src, dest);
+}