summaryrefslogtreecommitdiff
path: root/std/fs
diff options
context:
space:
mode:
Diffstat (limited to 'std/fs')
-rw-r--r--std/fs/walk.ts17
-rw-r--r--std/fs/walk_test.ts5
2 files changed, 10 insertions, 12 deletions
diff --git a/std/fs/walk.ts b/std/fs/walk.ts
index 47e7e7afa..4ce564435 100644
--- a/std/fs/walk.ts
+++ b/std/fs/walk.ts
@@ -106,18 +106,17 @@ export async function* walk(
return;
}
for await (const entry of Deno.readDir(root)) {
+ assert(entry.name != null);
+ let path = join(root, entry.name);
+
if (entry.isSymlink) {
if (followSymlinks) {
- // TODO(ry) Re-enable followSymlinks.
- throw new Error("unimplemented");
+ path = await Deno.realPath(path);
} else {
continue;
}
}
- assert(entry.name != null);
- const path = join(root, entry.name);
-
if (entry.isFile) {
if (includeFiles && include(path, exts, match, skip)) {
yield { path, ...entry };
@@ -159,17 +158,17 @@ export function* walkSync(
return;
}
for (const entry of Deno.readDirSync(root)) {
+ assert(entry.name != null);
+ let path = join(root, entry.name);
+
if (entry.isSymlink) {
if (followSymlinks) {
- throw new Error("unimplemented");
+ path = Deno.realPathSync(path);
} else {
continue;
}
}
- assert(entry.name != null);
- const path = join(root, entry.name);
-
if (entry.isFile) {
if (includeFiles && include(path, exts, match, skip)) {
yield { path, ...entry };
diff --git a/std/fs/walk_test.ts b/std/fs/walk_test.ts
index c772f4912..eae21f7b1 100644
--- a/std/fs/walk_test.ts
+++ b/std/fs/walk_test.ts
@@ -252,12 +252,11 @@ testWalk(
async function symlink(): Promise<void> {
assertReady(6);
const files = await walkArray("a");
- assertEquals(files.length, 2);
+ assertEquals(files.length, 3);
assert(!files.includes("a/bb/z"));
const arr = await walkArray("a", { followSymlinks: true });
- assertEquals(arr.length, 3);
+ assertEquals(arr.length, 5);
assert(arr.some((f): boolean => f.endsWith("/b/z")));
},
- true,
);