diff --git a/extensions/git/src/askpass-empty.sh b/extensions/git/src/askpass-empty.sh new file mode 100755 index 00000000000..8fb014e5cc9 --- /dev/null +++ b/extensions/git/src/askpass-empty.sh @@ -0,0 +1,2 @@ +#!/bin/sh +echo '' \ No newline at end of file diff --git a/extensions/git/src/askpass.ts b/extensions/git/src/askpass.ts index 0bf4aa25627..6afe5065657 100644 --- a/extensions/git/src/askpass.ts +++ b/extensions/git/src/askpass.ts @@ -13,16 +13,18 @@ export class Askpass implements Disposable { private server: http.Server; private portPromise: Promise; + private enabled = true; constructor() { this.server = http.createServer((req, res) => this.onRequest(req, res)); - this.server.listen(0, 'localhost'); - this.portPromise = new Promise(c => { - this.server.on('listening', () => c(this.server.address().port)); - }); - - this.server.on('error', err => console.error(err)); + try { + this.server.listen(0); + this.portPromise = new Promise(c => this.server.on('listening', () => c(this.server.address().port))); + this.server.on('error', err => console.error(err)); + } catch (err) { + this.enabled = false; + } } private onRequest(req: http.ServerRequest, res: http.ServerResponse): void { @@ -53,14 +55,20 @@ export class Askpass implements Disposable { return await window.showInputBox(options) || ''; } - getEnv(): Promise { - return this.portPromise.then(port => ({ + async getEnv(): Promise { + if (!this.enabled) { + return { + GIT_ASKPASS: path.join(__dirname, 'askpass-empty.sh') + }; + } + + return { ELECTRON_RUN_AS_NODE: '1', GIT_ASKPASS: path.join(__dirname, 'askpass.sh'), VSCODE_GIT_ASKPASS_NODE: process.execPath, VSCODE_GIT_ASKPASS_MAIN: path.join(__dirname, 'askpass-main.js'), - VSCODE_GIT_ASKPASS_PORT: String(port) - })); + VSCODE_GIT_ASKPASS_PORT: String(await this.portPromise) + }; } dispose(): void {