From c595d3d1f134c6f5437af51095f3da676c56c83a Mon Sep 17 00:00:00 2001 From: Michael Liarakos Date: Fri, 10 May 2024 22:23:30 -0400 Subject: [PATCH 1/4] use properties and environment when fetching metals --- .../metals-languageclient/src/fetchMetals.ts | 18 +++++++++++++++--- packages/metals-vscode/src/extension.ts | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/metals-languageclient/src/fetchMetals.ts b/packages/metals-languageclient/src/fetchMetals.ts index 940c2944..74d80d6f 100644 --- a/packages/metals-languageclient/src/fetchMetals.ts +++ b/packages/metals-languageclient/src/fetchMetals.ts @@ -4,6 +4,7 @@ import { JavaConfig } from "./getJavaConfig"; interface FetchMetalsOptions { serverVersion: string; + serverProperties: string[]; javaConfig: JavaConfig; } @@ -17,15 +18,19 @@ interface PackedChildPromise { export async function fetchMetals({ serverVersion, - javaConfig: { coursier }, + serverProperties, + javaConfig: { javaOptions, coursier, extraEnv }, }: FetchMetalsOptions): Promise { const serverDependency = calcServerDependency(serverVersion); + const fetchProperties = serverProperties.filter((p) => !p.startsWith("-agentlib")); + const javaArgs = javaOptions.concat(fetchProperties).map((p) => `-J${p}`); + const coursierArgs = [ "fetch", "-p", "--ttl", - // Use infinite ttl to avoid redunant "Checking..." logs when using SNAPSHOT + // Use infinite ttl to avoid redundant "Checking..." logs when using SNAPSHOT // versions. Metals SNAPSHOT releases are effectively immutable since we // never publish the same version twice. "Inf", @@ -39,7 +44,14 @@ export async function fetchMetals({ "-p", ]; - return { promise: spawn(coursier, coursierArgs) }; + const environment = { + env: { + ...process.env, + ...extraEnv + } + }; + + return { promise: spawn(coursier, javaArgs.concat(coursierArgs), environment) }; } export function calcServerDependency(serverVersion: string): string { diff --git a/packages/metals-vscode/src/extension.ts b/packages/metals-vscode/src/extension.ts index 0c891e6d..1ba0cc35 100644 --- a/packages/metals-vscode/src/extension.ts +++ b/packages/metals-vscode/src/extension.ts @@ -230,6 +230,7 @@ async function fetchAndLaunchMetals( const fetchProcess = fetchMetals({ serverVersion, + serverProperties, javaConfig, }); From 93cfeb2ea79f97c6ab68c1a29b7a181f5125fb40 Mon Sep 17 00:00:00 2001 From: Michael Liarakos Date: Fri, 10 May 2024 22:31:10 -0400 Subject: [PATCH 2/4] format --- packages/metals-languageclient/src/fetchMetals.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/metals-languageclient/src/fetchMetals.ts b/packages/metals-languageclient/src/fetchMetals.ts index 74d80d6f..15f4f419 100644 --- a/packages/metals-languageclient/src/fetchMetals.ts +++ b/packages/metals-languageclient/src/fetchMetals.ts @@ -23,7 +23,9 @@ export async function fetchMetals({ }: FetchMetalsOptions): Promise { const serverDependency = calcServerDependency(serverVersion); - const fetchProperties = serverProperties.filter((p) => !p.startsWith("-agentlib")); + const fetchProperties = serverProperties.filter( + (p) => !p.startsWith("-agentlib") + ); const javaArgs = javaOptions.concat(fetchProperties).map((p) => `-J${p}`); const coursierArgs = [ @@ -47,11 +49,13 @@ export async function fetchMetals({ const environment = { env: { ...process.env, - ...extraEnv - } + ...extraEnv, + }, }; - return { promise: spawn(coursier, javaArgs.concat(coursierArgs), environment) }; + return { + promise: spawn(coursier, javaArgs.concat(coursierArgs), environment), + }; } export function calcServerDependency(serverVersion: string): string { From 43258c9dc66ef0b1e0b3f3d1b89c3d0e6a693ac5 Mon Sep 17 00:00:00 2001 From: Michael Liarakos Date: Sun, 12 May 2024 10:52:04 -0400 Subject: [PATCH 3/4] add agentlib warning message --- packages/metals-languageclient/src/fetchMetals.ts | 13 ++++++++++++- packages/metals-vscode/src/extension.ts | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/metals-languageclient/src/fetchMetals.ts b/packages/metals-languageclient/src/fetchMetals.ts index 15f4f419..30423f73 100644 --- a/packages/metals-languageclient/src/fetchMetals.ts +++ b/packages/metals-languageclient/src/fetchMetals.ts @@ -1,11 +1,13 @@ import * as semver from "semver"; import { ChildProcessPromise, spawn } from "promisify-child-process"; import { JavaConfig } from "./getJavaConfig"; +import { OutputChannel } from "./interfaces/OutputChannel"; interface FetchMetalsOptions { serverVersion: string; serverProperties: string[]; javaConfig: JavaConfig; + outputChannel: OutputChannel; } /** @@ -20,15 +22,24 @@ export async function fetchMetals({ serverVersion, serverProperties, javaConfig: { javaOptions, coursier, extraEnv }, + outputChannel, }: FetchMetalsOptions): Promise { const serverDependency = calcServerDependency(serverVersion); const fetchProperties = serverProperties.filter( (p) => !p.startsWith("-agentlib") ); + if (fetchProperties.length != serverProperties.length) { + outputChannel.appendLine( + 'Ignoring "-agentlib" option when fetching Metals with Coursier' + ); + } + + // Convert Java properties to the "-J" argument form used by Coursier const javaArgs = javaOptions.concat(fetchProperties).map((p) => `-J${p}`); const coursierArgs = [ + ...javaArgs, "fetch", "-p", "--ttl", @@ -54,7 +65,7 @@ export async function fetchMetals({ }; return { - promise: spawn(coursier, javaArgs.concat(coursierArgs), environment), + promise: spawn(coursier, coursierArgs, environment), }; } diff --git a/packages/metals-vscode/src/extension.ts b/packages/metals-vscode/src/extension.ts index 1ba0cc35..fd2352e3 100644 --- a/packages/metals-vscode/src/extension.ts +++ b/packages/metals-vscode/src/extension.ts @@ -232,6 +232,7 @@ async function fetchAndLaunchMetals( serverVersion, serverProperties, javaConfig, + outputChannel }); const title = `Downloading Metals v${serverVersion}`; From 405492cf0f00f5850b1378ed09654a6d4dd08ad1 Mon Sep 17 00:00:00 2001 From: Michael Liarakos Date: Sun, 12 May 2024 10:55:41 -0400 Subject: [PATCH 4/4] format --- packages/metals-vscode/src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/metals-vscode/src/extension.ts b/packages/metals-vscode/src/extension.ts index fd2352e3..032b570a 100644 --- a/packages/metals-vscode/src/extension.ts +++ b/packages/metals-vscode/src/extension.ts @@ -232,7 +232,7 @@ async function fetchAndLaunchMetals( serverVersion, serverProperties, javaConfig, - outputChannel + outputChannel, }); const title = `Downloading Metals v${serverVersion}`;