Skip to content

Commit bff9b5c

Browse files
authored
fix: preserve symlink target when source is parent (#46)
1 parent 533db8e commit bff9b5c

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/cache/targets.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export const applyTargetDir = async (params: TargetParams) => {
7272
const linkTarget =
7373
process.platform === "win32"
7474
? sourceDir
75-
: path.relative(parentDir, sourceDir);
75+
: path.relative(parentDir, sourceDir) || ".";
7676
await deps.symlink(linkTarget, params.targetDir, type);
7777
} catch (error) {
7878
const code = getErrnoCode(error);

tests/targets.test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,28 @@ test("applyTargetDir uses relative symlink targets on non-Windows", {
6969
const linkTarget = await readlink(targetDir);
7070
assert.equal(linkTarget, path.relative(parentDir, sourceDir));
7171
});
72+
73+
test("applyTargetDir creates usable symlink when source equals target parent", {
74+
skip: process.platform === "win32",
75+
}, async () => {
76+
const tmpRoot = path.join(
77+
tmpdir(),
78+
`docs-cache-target-self-parent-${Date.now().toString(36)}`,
79+
);
80+
const sourceDir = path.join(tmpRoot, "source");
81+
const targetDir = path.join(sourceDir, "linked");
82+
83+
await mkdir(sourceDir, { recursive: true });
84+
await writeFile(path.join(sourceDir, "README.md"), "hello", "utf8");
85+
86+
await applyTargetDir({
87+
sourceDir,
88+
targetDir,
89+
mode: "symlink",
90+
});
91+
92+
const data = await readFile(path.join(targetDir, "README.md"), "utf8");
93+
assert.equal(data, "hello");
94+
const linkTarget = await readlink(targetDir);
95+
assert.equal(linkTarget, ".");
96+
});

0 commit comments

Comments
 (0)