diff --git a/.vscode/settings.json b/.vscode/settings.json index b3c0be59..bebd2ead 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,5 +10,11 @@ "when": "$(basename).ts" } }, + "githubIssues.queries":[ + { + "label": "Recent Issues", + "query": "state:open repo:${owner}/${repository} sort:updated-desc" + } + ], "prettier.semi": true -} \ No newline at end of file +} diff --git a/lib/download.ts b/lib/download.ts index 3b810e7d..0fd4bcc3 100644 --- a/lib/download.ts +++ b/lib/download.ts @@ -302,8 +302,17 @@ export async function download(options: Partial = {}): Promise< for (let i = 0; ; i++) { try { + // Use a staging directory and rename after unzipping so partially- + // downloaded/unzipped files aren't "stuck" being used. + const downloadStaging = `${downloadedPath}.tmp`; + await fs.promises.rm(downloadStaging, { recursive: true, force: true }); + const { stream, format } = await downloadVSCodeArchive({ version, platform, cachePath, reporter, timeout }); - await unzipVSCode(reporter, downloadedPath, extractSync, stream, format); + // important! do not put anything async here, since unzipVSCode will need + // to start consuming the stream immediately. + await unzipVSCode(reporter, downloadStaging, extractSync, stream, format); + await fs.promises.rename(downloadStaging, downloadedPath); + reporter.report({ stage: ProgressReportStage.NewInstallComplete, downloadedPath }); break; } catch (error) {