Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e480f6527e | ||
|
|
26584f2060 | ||
|
|
a4c0fd1fdc | ||
|
|
6c104c016e | ||
|
|
599670136d | ||
|
|
ce637d318d | ||
|
|
d8654b5a19 | ||
|
|
12c3ccd6c7 | ||
|
|
7954656610 |
@@ -15,7 +15,7 @@ RUN yum update -y && yum install -y \
|
|||||||
RUN mkdir /usr/share/node && cd /usr/share/node \
|
RUN mkdir /usr/share/node && cd /usr/share/node \
|
||||||
&& curl "https://nodejs.org/dist/v12.14.0/node-v12.14.0-linux-$(uname -m | sed 's/86_//; s/aarch/arm/').tar.xz" | tar xJ --strip-components=1 --
|
&& curl "https://nodejs.org/dist/v12.14.0/node-v12.14.0-linux-$(uname -m | sed 's/86_//; s/aarch/arm/').tar.xz" | tar xJ --strip-components=1 --
|
||||||
ENV PATH "$PATH:/usr/share/node/bin"
|
ENV PATH "$PATH:/usr/share/node/bin"
|
||||||
RUN npm install -g yarn
|
RUN npm install -g yarn@1.22.4
|
||||||
|
|
||||||
RUN curl -L "https://github.com/mvdan/sh/releases/download/v3.0.1/shfmt_v3.0.1_linux_$(uname -m | sed 's/x86_/amd/; s/aarch64/arm/')" > /usr/local/bin/shfmt \
|
RUN curl -L "https://github.com/mvdan/sh/releases/download/v3.0.1/shfmt_v3.0.1_linux_$(uname -m | sed 's/x86_/amd/; s/aarch64/arm/')" > /usr/local/bin/shfmt \
|
||||||
&& chmod +x /usr/local/bin/shfmt
|
&& chmod +x /usr/local/bin/shfmt
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ index 2d8b725ff2..a8d93a17ca 100644
|
|||||||
unique-stream@^2.0.2:
|
unique-stream@^2.0.2:
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
diff --git a/package.json b/package.json
|
diff --git a/package.json b/package.json
|
||||||
index 6e9b9dc0a0..49b14e536a 100644
|
index 29d3cb6677..d3788cb1ab 100644
|
||||||
--- a/package.json
|
--- a/package.json
|
||||||
+++ b/package.json
|
+++ b/package.json
|
||||||
@@ -33,6 +33,9 @@
|
@@ -33,6 +33,9 @@
|
||||||
@@ -248,7 +248,7 @@ index 2c64061da7..c0ef8faedd 100644
|
|||||||
// Do nothing. If we can't read the file we have no
|
// Do nothing. If we can't read the file we have no
|
||||||
// language pack config.
|
// language pack config.
|
||||||
diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts
|
diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts
|
||||||
index 45f6f17ce0..79fde0b92c 100644
|
index 45f6f17ce0..4d1a590a7c 100644
|
||||||
--- a/src/vs/code/browser/workbench/workbench.ts
|
--- a/src/vs/code/browser/workbench/workbench.ts
|
||||||
+++ b/src/vs/code/browser/workbench/workbench.ts
|
+++ b/src/vs/code/browser/workbench/workbench.ts
|
||||||
@@ -246,12 +246,18 @@ class WorkspaceProvider implements IWorkspaceProvider {
|
@@ -246,12 +246,18 @@ class WorkspaceProvider implements IWorkspaceProvider {
|
||||||
@@ -272,7 +272,26 @@ index 45f6f17ce0..79fde0b92c 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Append payload if any
|
// Append payload if any
|
||||||
@@ -302,35 +308,6 @@ class WorkspaceProvider implements IWorkspaceProvider {
|
@@ -290,6 +296,18 @@ class WorkspaceProvider implements IWorkspaceProvider {
|
||||||
|
|
||||||
|
const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents, workspaceUri?: UriComponents } = JSON.parse(configElementAttribute);
|
||||||
|
|
||||||
|
+ // Strip the protocol from the authority if it exists.
|
||||||
|
+ const normalizeAuthority = (authority: string): string => authority.replace(/^https?:\/\//, "");
|
||||||
|
+ if (config.remoteAuthority) {
|
||||||
|
+ (config as any).remoteAuthority = normalizeAuthority(config.remoteAuthority);
|
||||||
|
+ }
|
||||||
|
+ if (config.workspaceUri) {
|
||||||
|
+ config.workspaceUri.authority = normalizeAuthority(config.workspaceUri.authority);
|
||||||
|
+ }
|
||||||
|
+ if (config.folderUri) {
|
||||||
|
+ config.folderUri.authority = normalizeAuthority(config.folderUri.authority);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// Revive static extension locations
|
||||||
|
if (Array.isArray(config.staticExtensions)) {
|
||||||
|
config.staticExtensions.forEach(extension => {
|
||||||
|
@@ -302,35 +320,6 @@ class WorkspaceProvider implements IWorkspaceProvider {
|
||||||
let workspace: IWorkspace;
|
let workspace: IWorkspace;
|
||||||
let payload = Object.create(null);
|
let payload = Object.create(null);
|
||||||
|
|
||||||
@@ -493,10 +512,10 @@ index eab8591492..26668701f7 100644
|
|||||||
options.logService.error(`${logPrefix} socketFactory.connect() failed. Error:`);
|
options.logService.error(`${logPrefix} socketFactory.connect() failed. Error:`);
|
||||||
diff --git a/src/vs/server/browser/client.ts b/src/vs/server/browser/client.ts
|
diff --git a/src/vs/server/browser/client.ts b/src/vs/server/browser/client.ts
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000..4042e32f74
|
index 0000000000..96fbd4b0bb
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/vs/server/browser/client.ts
|
+++ b/src/vs/server/browser/client.ts
|
||||||
@@ -0,0 +1,263 @@
|
@@ -0,0 +1,270 @@
|
||||||
+import { Emitter } from 'vs/base/common/event';
|
+import { Emitter } from 'vs/base/common/event';
|
||||||
+import { URI } from 'vs/base/common/uri';
|
+import { URI } from 'vs/base/common/uri';
|
||||||
+import { localize } from 'vs/nls';
|
+import { localize } from 'vs/nls';
|
||||||
@@ -515,6 +534,7 @@ index 0000000000..4042e32f74
|
|||||||
+import { LocalizationsService } from 'vs/workbench/services/localizations/electron-browser/localizationsService';
|
+import { LocalizationsService } from 'vs/workbench/services/localizations/electron-browser/localizationsService';
|
||||||
+import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
+import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||||
+import { Options } from 'vs/server/ipc.d';
|
+import { Options } from 'vs/server/ipc.d';
|
||||||
|
+import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||||
+
|
+
|
||||||
+class TelemetryService extends TelemetryChannelClient {
|
+class TelemetryService extends TelemetryChannelClient {
|
||||||
+ public constructor(
|
+ public constructor(
|
||||||
@@ -725,6 +745,12 @@ index 0000000000..4042e32f74
|
|||||||
+ };
|
+ };
|
||||||
+
|
+
|
||||||
+ updateLoop();
|
+ updateLoop();
|
||||||
|
+
|
||||||
|
+ // This will be used to set the background color while VS Code loads.
|
||||||
|
+ const theme = (services.get(IStorageService) as IStorageService).get("colorThemeData", StorageScope.GLOBAL);
|
||||||
|
+ if (theme) {
|
||||||
|
+ localStorage.setItem("colorThemeData", theme);
|
||||||
|
+ }
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+export interface Query {
|
+export interface Query {
|
||||||
|
|||||||
Submodule lib/vscode updated: 78a4c91400...0ba0ca5295
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "code-server",
|
"name": "code-server",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "3.0.1",
|
"version": "3.0.2",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"clean": "ci/clean.sh",
|
"clean": "ci/clean.sh",
|
||||||
"vscode": "ci/vscode.sh",
|
"vscode": "ci/vscode.sh",
|
||||||
|
|||||||
@@ -100,4 +100,11 @@
|
|||||||
<script>
|
<script>
|
||||||
require(["vs/code/browser/workbench/workbench"], function() {})
|
require(["vs/code/browser/workbench/workbench"], function() {})
|
||||||
</script>
|
</script>
|
||||||
|
<script>
|
||||||
|
try {
|
||||||
|
document.body.style.background = JSON.parse(localStorage.getItem("colorThemeData")).colorMap["editor.background"]
|
||||||
|
} catch (error) {
|
||||||
|
// Oh well.
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -98,8 +98,8 @@ const options: Options<Required<Args>> = {
|
|||||||
version: { type: "boolean", short: "v", description: "Display version information." },
|
version: { type: "boolean", short: "v", description: "Display version information." },
|
||||||
_: { type: "string[]" },
|
_: { type: "string[]" },
|
||||||
|
|
||||||
"disable-ssh": { type: "boolean" },
|
"disable-ssh": { type: "boolean", description: "Disable the SSH server." },
|
||||||
"ssh-host-key": { type: "string", path: true },
|
"ssh-host-key": { type: "string", path: true, description: "SSH server host key." },
|
||||||
|
|
||||||
"user-data-dir": { type: "string", path: true, description: "Path to the user data directory." },
|
"user-data-dir": { type: "string", path: true, description: "Path to the user data directory." },
|
||||||
"extensions-dir": { type: "string", path: true, description: "Path to the extensions directory." },
|
"extensions-dir": { type: "string", path: true, description: "Path to the extensions directory." },
|
||||||
|
|||||||
@@ -14,24 +14,34 @@ import { SshProvider } from "./ssh/server"
|
|||||||
import { generateCertificate, generatePassword, generateSshHostKey, hash, open } from "./util"
|
import { generateCertificate, generatePassword, generateSshHostKey, hash, open } from "./util"
|
||||||
import { ipcMain, wrap } from "./wrapper"
|
import { ipcMain, wrap } from "./wrapper"
|
||||||
|
|
||||||
|
process.on("uncaughtException", (error) => {
|
||||||
|
logger.error(`Uncaught exception: ${error.message}`)
|
||||||
|
if (typeof error.stack !== "undefined") {
|
||||||
|
logger.error(error.stack)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
let pkg: { version?: string; commit?: string } = {}
|
||||||
|
try {
|
||||||
|
pkg = require("../../package.json")
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn(error.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
const version = pkg.version || "development"
|
||||||
|
const commit = pkg.commit || "development"
|
||||||
|
|
||||||
const main = async (args: Args): Promise<void> => {
|
const main = async (args: Args): Promise<void> => {
|
||||||
const auth = args.auth || AuthType.Password
|
const auth = args.auth || AuthType.Password
|
||||||
const originalPassword = auth === AuthType.Password && (process.env.PASSWORD || (await generatePassword()))
|
const originalPassword = auth === AuthType.Password && (process.env.PASSWORD || (await generatePassword()))
|
||||||
|
|
||||||
let commit: string | undefined
|
|
||||||
try {
|
|
||||||
commit = require("../../package.json").commit
|
|
||||||
} catch (error) {
|
|
||||||
logger.warn(error.message)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Spawn the main HTTP server.
|
// Spawn the main HTTP server.
|
||||||
const options = {
|
const options = {
|
||||||
auth,
|
auth,
|
||||||
cert: args.cert ? args.cert.value : undefined,
|
cert: args.cert ? args.cert.value : undefined,
|
||||||
certKey: args["cert-key"],
|
certKey: args["cert-key"],
|
||||||
sshHostKey: args["ssh-host-key"],
|
sshHostKey: args["ssh-host-key"],
|
||||||
commit: commit || "development",
|
commit,
|
||||||
host: args.host || (args.auth === AuthType.Password && typeof args.cert !== "undefined" ? "0.0.0.0" : "localhost"),
|
host: args.host || (args.auth === AuthType.Password && typeof args.cert !== "undefined" ? "0.0.0.0" : "localhost"),
|
||||||
password: originalPassword ? hash(originalPassword) : undefined,
|
password: originalPassword ? hash(originalPassword) : undefined,
|
||||||
port: typeof args.port !== "undefined" ? args.port : process.env.PORT ? parseInt(process.env.PORT, 10) : 8080,
|
port: typeof args.port !== "undefined" ? args.port : process.env.PORT ? parseInt(process.env.PORT, 10) : 8080,
|
||||||
@@ -68,20 +78,9 @@ const main = async (args: Args): Promise<void> => {
|
|||||||
|
|
||||||
ipcMain().onDispose(() => httpServer.dispose())
|
ipcMain().onDispose(() => httpServer.dispose())
|
||||||
|
|
||||||
logger.info(`code-server ${require("../../package.json").version}`)
|
logger.info(`code-server ${version} ${commit}`)
|
||||||
|
|
||||||
let sshPort = ""
|
|
||||||
if (!args["disable-ssh"] && options.sshHostKey) {
|
|
||||||
const sshProvider = httpServer.registerHttpProvider("/ssh", SshProvider, options.sshHostKey as string)
|
|
||||||
try {
|
|
||||||
sshPort = await sshProvider.listen()
|
|
||||||
} catch (error) {
|
|
||||||
logger.warn(`SSH server: ${error.message}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const serverAddress = await httpServer.listen()
|
const serverAddress = await httpServer.listen()
|
||||||
logger.info(`Server listening on ${serverAddress}`)
|
logger.info(`HTTP server listening on ${serverAddress}`)
|
||||||
|
|
||||||
if (auth === AuthType.Password && !process.env.PASSWORD) {
|
if (auth === AuthType.Password && !process.env.PASSWORD) {
|
||||||
logger.info(` - Password is ${originalPassword}`)
|
logger.info(` - Password is ${originalPassword}`)
|
||||||
@@ -105,19 +104,29 @@ const main = async (args: Args): Promise<void> => {
|
|||||||
logger.info(" - Not serving HTTPS")
|
logger.info(" - Not serving HTTPS")
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info(` - Automatic updates are ${update.enabled ? "enabled" : "disabled"}`)
|
logger.info(`Automatic updates are ${update.enabled ? "enabled" : "disabled"}`)
|
||||||
|
|
||||||
if (sshPort) {
|
let sshPort: number | undefined
|
||||||
logger.info(` - SSH Server - Listening :${sshPort}`)
|
if (!args["disable-ssh"] && options.sshHostKey) {
|
||||||
|
const sshProvider = httpServer.registerHttpProvider("/ssh", SshProvider, options.sshHostKey as string)
|
||||||
|
try {
|
||||||
|
sshPort = await sshProvider.listen()
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn(`SSH server: ${error.message}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof sshPort !== "undefined") {
|
||||||
|
logger.info(`SSH server listening on localhost:${sshPort}`)
|
||||||
} else {
|
} else {
|
||||||
logger.info(" - SSH Server - Disabled")
|
logger.info("SSH server disabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (serverAddress && !options.socket && args.open) {
|
if (serverAddress && !options.socket && args.open) {
|
||||||
// The web socket doesn't seem to work if browsing with 0.0.0.0.
|
// The web socket doesn't seem to work if browsing with 0.0.0.0.
|
||||||
const openAddress = serverAddress.replace(/:\/\/0.0.0.0/, "://localhost")
|
const openAddress = serverAddress.replace(/:\/\/0.0.0.0/, "://localhost")
|
||||||
await open(openAddress).catch(console.error)
|
await open(openAddress).catch(console.error)
|
||||||
logger.info(` - Opened ${openAddress}`)
|
logger.info(`Opened ${openAddress}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,7 +141,7 @@ const tryParse = (): Args => {
|
|||||||
|
|
||||||
const args = tryParse()
|
const args = tryParse()
|
||||||
if (args.help) {
|
if (args.help) {
|
||||||
console.log("code-server", require("../../package.json").version)
|
console.log("code-server", version, commit)
|
||||||
console.log("")
|
console.log("")
|
||||||
console.log(`Usage: code-server [options] [path]`)
|
console.log(`Usage: code-server [options] [path]`)
|
||||||
console.log("")
|
console.log("")
|
||||||
@@ -141,14 +150,14 @@ if (args.help) {
|
|||||||
console.log("", description)
|
console.log("", description)
|
||||||
})
|
})
|
||||||
} else if (args.version) {
|
} else if (args.version) {
|
||||||
const version = require("../../package.json").version
|
|
||||||
if (args.json) {
|
if (args.json) {
|
||||||
console.log({
|
console.log({
|
||||||
codeServer: version,
|
codeServer: version,
|
||||||
|
commit,
|
||||||
vscode: require("../../lib/vscode/package.json").version,
|
vscode: require("../../lib/vscode/package.json").version,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
console.log(version)
|
console.log(version, commit)
|
||||||
}
|
}
|
||||||
process.exit(0)
|
process.exit(0)
|
||||||
} else if (args["list-extensions"] || args["install-extension"] || args["uninstall-extension"]) {
|
} else if (args["list-extensions"] || args["install-extension"] || args["uninstall-extension"]) {
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ export class SshProvider extends HttpProvider {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async listen(): Promise<string> {
|
public async listen(): Promise<number> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.sshServer.once("error", reject)
|
this.sshServer.once("error", reject)
|
||||||
this.sshServer.listen(() => {
|
this.sshServer.listen(() => {
|
||||||
resolve(this.sshServer.address().port.toString())
|
resolve(this.sshServer.address().port)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user