Skip to content

Commit 2684ca2

Browse files
authored
fix: link relative paths for better portability (#111)
close #107 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved extraction process to handle file paths and symlink creation more reliably. - **Refactor** - Streamlined internal logic for file and symlink handling to enhance maintainability. - Refactored function export for better code clarity without changing functionality. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: jiacheng.li <[email protected]>
1 parent 9443683 commit 2684ca2

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

lib/utils.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -109,31 +109,37 @@ exports.makeUncompressFn = StreamClass => {
109109
.on('error', reject)
110110
.on('entry', (header, stream, next) => {
111111
stream.on('end', next);
112+
const destFilePath = path.join(destDir, header.name);
112113

113114
if (header.type === 'file') {
114-
const fullpath = path.join(destDir, header.name);
115-
mkdirp(path.dirname(fullpath), err => {
115+
const dir = path.dirname(destFilePath);
116+
mkdirp(dir, err => {
116117
if (err) return reject(err);
117118

118119
entryCount++;
119-
pump(stream, fs.createWriteStream(fullpath, { mode: opts.mode || header.mode }), err => {
120+
pump(stream, fs.createWriteStream(destFilePath, { mode: opts.mode || header.mode }), err => {
120121
if (err) return reject(err);
121122
successCount++;
122123
done();
123124
});
124125
});
125126
} else if (header.type === 'symlink') {
126-
// symlink
127-
const src = path.join(destDir, header.name);
128-
const target = path.resolve(path.dirname(src), header.linkname);
127+
const dir = path.dirname(destFilePath);
128+
const target = path.resolve(dir, header.linkname);
129129
entryCount++;
130-
fs.symlink(target, src, err => {
130+
131+
mkdirp(dir, err => {
131132
if (err) return reject(err);
132-
successCount++;
133-
stream.resume();
133+
134+
const relativeTarget = path.relative(dir, target);
135+
fs.symlink(relativeTarget, destFilePath, err => {
136+
if (err) return reject(err);
137+
successCount++;
138+
stream.resume();
139+
});
134140
});
135141
} else { // directory
136-
mkdirp(path.join(destDir, header.name), err => {
142+
mkdirp(destFilePath, err => {
137143
if (err) return reject(err);
138144
stream.resume();
139145
});
@@ -175,7 +181,7 @@ function normalizePath(fileName) {
175181
return fileName;
176182
}
177183

178-
exports.stripFileName = (strip, fileName, type) => {
184+
function stripFileName(strip, fileName, type) {
179185
// before
180186
// node/package.json
181187
// node/lib/index.js
@@ -218,4 +224,6 @@ exports.stripFileName = (strip, fileName, type) => {
218224

219225
strip = Math.min(strip, s.length - 1);
220226
return s.slice(strip).join('/') || '/';
221-
};
227+
}
228+
229+
exports.stripFileName = stripFileName;

0 commit comments

Comments
 (0)