Fix relaunching during an update
This commit is contained in:
parent
fc3acfabb2
commit
af71203955
|
@ -11,7 +11,7 @@
|
||||||
"patch:apply": "cd ../../../ && git apply ./src/vs/server/scripts/vscode.patch"
|
"patch:apply": "cd ../../../ && git apply ./src/vs/server/scripts/vscode.patch"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@coder/nbin": "^1.2.2",
|
"@coder/nbin": "^1.2.3",
|
||||||
"@types/fs-extra": "^8.0.1",
|
"@types/fs-extra": "^8.0.1",
|
||||||
"@types/node": "^10.12.12",
|
"@types/node": "^10.12.12",
|
||||||
"@types/pem": "^1.9.5",
|
"@types/pem": "^1.9.5",
|
||||||
|
|
|
@ -196,12 +196,14 @@ const startCli = (): boolean | Promise<void> => {
|
||||||
export class WrapperProcess {
|
export class WrapperProcess {
|
||||||
private process?: cp.ChildProcess;
|
private process?: cp.ChildProcess;
|
||||||
private started?: Promise<void>;
|
private started?: Promise<void>;
|
||||||
|
private currentVersion = product.codeServerVersion;
|
||||||
|
|
||||||
public constructor() {
|
public constructor() {
|
||||||
ipcMain.onMessage(async (message) => {
|
ipcMain.onMessage(async (message) => {
|
||||||
switch (message) {
|
switch (message.type) {
|
||||||
case "relaunch":
|
case "relaunch":
|
||||||
logger.info("Relaunching...");
|
logger.info(`Relaunching: ${this.currentVersion} -> ${message.version}`);
|
||||||
|
this.currentVersion = message.version;
|
||||||
this.started = undefined;
|
this.started = undefined;
|
||||||
if (this.process) {
|
if (this.process) {
|
||||||
this.process.removeAllListeners();
|
this.process.removeAllListeners();
|
||||||
|
@ -233,10 +235,16 @@ export class WrapperProcess {
|
||||||
}
|
}
|
||||||
|
|
||||||
private spawn(): cp.ChildProcess {
|
private spawn(): cp.ChildProcess {
|
||||||
return cp.spawn(process.argv[0], process.argv.slice(1), {
|
// If we're using loose files then we need to specify the path. If we're in
|
||||||
|
// the binary we need to let the binary determine the path (via nbin) since
|
||||||
|
// it could be different between binaries which presents a problem when
|
||||||
|
// upgrading (different version numbers or different staging directories).
|
||||||
|
const isBinary = (global as any).NBIN_LOADED;
|
||||||
|
return cp.spawn(process.argv[0], process.argv.slice(isBinary ? 2 : 1), {
|
||||||
env: {
|
env: {
|
||||||
...process.env,
|
...process.env,
|
||||||
LAUNCH_VSCODE: "true",
|
LAUNCH_VSCODE: "true",
|
||||||
|
NBIN_BYPASS: undefined,
|
||||||
VSCODE_PARENT_PID: process.pid.toString(),
|
VSCODE_PARENT_PID: process.pid.toString(),
|
||||||
},
|
},
|
||||||
stdio: ["inherit", "inherit", "inherit", "ipc"],
|
stdio: ["inherit", "inherit", "inherit", "ipc"],
|
||||||
|
|
|
@ -6,7 +6,12 @@ enum ControlMessage {
|
||||||
okFromChild = "ok<",
|
okFromChild = "ok<",
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Message = "relaunch";
|
interface RelaunchMessage {
|
||||||
|
type: "relaunch";
|
||||||
|
version: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type Message = RelaunchMessage;
|
||||||
|
|
||||||
class IpcMain {
|
class IpcMain {
|
||||||
protected readonly _onMessage = new Emitter<Message>();
|
protected readonly _onMessage = new Emitter<Message>();
|
||||||
|
@ -41,11 +46,15 @@ class IpcMain {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public relaunch(): void {
|
public relaunch(version: string): void {
|
||||||
|
this.send({ type: "relaunch", version });
|
||||||
|
}
|
||||||
|
|
||||||
|
private send(message: Message): void {
|
||||||
if (!process.send) {
|
if (!process.send) {
|
||||||
throw new Error("Not a child process with IPC enabled");
|
throw new Error("Not a child process with IPC enabled");
|
||||||
}
|
}
|
||||||
process.send("relaunch");
|
process.send(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ import { IFileService } from "vs/platform/files/common/files";
|
||||||
import { ILogService } from "vs/platform/log/common/log";
|
import { ILogService } from "vs/platform/log/common/log";
|
||||||
import product from "vs/platform/product/common/product";
|
import product from "vs/platform/product/common/product";
|
||||||
import { asJson, IRequestService } from "vs/platform/request/common/request";
|
import { asJson, IRequestService } from "vs/platform/request/common/request";
|
||||||
import { AvailableForDownload, State, UpdateType } from "vs/platform/update/common/update";
|
import { AvailableForDownload, State, UpdateType, StateType } from "vs/platform/update/common/update";
|
||||||
import { AbstractUpdateService } from "vs/platform/update/electron-main/abstractUpdateService";
|
import { AbstractUpdateService } from "vs/platform/update/electron-main/abstractUpdateService";
|
||||||
import { ipcMain } from "vs/server/src/node/ipc";
|
import { ipcMain } from "vs/server/src/node/ipc";
|
||||||
import { extract } from "vs/server/src/node/marketplace";
|
import { extract } from "vs/server/src/node/marketplace";
|
||||||
|
@ -62,7 +62,9 @@ export class UpdateService extends AbstractUpdateService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public async doQuitAndInstall(): Promise<void> {
|
public async doQuitAndInstall(): Promise<void> {
|
||||||
ipcMain.relaunch();
|
if (this.state.type === StateType.Ready) {
|
||||||
|
ipcMain.relaunch(this.state.update.version);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async doCheckForUpdates(context: any): Promise<void> {
|
protected async doCheckForUpdates(context: any): Promise<void> {
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-1.1.8.tgz#416a7221d84161ee35eca9cfa93ba9377639b4ee"
|
resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-1.1.8.tgz#416a7221d84161ee35eca9cfa93ba9377639b4ee"
|
||||||
integrity sha512-NJDC4rZTx0deVYqAxZtJWACq3IrVR59BjFeZebO3i7OfTZZMkkbLsGsCFMnJd5KnX6KjnvvFq4XXtwJ9yf8/YQ==
|
integrity sha512-NJDC4rZTx0deVYqAxZtJWACq3IrVR59BjFeZebO3i7OfTZZMkkbLsGsCFMnJd5KnX6KjnvvFq4XXtwJ9yf8/YQ==
|
||||||
|
|
||||||
"@coder/nbin@^1.2.2":
|
"@coder/nbin@^1.2.3":
|
||||||
version "1.2.2"
|
version "1.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/@coder/nbin/-/nbin-1.2.2.tgz#c5f9aaa2a0e84c2a13a4cce895547efbd66730b7"
|
resolved "https://registry.yarnpkg.com/@coder/nbin/-/nbin-1.2.3.tgz#793061abc7e1f7e0a9d1b9f854fa8f4121ed4e90"
|
||||||
integrity sha512-1Z6aYBRZRY1AQ2xp0jmoz+TXR8M4WaHa9FfVkOPej0KPJjYtEp18I+/6CmffDtBLxSnIai0rc+AA0VhbjCN/rg==
|
integrity sha512-JGJhkaqCrAF9hQ8e7m29/gbbKqDrBAOJCdjNZv9LKF+67lmHUoJ2QS+eHN+KOtpO4EJeEs4/uq7LSEdT+g3t5w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@coder/logger" "^1.1.8"
|
"@coder/logger" "^1.1.8"
|
||||||
fs-extra "^7.0.1"
|
fs-extra "^7.0.1"
|
||||||
|
|
Loading…
Reference in New Issue