@teambit/toolbox.fs.hard-link-directory 0.0.26 → 0.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hard-link-directory.js +9 -0
- package/dist/hard-link-directory.js.map +1 -1
- package/dist/hard-link-directory.spec.js +25 -0
- package/dist/hard-link-directory.spec.js.map +1 -1
- package/dist/{preview-1759960319849.js → preview-1781213779199.js} +1 -1
- package/hard-link-directory.spec.ts +28 -0
- package/hard-link-directory.ts +9 -0
- package/package.json +2 -2
|
@@ -94,6 +94,11 @@ function linkFile(srcFile, destFile) {
|
|
|
94
94
|
yield linkFileIfNotExists(srcFile, destFile);
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
97
|
+
if (err.code === 'EXDEV') {
|
|
98
|
+
// hard links can't cross devices (e.g. bind mounts or overlayfs on CI), fall back to copying
|
|
99
|
+
yield fs_extra_1.default.copyFile(srcFile, destFile);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
97
102
|
if (err.code !== 'EEXIST') {
|
|
98
103
|
throw err;
|
|
99
104
|
}
|
|
@@ -106,6 +111,10 @@ function linkFileIfNotExists(srcFile, destFile) {
|
|
|
106
111
|
yield fs_extra_1.default.link(srcFile, destFile);
|
|
107
112
|
}
|
|
108
113
|
catch (err) {
|
|
114
|
+
if (err.code === 'EXDEV') {
|
|
115
|
+
yield fs_extra_1.default.copyFile(srcFile, destFile);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
109
118
|
if (err.code !== 'EEXIST') {
|
|
110
119
|
throw err;
|
|
111
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hard-link-directory.js","sourceRoot":"","sources":["../hard-link-directory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAWA,8CA0DC;AArED,gDAAwB;AACxB,wDAA0B;AAC1B,8DAAqC;AACrC,8EAAoD;AAEpD;;;;;GAKG;AACH,SAAsB,iBAAiB,CAAC,GAAW,EAAE,QAAkB;;QACrE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,CAAO,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAO;YACzC,IAAI,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,QAAQ,CAAC,GAAG,CAAC,CAAO,OAAO,EAAE,EAAE;oBAC7B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjD,IAAI,CAAC;wBACH,MAAM,kBAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClD,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;4BAAE,MAAM,GAAG,CAAC;oBACvC,CAAC;oBACD,OAAO,UAAU,CAAC;gBACpB,CAAC,CAAA,CAAC,CACH,CAAC;gBACF,MAAM,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1B,OAAO,GAAG,MAAM,IAAA,6BAAiB,EAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,QAAkB,CAAC;gBACvB,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpC,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,mCAAmC;oBACnC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;wBAAE,OAAO;oBAClC,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC3B,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,CAAO,OAAO,EAAE,EAAE;wBAC7B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;wBACjD,MAAM,IAAA,qBAAU,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBACxC,CAAC,CAAA,CAAC,CACH,CAAC;oBACF,OAAO;gBACT,CAAC;YACH,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,CAAO,OAAO,EAAE,EAAE;gBAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACpC,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC1B,8BAA8B;wBAC9B,OAAO;oBACT,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC,CAAA,CAAC,CACH,CAAC;IACJ,CAAC;CAAA;AAED,SAAe,QAAQ,CAAC,OAAe,EAAE,QAAgB;;QACvD,IAAI,CAAC;YACH,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,MAAM,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;CAAA;AAED,SAAe,mBAAmB,CAAC,OAAe,EAAE,QAAgB;;QAClE,IAAI,CAAC;YACH,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;CAAA"}
|
|
1
|
+
{"version":3,"file":"hard-link-directory.js","sourceRoot":"","sources":["../hard-link-directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,31 @@ test('copy symlinked files', () => __awaiter(void 0, void 0, void 0, function* (
|
|
|
73
73
|
expect(fs_extra_1.default.readFileSync(path_1.default.join(dest2Dir, 'file.txt'), 'utf8')).toBe('Hello World');
|
|
74
74
|
expect(fs_extra_1.default.lstatSync(path_1.default.join(dest2Dir, 'file.txt')).isSymbolicLink()).toBeFalsy();
|
|
75
75
|
}));
|
|
76
|
+
test('fall back to copying when hard linking fails with EXDEV', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
77
|
+
const tempDir = (0, defender_fs_global_bit_temp_dir_1.globalBitTempDir)();
|
|
78
|
+
const srcDir = path_1.default.join(tempDir, 'source');
|
|
79
|
+
const dest1Dir = path_1.default.join(tempDir, 'dest1');
|
|
80
|
+
const dest2Dir = path_1.default.join(tempDir, 'dest2');
|
|
81
|
+
fs_extra_1.default.mkdirpSync(srcDir);
|
|
82
|
+
fs_extra_1.default.mkdirpSync(dest1Dir);
|
|
83
|
+
fs_extra_1.default.mkdirpSync(dest2Dir);
|
|
84
|
+
fs_extra_1.default.writeFileSync(path_1.default.join(srcDir, 'file.txt'), 'Hello World');
|
|
85
|
+
const linkSpy = jest.spyOn(fs_extra_1.default, 'link').mockImplementation(() => {
|
|
86
|
+
const err = new Error('EXDEV: cross-device link not permitted');
|
|
87
|
+
err.code = 'EXDEV';
|
|
88
|
+
return Promise.reject(err);
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
yield (0, hard_link_directory_1.hardLinkDirectory)(srcDir, [dest1Dir, dest2Dir]);
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
linkSpy.mockRestore();
|
|
95
|
+
}
|
|
96
|
+
expect(fs_extra_1.default.readFileSync(path_1.default.join(dest1Dir, 'file.txt'), 'utf8')).toBe('Hello World');
|
|
97
|
+
expect(fs_extra_1.default.readFileSync(path_1.default.join(dest2Dir, 'file.txt'), 'utf8')).toBe('Hello World');
|
|
98
|
+
// the fallback copies the file, so it must not share an inode with the source
|
|
99
|
+
expect(fs_extra_1.default.statSync(path_1.default.join(dest1Dir, 'file.txt')).ino).not.toBe(fs_extra_1.default.statSync(path_1.default.join(srcDir, 'file.txt')).ino);
|
|
100
|
+
}));
|
|
76
101
|
test('skip broken symlink', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
77
102
|
const tempDir = (0, defender_fs_global_bit_temp_dir_1.globalBitTempDir)();
|
|
78
103
|
const symlinkTargetDir = path_1.default.join(tempDir, 'symlink-target');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hard-link-directory.spec.js","sourceRoot":"","sources":["../hard-link-directory.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hard-link-directory.spec.js","sourceRoot":"","sources":["../hard-link-directory.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
;
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.toolbox_fs_hard-link-directory@0.0.
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.toolbox_fs_hard-link-directory@0.0.27/dist/hard-link-directory.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [];
|
|
5
5
|
export const overview = [overview_0];
|
|
@@ -75,6 +75,34 @@ test('copy symlinked files', async () => {
|
|
|
75
75
|
expect(fs.lstatSync(path.join(dest2Dir, 'file.txt')).isSymbolicLink()).toBeFalsy();
|
|
76
76
|
});
|
|
77
77
|
|
|
78
|
+
test('fall back to copying when hard linking fails with EXDEV', async () => {
|
|
79
|
+
const tempDir = globalBitTempDir();
|
|
80
|
+
const srcDir = path.join(tempDir, 'source');
|
|
81
|
+
const dest1Dir = path.join(tempDir, 'dest1');
|
|
82
|
+
const dest2Dir = path.join(tempDir, 'dest2');
|
|
83
|
+
|
|
84
|
+
fs.mkdirpSync(srcDir);
|
|
85
|
+
fs.mkdirpSync(dest1Dir);
|
|
86
|
+
fs.mkdirpSync(dest2Dir);
|
|
87
|
+
fs.writeFileSync(path.join(srcDir, 'file.txt'), 'Hello World');
|
|
88
|
+
|
|
89
|
+
const linkSpy = jest.spyOn(fs, 'link').mockImplementation(() => {
|
|
90
|
+
const err = new Error('EXDEV: cross-device link not permitted');
|
|
91
|
+
(err as any).code = 'EXDEV';
|
|
92
|
+
return Promise.reject(err);
|
|
93
|
+
});
|
|
94
|
+
try {
|
|
95
|
+
await hardLinkDirectory(srcDir, [dest1Dir, dest2Dir]);
|
|
96
|
+
} finally {
|
|
97
|
+
linkSpy.mockRestore();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
expect(fs.readFileSync(path.join(dest1Dir, 'file.txt'), 'utf8')).toBe('Hello World');
|
|
101
|
+
expect(fs.readFileSync(path.join(dest2Dir, 'file.txt'), 'utf8')).toBe('Hello World');
|
|
102
|
+
// the fallback copies the file, so it must not share an inode with the source
|
|
103
|
+
expect(fs.statSync(path.join(dest1Dir, 'file.txt')).ino).not.toBe(fs.statSync(path.join(srcDir, 'file.txt')).ino);
|
|
104
|
+
});
|
|
105
|
+
|
|
78
106
|
test('skip broken symlink', async () => {
|
|
79
107
|
const tempDir = globalBitTempDir();
|
|
80
108
|
const symlinkTargetDir = path.join(tempDir, 'symlink-target');
|
package/hard-link-directory.ts
CHANGED
|
@@ -78,6 +78,11 @@ async function linkFile(srcFile: string, destFile: string) {
|
|
|
78
78
|
await linkFileIfNotExists(srcFile, destFile);
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
+
if (err.code === 'EXDEV') {
|
|
82
|
+
// hard links can't cross devices (e.g. bind mounts or overlayfs on CI), fall back to copying
|
|
83
|
+
await fs.copyFile(srcFile, destFile);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
81
86
|
if (err.code !== 'EEXIST') {
|
|
82
87
|
throw err;
|
|
83
88
|
}
|
|
@@ -88,6 +93,10 @@ async function linkFileIfNotExists(srcFile: string, destFile: string) {
|
|
|
88
93
|
try {
|
|
89
94
|
await fs.link(srcFile, destFile);
|
|
90
95
|
} catch (err: any) {
|
|
96
|
+
if (err.code === 'EXDEV') {
|
|
97
|
+
await fs.copyFile(srcFile, destFile);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
91
100
|
if (err.code !== 'EEXIST') {
|
|
92
101
|
throw err;
|
|
93
102
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/toolbox.fs.hard-link-directory",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.27",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/toolbox/fs/hard-link-directory",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.toolbox",
|
|
8
8
|
"name": "fs/hard-link-directory",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.27"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"fs-extra": "10.0.0",
|