Skip to content

Commit dd7feaf

Browse files
authored
Merge pull request #593 from desktop/remove-tar
Replace tar with tar-stream
2 parents 9c9f6ab + e7139a8 commit dd7feaf

File tree

3 files changed

+72
-76
lines changed

3 files changed

+72
-76
lines changed

package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@
3131
"homepage": "https://github.com/desktop/dugite#readme",
3232
"dependencies": {
3333
"progress": "^2.0.3",
34-
"tar": "^7.1.0"
34+
"tar-stream": "^3.1.7"
3535
},
3636
"devDependencies": {
3737
"@types/node": "18",
3838
"@types/progress": "^2.0.1",
3939
"@types/rimraf": "2.0.2",
40-
"@types/tar": "^6.1.2",
4140
"@types/temp": "^0.9.4",
4241
"find-git-exec": "^0.0.4",
4342
"node-test-github-reporter": "^1.2.0",

script/download-git.js

+26-12
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
const ProgressBar = require('progress')
2-
const tar = require('tar')
32
const { createHash } = require('crypto')
43
const { createReadStream, createWriteStream } = require('fs')
5-
6-
const { rm, mkdir, access } = require('fs/promises')
7-
4+
const { rm, mkdir, access, symlink } = require('fs/promises')
5+
const { extract } = require('tar-stream')
6+
const { createGunzip } = require('zlib')
7+
const { join } = require('path')
8+
const assert = require('node:assert')
89
/**
910
* Returns a value indicating whether or not the provided path exists (as in
1011
* whether it's visible to the current process or not).
@@ -41,9 +42,27 @@ const verifyFile = function (file, callback) {
4142
}
4243

4344
const unpackFile = file =>
44-
tar.x({ cwd: config.outputPath, file }).catch(e => {
45-
console.log('Unable to extract archive, aborting...', e)
46-
process.exit(1)
45+
new Promise((resolve, reject) => {
46+
createReadStream(file)
47+
.pipe(new createGunzip())
48+
.pipe(extract())
49+
.on('entry', ({ type, name, mode, linkname }, stream, next) => {
50+
if (name.includes('..')) {
51+
throw new Error(`invalid file name: ${name}`)
52+
}
53+
const p = join(config.outputPath, name)
54+
if (type === 'file') {
55+
stream.pipe(createWriteStream(p, { mode })).on('finish', next)
56+
} else if (type === 'directory') {
57+
mkdir(p).then(next)
58+
} else if (type === 'symlink') {
59+
symlink(linkname, p).then(next)
60+
} else {
61+
throw new Error(`unknown file type: ${type}`)
62+
}
63+
})
64+
.on('error', reject)
65+
.on('finish', resolve)
4766
})
4867

4968
const downloadAndUnpack = async url => {
@@ -98,11 +117,6 @@ const downloadAndUnpack = async url => {
98117
process.exit(1)
99118
})
100119

101-
await mkdir(config.outputPath, { recursive: true }).catch(error => {
102-
console.log(`Unable to create directory at ${config.outputPath}`, error)
103-
process.exit(1)
104-
})
105-
106120
const tempFile = config.tempFile
107121

108122
if (await pathExists(tempFile)) {

yarn.lock

+45-62
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,6 @@
167167
wrap-ansi "^8.1.0"
168168
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
169169

170-
"@isaacs/fs-minipass@^4.0.0":
171-
version "4.0.1"
172-
resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
173-
integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
174-
dependencies:
175-
minipass "^7.0.4"
176-
177170
"@pkgjs/parseargs@^0.11.0":
178171
version "0.11.0"
179172
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
@@ -224,14 +217,6 @@
224217
"@types/glob" "*"
225218
"@types/node" "*"
226219

227-
"@types/tar@^6.1.2":
228-
version "6.1.2"
229-
resolved "https://registry.yarnpkg.com/@types/tar/-/tar-6.1.2.tgz#e60108a7d1b08cc91bf2faf1286cc08fdad48bbe"
230-
integrity sha512-bnX3RRm70/n1WMwmevdOAeDU4YP7f5JSubgnuU+yrO+xQQjwDboJj3u2NTJI5ngCQhXihqVVAH5h5J8YpdpEvg==
231-
dependencies:
232-
"@types/node" "*"
233-
minipass "^3.3.5"
234-
235220
"@types/temp@^0.9.4":
236221
version "0.9.4"
237222
resolved "https://registry.yarnpkg.com/@types/temp/-/temp-0.9.4.tgz#69bd4b0e8fc4d54db06bd1b613c19292d333350b"
@@ -266,11 +251,21 @@ ansi-styles@^6.1.0:
266251
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
267252
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
268253

254+
b4a@^1.6.4:
255+
version "1.6.7"
256+
resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4"
257+
integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==
258+
269259
balanced-match@^1.0.0:
270260
version "1.0.2"
271261
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
272262
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
273263

264+
bare-events@^2.2.0:
265+
version "2.5.0"
266+
resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.0.tgz#305b511e262ffd8b9d5616b056464f8e1b3329cc"
267+
integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==
268+
274269
brace-expansion@^1.1.7:
275270
version "1.1.11"
276271
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -286,11 +281,6 @@ brace-expansion@^2.0.1:
286281
dependencies:
287282
balanced-match "^1.0.0"
288283

289-
chownr@^3.0.0:
290-
version "3.0.0"
291-
resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
292-
integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
293-
294284
color-convert@^2.0.1:
295285
version "2.0.1"
296286
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@@ -374,6 +364,11 @@ escape-string-regexp@^2.0.0:
374364
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
375365
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
376366

367+
fast-fifo@^1.2.0, fast-fifo@^1.3.2:
368+
version "1.3.2"
369+
resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c"
370+
integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==
371+
377372
find-git-exec@^0.0.4:
378373
version "0.0.4"
379374
resolved "https://registry.yarnpkg.com/find-git-exec/-/find-git-exec-0.0.4.tgz#f1d0d35f93ad99bc81aacd357388d00ae902bc92"
@@ -488,38 +483,18 @@ minimist@^1.2.6:
488483
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
489484
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
490485

491-
minipass@^3.3.5:
492-
version "3.3.5"
493-
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.5.tgz#6da7e53a48db8a856eeb9153d85b230a2119e819"
494-
integrity sha512-rQ/p+KfKBkeNwo04U15i+hOwoVBVmekmm/HcfTkTN2t9pbQKCMm4eN5gFeqgrrSp/kH/7BYYhTIHOxGqzbBPaA==
495-
dependencies:
496-
yallist "^4.0.0"
497-
498-
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2:
486+
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
499487
version "7.1.2"
500488
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
501489
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
502490

503-
minizlib@^3.0.1:
504-
version "3.0.1"
505-
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.1.tgz#46d5329d1eb3c83924eff1d3b858ca0a31581012"
506-
integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==
507-
dependencies:
508-
minipass "^7.0.4"
509-
rimraf "^5.0.5"
510-
511491
mkdirp@^0.5.1:
512492
version "0.5.6"
513493
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
514494
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
515495
dependencies:
516496
minimist "^1.2.6"
517497

518-
mkdirp@^3.0.1:
519-
version "3.0.1"
520-
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50"
521-
integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
522-
523498
node-test-github-reporter@^1.2.0:
524499
version "1.2.0"
525500
resolved "https://registry.yarnpkg.com/node-test-github-reporter/-/node-test-github-reporter-1.2.0.tgz#316914021ae66fc944c216080971da4d388e5283"
@@ -575,12 +550,17 @@ progress@^2.0.3:
575550
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
576551
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
577552

553+
queue-tick@^1.0.1:
554+
version "1.0.1"
555+
resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142"
556+
integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==
557+
578558
resolve-pkg-maps@^1.0.0:
579559
version "1.0.0"
580560
resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
581561
integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
582562

583-
rimraf@^5.0.5, rimraf@^5.0.7:
563+
rimraf@^5.0.7:
584564
version "5.0.10"
585565
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c"
586566
integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==
@@ -623,6 +603,17 @@ stackframe@^1.3.4:
623603
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
624604
integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
625605

606+
streamx@^2.15.0:
607+
version "2.20.1"
608+
resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.20.1.tgz#471c4f8b860f7b696feb83d5b125caab2fdbb93c"
609+
integrity sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==
610+
dependencies:
611+
fast-fifo "^1.3.2"
612+
queue-tick "^1.0.1"
613+
text-decoder "^1.1.0"
614+
optionalDependencies:
615+
bare-events "^2.2.0"
616+
626617
"string-width-cjs@npm:string-width@^4.2.0":
627618
version "4.2.3"
628619
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -671,17 +662,14 @@ strip-ansi@^7.0.1:
671662
dependencies:
672663
ansi-regex "^6.0.1"
673664

674-
tar@^7.1.0:
675-
version "7.4.3"
676-
resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571"
677-
integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==
665+
tar-stream@^3.1.7:
666+
version "3.1.7"
667+
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b"
668+
integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==
678669
dependencies:
679-
"@isaacs/fs-minipass" "^4.0.0"
680-
chownr "^3.0.0"
681-
minipass "^7.1.2"
682-
minizlib "^3.0.1"
683-
mkdirp "^3.0.1"
684-
yallist "^5.0.0"
670+
b4a "^1.6.4"
671+
fast-fifo "^1.2.0"
672+
streamx "^2.15.0"
685673

686674
temp@^0.9.4:
687675
version "0.9.4"
@@ -691,6 +679,11 @@ temp@^0.9.4:
691679
mkdirp "^0.5.1"
692680
rimraf "~2.6.2"
693681

682+
text-decoder@^1.1.0:
683+
version "1.2.1"
684+
resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.1.tgz#e173f5121d97bfa3ff8723429ad5ba92e1ead67e"
685+
integrity sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==
686+
694687
tsx@^4.10.5:
695688
version "4.19.1"
696689
resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.1.tgz#b7bffdf4b565813e4dea14b90872af279cd0090b"
@@ -752,13 +745,3 @@ wrappy@1:
752745
version "1.0.2"
753746
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
754747
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
755-
756-
yallist@^4.0.0:
757-
version "4.0.0"
758-
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
759-
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
760-
761-
yallist@^5.0.0:
762-
version "5.0.0"
763-
resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
764-
integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==

0 commit comments

Comments
 (0)