about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--editors/code/src/main.ts33
1 files changed, 18 insertions, 15 deletions
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index da04eec92b1..f69b7fdf566 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -286,21 +286,24 @@ async function patchelf(dest: vscode.Uri): Promise<void> {
                 }
             `;
             const origFile = vscode.Uri.file(dest.fsPath + "-orig");
-            await vscode.workspace.fs.rename(dest, origFile);
-            progress.report({ message: "Patching executable", increment: 20 });
-            await new Promise((resolve, reject) => {
-                const handle = exec(`nix-build -E - --argstr srcStr '${origFile.fsPath}' -o '${dest.fsPath}'`,
-                    (err, stdout, stderr) => {
-                        if (err != null) {
-                            reject(Error(stderr));
-                        } else {
-                            resolve(stdout);
-                        }
-                    });
-                handle.stdin?.write(expression);
-                handle.stdin?.end();
-            });
-            await vscode.workspace.fs.delete(origFile);
+            await vscode.workspace.fs.rename(dest, origFile, { overwrite: true });
+            try {
+                progress.report({ message: "Patching executable", increment: 20 });
+                await new Promise((resolve, reject) => {
+                    const handle = exec(`nix-build -E - --argstr srcStr '${origFile.fsPath}' -o '${dest.fsPath}'`,
+                        (err, stdout, stderr) => {
+                            if (err != null) {
+                                reject(Error(stderr));
+                            } else {
+                                resolve(stdout);
+                            }
+                        });
+                    handle.stdin?.write(expression);
+                    handle.stdin?.end();
+                });
+            } finally {
+                await vscode.workspace.fs.delete(origFile);
+            }
         }
     );
 }