From 17d3edcd571916073643e9187a28e287c6edf304 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Sun, 19 Apr 2020 10:04:59 +0300 Subject: [PATCH 1/2] cache terminall shell env Signed-off-by: Jari Kolehmainen --- src/main/shell-session.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/shell-session.ts b/src/main/shell-session.ts index 0257382cb199..270a8aa82f27 100644 --- a/src/main/shell-session.ts +++ b/src/main/shell-session.ts @@ -10,6 +10,8 @@ import { Cluster, ClusterPreferences } from "./cluster" import { helmCli } from "./helm-cli" export class ShellSession extends EventEmitter { + static shellEnv: any + protected websocket: WebSocket protected shellProcess: pty.IPty protected kubeconfigPath: string @@ -30,8 +32,7 @@ export class ShellSession extends EventEmitter { public async open() { this.kubectlBinDir = await this.kubectl.binDir() this.helmBinDir = helmCli.getBinaryDir() - await helmCli.binaryPath() - const env = this.getShellEnv() + const env = await this.getCachedShellEnv() const shell = env.PTYSHELL const args = await this.getShellArgs(shell) this.shellProcess = pty.spawn(shell, args, { @@ -75,8 +76,25 @@ export class ShellSession extends EventEmitter { } } - protected getShellEnv() { - const env = JSON.parse(JSON.stringify(shellEnv.sync())) + protected async getCachedShellEnv() { + let env: any + if (!ShellSession.shellEnv) { + env = await this.getShellEnv() + ShellSession.shellEnv = env + } else { + env = ShellSession.shellEnv + + // refresh env in the background + this.getShellEnv().then((shellEnv: any) => { + ShellSession.shellEnv = shellEnv + }) + } + + return env + } + + protected async getShellEnv() { + const env = JSON.parse(JSON.stringify(await shellEnv())) const pathStr = [this.kubectlBinDir, this.helmBinDir, process.env.PATH].join(path.delimiter) if(process.platform === "win32") { From 2971d44c996bce2742334783c08fa1750f55e880 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Sun, 19 Apr 2020 10:22:30 +0300 Subject: [PATCH 2/2] fix Signed-off-by: Jari Kolehmainen --- src/main/node-shell-session.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/node-shell-session.ts b/src/main/node-shell-session.ts index 83bb222851b8..2325e3f77cba 100644 --- a/src/main/node-shell-session.ts +++ b/src/main/node-shell-session.ts @@ -30,7 +30,7 @@ export class NodeShellSession extends ShellSession { } args = ["exec", "-i", "-t", "-n", "kube-system", this.podId, "--", "sh", "-c", "((clear && bash) || (clear && ash) || (clear && sh))"] - const shellEnv = this.getShellEnv() + const shellEnv = await this.getCachedShellEnv() this.shellProcess = pty.spawn(shell, args, { cols: 80, cwd: this.cwd() || shellEnv["HOME"],