From 796ee2bf3c8e9c999fdf51110dac83cb88b5d8d0 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Fri, 18 Nov 2022 18:52:52 -0800 Subject: [PATCH] chore: pull more strings from the product.json (#166769) Fixes the bulk of https://github.com/microsoft/vscode-cli/issues/560 --- build/azure-pipelines/cli/prepare.js | 16 +++++++- build/azure-pipelines/cli/prepare.ts | 16 +++++++- cli/Cargo.lock | 21 ++++++++++ cli/Cargo.toml | 1 + cli/src/auth.rs | 4 +- cli/src/bin/code/main.rs | 7 +--- cli/src/commands/args.rs | 44 ++++++++++++--------- cli/src/commands/update.rs | 5 ++- cli/src/commands/version.rs | 6 +-- cli/src/constants.rs | 55 ++++++++++++++++++++------ cli/src/desktop/version_manager.rs | 19 +++++---- cli/src/lib.rs | 2 +- cli/src/options.rs | 59 +++++++++++++++------------- cli/src/tunnels.rs | 6 +-- cli/src/tunnels/code_server.rs | 11 ++++-- cli/src/tunnels/control_server.rs | 16 ++++++-- cli/src/tunnels/legal.rs | 9 +++-- cli/src/tunnels/service_linux.rs | 4 +- cli/src/tunnels/service_macos.rs | 4 +- cli/src/tunnels/service_windows.rs | 3 +- cli/src/util/command.rs | 2 +- cli/src/util/errors.rs | 15 +++++-- cli/src/util/input.rs | 2 +- cli/src/util/prereqs.rs | 16 +++++--- package.json | 2 +- 25 files changed, 229 insertions(+), 116 deletions(-) diff --git a/build/azure-pipelines/cli/prepare.js b/build/azure-pipelines/cli/prepare.js index df5d474b18f..2fcf292d4bb 100644 --- a/build/azure-pipelines/cli/prepare.js +++ b/build/azure-pipelines/cli/prepare.js @@ -44,7 +44,9 @@ const setLauncherEnvironmentVars = () => { ['VSCODE_CLI_QUALITY', product.quality], ['VSCODE_CLI_NAME_SHORT', product.nameShort], ['VSCODE_CLI_NAME_LONG', product.nameLong], + ['VSCODE_CLI_QUALITYLESS_PRODUCT_NAME', product.nameLong.replace(/ - [a-z]+$/i, '')], ['VSCODE_CLI_APPLICATION_NAME', product.applicationName], + ['VSCODE_CLI_EDITOR_WEB_URL', product.editorWebUrl], ['VSCODE_CLI_COMMIT', commit], [ 'VSCODE_CLI_WIN32_APP_IDS', @@ -52,6 +54,18 @@ const setLauncherEnvironmentVars = () => { .filter(([key]) => /^win32.*AppId$/.test(key)) .map(([, value]) => String(value).replace(/[{}]/g, '')))), ], + [ + 'VSCODE_CLI_NAME_LONG_MAP', + !isOSS && JSON.stringify(makeQualityMap(json => json.nameLong)), + ], + [ + 'VSCODE_CLI_APPLICATION_NAME_MAP', + !isOSS && JSON.stringify(makeQualityMap(json => json.applicationName)), + ], + [ + 'VSCODE_CLI_SERVER_NAME_MAP', + !isOSS && JSON.stringify(makeQualityMap(json => json.serverApplicationName)), + ], [ 'VSCODE_CLI_QUALITY_DOWNLOAD_URIS', !isOSS && JSON.stringify(makeQualityMap(json => json.downloadUrl)), @@ -67,4 +81,4 @@ const setLauncherEnvironmentVars = () => { if (require.main === module) { setLauncherEnvironmentVars(); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZXBhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxxREFBa0Q7QUFDbEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixxREFBcUQ7QUFFckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFN0UsSUFBSSxlQUF1QixDQUFDO0FBQzVCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO0FBQ2xGLElBQUksS0FBSyxFQUFFO0lBQ1YsZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0NBQ2xEO0tBQU07SUFDTixlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0NBQzFGO0FBR0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDMUMsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxD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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZXBhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxxREFBa0Q7QUFDbEQseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixxREFBcUQ7QUFFckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFN0UsSUFBSSxlQUF1QixDQUFDO0FBQzVCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO0FBQ2xGLElBQUksS0FBSyxFQUFFO0lBQ1YsZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0NBQ2xEO0tBQU07SUFDTixlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0NBQzFGO0FBR0QsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDMUMsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxD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 \ No newline at end of file diff --git a/build/azure-pipelines/cli/prepare.ts b/build/azure-pipelines/cli/prepare.ts index a9c172fa017..eb219c110c7 100644 --- a/build/azure-pipelines/cli/prepare.ts +++ b/build/azure-pipelines/cli/prepare.ts @@ -48,7 +48,9 @@ const setLauncherEnvironmentVars = () => { ['VSCODE_CLI_QUALITY', product.quality], ['VSCODE_CLI_NAME_SHORT', product.nameShort], ['VSCODE_CLI_NAME_LONG', product.nameLong], + ['VSCODE_CLI_QUALITYLESS_PRODUCT_NAME', product.nameLong.replace(/ - [a-z]+$/i, '')], ['VSCODE_CLI_APPLICATION_NAME', product.applicationName], + ['VSCODE_CLI_EDITOR_WEB_URL', product.editorWebUrl], ['VSCODE_CLI_COMMIT', commit], [ 'VSCODE_CLI_WIN32_APP_IDS', @@ -58,13 +60,25 @@ const setLauncherEnvironmentVars = () => { .map(([, value]) => String(value).replace(/[{}]/g, ''))), ), ], + [ + 'VSCODE_CLI_NAME_LONG_MAP', + !isOSS && JSON.stringify(makeQualityMap(json => json.nameLong)), + ], + [ + 'VSCODE_CLI_APPLICATION_NAME_MAP', + !isOSS && JSON.stringify(makeQualityMap(json => json.applicationName)), + ], + [ + 'VSCODE_CLI_SERVER_NAME_MAP', + !isOSS && JSON.stringify(makeQualityMap(json => json.serverApplicationName)), + ], [ 'VSCODE_CLI_QUALITY_DOWNLOAD_URIS', !isOSS && JSON.stringify(makeQualityMap(json => json.downloadUrl)), ], ]); - console.log(JSON.stringify([...vars].reduce((obj, kv) => ({...obj, [kv[0]]: kv[1]}), {}))); + console.log(JSON.stringify([...vars].reduce((obj, kv) => ({ ...obj, [kv[0]]: kv[1] }), {}))); for (const [key, value] of vars) { if (value) { diff --git a/cli/Cargo.lock b/cli/Cargo.lock index 57fba7fbe05..4b7ab3e3c23 100644 --- a/cli/Cargo.lock +++ b/cli/Cargo.lock @@ -232,6 +232,7 @@ dependencies = [ "chrono", "clap", "clap_lex", + "const_format", "dialoguer", "dirs 4.0.0", "flate2", @@ -300,6 +301,26 @@ dependencies = [ "winapi", ] +[[package]] +name = "const_format" +version = "0.2.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7309d9b4d3d2c0641e018d449232f2e28f1b22933c137f157d3dbc14228b8c0e" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f47bf7270cf70d370f8f98c1abb6d2d4cf60a6845d30e05bfb90c6568650" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "core-foundation" version = "0.9.3" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index ff7e5c071b6..864ab0089f3 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -46,6 +46,7 @@ clap_lex = "0.2" url = "2.3" async-trait = "0.1" log = "0.4" +const_format = "0.2" [target.'cfg(windows)'.dependencies] windows-service = "0.5" diff --git a/cli/src/auth.rs b/cli/src/auth.rs index 55bc56c4817..e6f0e847e63 100644 --- a/cli/src/auth.rs +++ b/cli/src/auth.rs @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ use crate::{ - constants::get_default_user_agent, + constants::{get_default_user_agent, PRODUCT_NAME_LONG}, info, log, state::{LauncherPaths, PersistedState}, trace, @@ -500,7 +500,7 @@ impl Auth { } let provider = prompt_options( - "How would you like to log in to VS Code?", + format!("How would you like to log in to {}?", PRODUCT_NAME_LONG), &[AuthProvider::Microsoft, AuthProvider::Github], )?; diff --git a/cli/src/bin/code/main.rs b/cli/src/bin/code/main.rs index 5353f5b9121..e9e440bafd9 100644 --- a/cli/src/bin/code/main.rs +++ b/cli/src/bin/code/main.rs @@ -157,12 +157,7 @@ async fn start_code(context: CommandContext, args: Vec) -> Result v, None => "dev" }, )] pub struct IntegratedCli { @@ -53,7 +61,7 @@ pub struct CliCore { #[clap( help_template = TEMPLATE, long_about = None, - name = "Visual Studio Code CLI", + name = CLI_NAME, version = match constants::VSCODE_CLI_VERSION { Some(v) => v, None => "dev" }, )] pub struct StandaloneCli { @@ -115,7 +123,7 @@ impl<'a> From<&'a CliCore> for CodeServerArgs { #[derive(Subcommand, Debug, Clone)] pub enum StandaloneCommands { - /// Updates the VS Code CLI. + /// Updates the CLI. Update(StandaloneUpdateArgs), } @@ -133,14 +141,14 @@ pub enum Commands { /// Run `code tunnel --help` for more usage info. Tunnel(TunnelArgs), - /// Manage VS Code extensions. + /// Manage editor extensions. #[clap(name = "ext")] Extension(ExtensionArgs), /// Print process usage and diagnostics information. Status, - /// Changes the version of VS Code you're using. + /// Changes the version of the editor you're using. Version(VersionArgs), } @@ -251,16 +259,16 @@ pub struct VersionArgs { #[derive(Subcommand, Debug, Clone)] pub enum VersionSubcommand { - /// Switches the instance of VS Code in use. + /// Switches the version of the editor in use. Use(UseVersionArgs), - /// Shows the currently configured VS Code version. + /// Shows the currently configured editor version. Show, } #[derive(Args, Debug, Clone)] pub struct UseVersionArgs { - /// The version of VS Code you want to use. Can be "stable", "insiders", + /// The version of the editor you want to use. Can be "stable", "insiders", /// a version number, or an absolute path to an existing install. #[clap(value_name = "stable | insiders | x.y.z | path")] pub name: String, @@ -346,7 +354,7 @@ impl EditorOptions { } } -/// Arguments applicable whenever VS Code desktop is launched +/// Arguments applicable whenever the desktop editor is launched #[derive(Args, Debug, Default, Clone)] pub struct DesktopCodeOptions { /// Set the root path for extensions. @@ -354,11 +362,11 @@ pub struct DesktopCodeOptions { pub extensions_dir: Option, /// Specifies the directory that user data is kept in. Can be used to - /// open multiple distinct instances of Code. + /// open multiple distinct instances of the editor. #[clap(long, value_name = "dir")] pub user_data_dir: Option, - /// Sets the VS Code version to use for this command. The preferred version + /// Sets the editor version to use for this command. The preferred version /// can be persisted with `code version use `. Can be "stable", /// "insiders", a version number, or an absolute path to an existing install. #[clap(long, value_name = "stable | insiders | x.y.z | path")] @@ -386,7 +394,7 @@ impl DesktopCodeOptions { #[derive(Args, Debug, Default, Clone)] pub struct GlobalOptions { - /// Directory where CLI metadata, such as VS Code installations, should be stored. + /// Directory where CLI metadata should be stored. #[clap(long, env = "VSCODE_CLI_DATA_DIR", global = true)] pub cli_data_dir: Option, @@ -464,7 +472,7 @@ pub struct EditorTroubleshooting { #[clap(long, value_name = "memory")] pub max_memory: Option, - /// Shows all telemetry events which VS code collects. + /// Shows all telemetry events which the editor collects. #[clap(long)] pub telemetry: bool, } diff --git a/cli/src/commands/update.rs b/cli/src/commands/update.rs index 2100972f445..80a57b12bb1 100644 --- a/cli/src/commands/update.rs +++ b/cli/src/commands/update.rs @@ -6,6 +6,7 @@ use indicatif::ProgressBar; use crate::{ + constants::PRODUCT_NAME_LONG, self_update::SelfUpdate, update_service::UpdateService, util::{errors::AnyError, http::ReqwestSimpleHttp, input::ProgressBarReporter}, @@ -23,8 +24,8 @@ pub async fn update(ctx: CommandContext, args: StandaloneUpdateArgs) -> Result Result { } fn print_now_using(log: &log::Logger, version: &RequestedVersion, path: &Path) { - log.result(&format!( - "Now using VS Code {} from {}", - version, - path.display() - )); + log.result(&format!("Now using {} from {}", version, path.display())); } diff --git a/cli/src/constants.rs b/cli/src/constants.rs index 69f4fcc5d8c..0daa20e60cf 100644 --- a/cli/src/constants.rs +++ b/cli/src/constants.rs @@ -5,6 +5,7 @@ use std::collections::HashMap; +use const_format::concatcp; use lazy_static::lazy_static; use crate::options::Quality; @@ -28,13 +29,30 @@ pub const VSCODE_CLI_UPDATE_ENDPOINT: Option<&'static str> = pub const TUNNEL_SERVICE_USER_AGENT_ENV_VAR: &str = "TUNNEL_SERVICE_USER_AGENT"; -const MAYBE_APPLICATION_NAME: Option<&'static str> = option_env!("VSCODE_CLI_APPLICATION_NAME"); -const MAYBE_PRODUCT_NAME_LONG: Option<&'static str> = option_env!("VSCODE_CLI_NAME_LONG"); -// JSON map of quality names to arrays of app IDs used for them, for example, `{"stable":["ABC123"]}` -const MAYBE_CLI_WIN32_APP_IDS: Option<&'static str> = option_env!("VSCODE_CLI_WIN32_APP_IDS"); -// JSON map of quality names to download URIs -const MAYBE_CLI_QUALITY_DOWNLOAD_URIS: Option<&'static str> = - option_env!("VSCODE_CLI_QUALITY_DOWNLOAD_URIS"); +/// Application name as it appears on the CLI. +pub const APPLICATION_NAME: &str = match option_env!("VSCODE_CLI_APPLICATION_NAME") { + Some(n) => n, + None => "code", +}; + +/// Full name of the product with its version. +pub const PRODUCT_NAME_LONG: &str = match option_env!("VSCODE_CLI_NAME_LONG") { + Some(n) => n, + None => "Code - OSS", +}; + +/// Name of the application without quality information. +pub const QUALITYLESS_PRODUCT_NAME: &str = + match option_env!("VSCODE_CLI_QUALITYLESS_PRODUCT_NAME") { + Some(n) => n, + None => "Code", + }; + +/// Name of the application without quality information. +pub const QUALITYLESS_SERVER_NAME: &str = concatcp!(QUALITYLESS_PRODUCT_NAME, " Server"); + +/// Web URL the editor is hosted at. For VS Code, this is vscode.dev. +pub const EDITOR_WEB_URL: Option<&'static str> = option_env!("VSCODE_CLI_EDITOR_WEB_URL"); pub fn get_default_user_agent() -> String { format!( @@ -49,11 +67,24 @@ lazy_static! { Ok(ua) if !ua.is_empty() => format!("{} {}", ua, get_default_user_agent()), _ => get_default_user_agent(), }; + + /// Map of quality names to arrays of app IDs used for them, for example, `{"stable":["ABC123"]}` pub static ref WIN32_APP_IDS: Option>> = - MAYBE_CLI_WIN32_APP_IDS.and_then(|s| serde_json::from_str(s).unwrap()); + option_env!("VSCODE_CLI_WIN32_APP_IDS").and_then(|s| serde_json::from_str(s).unwrap()); + + /// Map of quality names to desktop download URIs pub static ref QUALITY_DOWNLOAD_URIS: Option> = - MAYBE_CLI_QUALITY_DOWNLOAD_URIS.and_then(|s| serde_json::from_str(s).unwrap()); - pub static ref PRODUCT_NAME_LONG: &'static str = - MAYBE_PRODUCT_NAME_LONG.unwrap_or("Code - OSS"); - pub static ref APPLICATION_NAME: &'static str = MAYBE_APPLICATION_NAME.unwrap_or("code"); + option_env!("VSCODE_CLI_QUALITY_DOWNLOAD_URIS").and_then(|s| serde_json::from_str(s).unwrap()); + + /// Map of qualities to the long name of the app in that quality + pub static ref PRODUCT_NAME_LONG_MAP: Option> = + option_env!("VSCODE_CLI_NAME_LONG_MAP").and_then(|s| serde_json::from_str(s).unwrap()); + + /// Map of qualities to the application name + pub static ref APPLICATION_NAME_MAP: Option> = + option_env!("VSCODE_CLI_APPLICATION_NAME_MAP").and_then(|s| serde_json::from_str(s).unwrap()); + + /// Map of qualities to the server name + pub static ref SERVER_NAME_MAP: Option> = + option_env!("VSCODE_CLI_SERVER_NAME_MAP").and_then(|s| serde_json::from_str(s).unwrap()); } diff --git a/cli/src/desktop/version_manager.rs b/cli/src/desktop/version_manager.rs index d4739604567..e08b42aa982 100644 --- a/cli/src/desktop/version_manager.rs +++ b/cli/src/desktop/version_manager.rs @@ -14,7 +14,7 @@ use regex::Regex; use serde::{Deserialize, Serialize}; use crate::{ - constants::QUALITY_DOWNLOAD_URIS, + constants::{QUALITYLESS_PRODUCT_NAME, QUALITY_DOWNLOAD_URIS}, log, options::{self, Quality}, state::{LauncherPaths, PersistedState}, @@ -249,7 +249,10 @@ impl CodeVersionManager { /// Shows a nice UI prompt to users asking them if they want to install the /// requested version. pub fn prompt_to_install(version: &RequestedVersion) { - println!("No installation of VS Code {} was found.", version); + println!( + "No installation of {} {} was found.", + QUALITYLESS_PRODUCT_NAME, version + ); if let RequestedVersion::Quality(quality) = version { if let Some(uri) = QUALITY_DOWNLOAD_URIS.as_ref().and_then(|m| m.get(quality)) { @@ -265,14 +268,14 @@ pub fn prompt_to_install(version: &RequestedVersion) { } println!(); - println!("If you already installed VS Code and we didn't detect it, run `{} --install-dir /path/to/installation`", version.get_command()); + println!("If you already installed {} and we didn't detect it, run `{} --install-dir /path/to/installation`", QUALITYLESS_PRODUCT_NAME, version.get_command()); } #[cfg(target_os = "macos")] fn detect_installed_program(log: &log::Logger, quality: Quality) -> io::Result> { // easy, fast detection for where apps are usually installed let mut probable = PathBuf::from("/Applications"); - let app_name = quality.get_macos_app_name(); + let app_name = quality.get_long_name(); probable.push(format!("{}.app", app_name)); if probable.exists() { probable.extend(["Contents/Resources", "app", "bin", "code"]); @@ -378,11 +381,7 @@ fn detect_installed_program(_log: &log::Logger, quality: Quality) -> io::Result< [ location.as_str(), "bin", - match quality { - Quality::Exploration => "code-exploration.cmd", - Quality::Insiders => "code-insiders.cmd", - Quality::Stable => "code.cmd", - }, + &format!("{}.cmd", quality.get_application_name()), ] .iter() .collect(), @@ -407,7 +406,7 @@ fn detect_installed_program(log: &log::Logger, quality: Quality) -> io::Result &'static str { match self { Quality::Insiders => "insiders", @@ -27,7 +29,7 @@ impl Quality { } } - /// Uppercased display name for humans + /// Uppercased quality display name for humans pub fn get_capitalized_name(&self) -> &'static str { match self { Quality::Insiders => "Insiders", @@ -36,37 +38,38 @@ impl Quality { } } - pub fn get_macos_app_name(&self) -> &'static str { - match self { - Quality::Insiders => "Visual Studio Code - Insiders", - Quality::Exploration => "Visual Studio Code - Exploration", - Quality::Stable => "Visual Studio Code", - } + /// Product long name + pub fn get_long_name(&self) -> &'static str { + PRODUCT_NAME_LONG_MAP + .as_ref() + .and_then(|m| m.get(self)) + .map(|s| s.as_str()) + .unwrap_or("Code - OSS") } - pub fn get_commandline_name(&self) -> &'static str { - match self { - Quality::Insiders => "code-insiders", - Quality::Exploration => "code-exploration", - Quality::Stable => "code", - } + /// Product application name + pub fn get_application_name(&self) -> &'static str { + APPLICATION_NAME_MAP + .as_ref() + .and_then(|m| m.get(self)) + .map(|s| s.as_str()) + .unwrap_or("code") } - #[cfg(target_os = "windows")] - pub fn server_entrypoint(&self) -> &'static str { - match self { - Quality::Insiders => "code-server-insiders.cmd", - Quality::Exploration => "code-server-exploration.cmd", - Quality::Stable => "code-server.cmd", - } - } - #[cfg(not(target_os = "windows"))] - pub fn server_entrypoint(&self) -> &'static str { - match self { - Quality::Insiders => "code-server-insiders", - Quality::Exploration => "code-server-exploration", - Quality::Stable => "code-server", + /// Server application name + pub fn server_entrypoint(&self) -> String { + let mut server_name = SERVER_NAME_MAP + .as_ref() + .and_then(|m| m.get(self)) + .map(|s| s.as_str()) + .unwrap_or("code-server-oss") + .to_string(); + + if cfg!(windows) { + server_name.push_str(".cmd"); } + + server_name } } diff --git a/cli/src/tunnels.rs b/cli/src/tunnels.rs index d80ad637d3e..011127e02b2 100644 --- a/cli/src/tunnels.rs +++ b/cli/src/tunnels.rs @@ -8,7 +8,6 @@ pub mod dev_tunnels; pub mod legal; pub mod paths; -mod socket_signal; mod control_server; mod name_generator; mod port_forwarder; @@ -19,10 +18,11 @@ mod server_bridge; mod service; #[cfg(target_os = "linux")] mod service_linux; -#[cfg(target_os = "windows")] -mod service_windows; #[cfg(target_os = "macos")] mod service_macos; +#[cfg(target_os = "windows")] +mod service_windows; +mod socket_signal; pub use control_server::serve; pub use service::{ diff --git a/cli/src/tunnels/code_server.rs b/cli/src/tunnels/code_server.rs index 17e34e1804d..d720edb73f3 100644 --- a/cli/src/tunnels/code_server.rs +++ b/cli/src/tunnels/code_server.rs @@ -3,6 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ use super::paths::{InstalledServer, LastUsedServers, ServerPaths}; +use crate::constants::{APPLICATION_NAME, QUALITYLESS_PRODUCT_NAME, QUALITYLESS_SERVER_NAME}; use crate::options::{Quality, TelemetryLevel}; use crate::state::LauncherPaths; use crate::update_service::{ @@ -334,7 +335,8 @@ async fn download_server( info!( log, - "Downloading VS Code server -> {}", + "Downloading {} server -> {}", + QUALITYLESS_PRODUCT_NAME, save_path.display() ); @@ -445,7 +447,7 @@ impl<'a, Http: SimpleHttp + Send + Sync + Clone + 'static> ServerBuilder<'a, Htt }; info!(self.logger, "Found running server (pid={})", pid); if !Path::new(&self.server_paths.logfile).exists() { - warning!(self.logger, "VS Code Server is running but its logfile is missing. Don't delete the VS Code Server manually, run the command 'code-server prune'."); + warning!(self.logger, "{} Server is running but its logfile is missing. Don't delete the {} Server manually, run the command '{} prune'.", QUALITYLESS_PRODUCT_NAME, QUALITYLESS_PRODUCT_NAME, APPLICATION_NAME); return Ok(None); } @@ -479,7 +481,10 @@ impl<'a, Http: SimpleHttp + Send + Sync + Clone + 'static> ServerBuilder<'a, Htt /// Ensures the server is set up in the configured directory. pub async fn setup(&self) -> Result<(), AnyError> { - debug!(self.logger, "Installing and setting up VS Code Server..."); + debug!( + self.logger, + "Installing and setting up {}...", QUALITYLESS_SERVER_NAME + ); check_and_create_dir(&self.server_paths.server_dir).await?; install_server_if_needed( self.logger, diff --git a/cli/src/tunnels/control_server.rs b/cli/src/tunnels/control_server.rs index e4416b08a75..c7f033d1b01 100644 --- a/cli/src/tunnels/control_server.rs +++ b/cli/src/tunnels/control_server.rs @@ -3,7 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ use crate::commands::tunnels::ShutdownSignal; -use crate::constants::{CONTROL_PORT, PROTOCOL_VERSION, VSCODE_CLI_VERSION}; +use crate::constants::{ + CONTROL_PORT, EDITOR_WEB_URL, PROTOCOL_VERSION, QUALITYLESS_SERVER_NAME, VSCODE_CLI_VERSION, +}; use crate::log; use crate::self_update::SelfUpdate; use crate::state::LauncherPaths; @@ -131,7 +133,10 @@ pub struct ServerTermination { } fn print_listening(log: &log::Logger, tunnel_name: &str) { - debug!(log, "VS Code Server is listening for incoming connections"); + debug!( + log, + "{} is listening for incoming connections", QUALITYLESS_SERVER_NAME + ); let home_dir = dirs::home_dir().unwrap_or_else(|| PathBuf::from("")); let current_dir = env::current_dir().unwrap_or_else(|_| PathBuf::from("")); @@ -142,7 +147,12 @@ fn print_listening(log: &log::Logger, tunnel_name: &str) { current_dir }; - let mut addr = url::Url::parse("https://insiders.vscode.dev").unwrap(); + let base_web_url = match EDITOR_WEB_URL { + Some(u) => u, + None => return, + }; + + let mut addr = url::Url::parse(base_web_url).unwrap(); { let mut ps = addr.path_segments_mut().unwrap(); ps.push("tunnel"); diff --git a/cli/src/tunnels/legal.rs b/cli/src/tunnels/legal.rs index 947fd07e4cd..1f115222071 100644 --- a/cli/src/tunnels/legal.rs +++ b/cli/src/tunnels/legal.rs @@ -2,6 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +use crate::constants::PRODUCT_NAME_LONG; use crate::state::{LauncherPaths, PersistedState}; use crate::util::errors::{AnyError, MissingLegalConsent}; use crate::util::input::prompt_yn; @@ -46,10 +47,10 @@ pub fn require_consent( load.consented = Some(true); } Ok(false) => { - return Err(AnyError::from(MissingLegalConsent( - "Sorry you cannot use VS Code Server CLI without accepting the terms." - .to_string(), - ))) + return Err(AnyError::from(MissingLegalConsent(format!( + "Sorry you cannot use {} CLI without accepting the terms.", + PRODUCT_NAME_LONG + )))) } Err(e) => return Err(AnyError::from(MissingLegalConsent(e.to_string()))), } diff --git a/cli/src/tunnels/service_linux.rs b/cli/src/tunnels/service_linux.rs index 16dfaa0bd3a..2510ae56473 100644 --- a/cli/src/tunnels/service_linux.rs +++ b/cli/src/tunnels/service_linux.rs @@ -64,7 +64,7 @@ impl SystemdService { } fn service_name_string() -> String { - format!("{}-tunnel.service", &*APPLICATION_NAME) + format!("{}-tunnel.service", APPLICATION_NAME) } } @@ -186,7 +186,7 @@ fn write_systemd_service_file( [Install]\n\ WantedBy=multi-user.target\n\ ", - &*PRODUCT_NAME_LONG, + PRODUCT_NAME_LONG, exe.into_os_string().to_string_lossy(), args.join("\" \"") )?; diff --git a/cli/src/tunnels/service_macos.rs b/cli/src/tunnels/service_macos.rs index 95c43d0c511..47833dc31fa 100644 --- a/cli/src/tunnels/service_macos.rs +++ b/cli/src/tunnels/service_macos.rs @@ -23,7 +23,7 @@ use crate::{ }, }; -use super::{ServiceManager, service::tail_log_file}; +use super::{service::tail_log_file, ServiceManager}; pub struct LaunchdService { log: log::Logger, @@ -115,7 +115,7 @@ impl ServiceManager for LaunchdService { } fn get_service_label() -> String { - format!("com.visualstudio.{}.tunnel", &*APPLICATION_NAME) + format!("com.visualstudio.{}.tunnel", APPLICATION_NAME) } fn get_service_file_path() -> Result { diff --git a/cli/src/tunnels/service_windows.rs b/cli/src/tunnels/service_windows.rs index e4a18ff6c63..8c292db6f8d 100644 --- a/cli/src/tunnels/service_windows.rs +++ b/cli/src/tunnels/service_windows.rs @@ -21,6 +21,7 @@ use windows_service::{ use crate::{ commands::tunnels::ShutdownSignal, + constants::QUALITYLESS_PRODUCT_NAME, util::errors::{wrap, wrapdbg, AnyError, WindowsNeedsElevation}, }; use crate::{ @@ -64,7 +65,7 @@ impl CliServiceManager for WindowsService { let mut service_info = ServiceInfo { name: OsString::from(SERVICE_NAME), - display_name: OsString::from("VS Code Tunnel"), + display_name: OsString::from(format!("{} Tunnel", QUALITYLESS_PRODUCT_NAME)), service_type: SERVICE_TYPE, start_type: ServiceStartType::AutoStart, error_control: ServiceErrorControl::Normal, diff --git a/cli/src/util/command.rs b/cli/src/util/command.rs index 7e3192b6399..c0434b10647 100644 --- a/cli/src/util/command.rs +++ b/cli/src/util/command.rs @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ use super::errors::{wrap, AnyError, CommandFailed, WrappedError}; -use std::{ffi::OsStr, process::Stdio, borrow::Cow}; +use std::{borrow::Cow, ffi::OsStr, process::Stdio}; use tokio::process::Command; pub async fn capture_command_and_check_status( diff --git a/cli/src/util/errors.rs b/cli/src/util/errors.rs index 9c3a1de7b09..2fc262f76dd 100644 --- a/cli/src/util/errors.rs +++ b/cli/src/util/errors.rs @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ use std::fmt::Display; -use crate::constants::CONTROL_PORT; +use crate::constants::{APPLICATION_NAME, CONTROL_PORT, QUALITYLESS_PRODUCT_NAME}; // Wraps another error with additional info. #[derive(Debug, Clone)] @@ -282,8 +282,11 @@ impl std::fmt::Display for NoInstallInUserProvidedPath { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!( f, - "No VS Code installation could be found in {}. You can run `code --use-quality=stable` to switch to the latest stable version of VS Code.", - self.0 + "No {} installation could be found in {}. You can run `{} --use-quality=stable` to switch to the latest stable version of {}.", + QUALITYLESS_PRODUCT_NAME, + self.0, + APPLICATION_NAME, + QUALITYLESS_PRODUCT_NAME ) } } @@ -378,7 +381,11 @@ pub struct CorruptDownload(pub String); impl std::fmt::Display for CorruptDownload { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "Error updating the VS Code CLI: {}", self.0) + write!( + f, + "Error updating the {} CLI: {}", + QUALITYLESS_PRODUCT_NAME, self.0 + ) } } diff --git a/cli/src/util/input.rs b/cli/src/util/input.rs index 5f1acd7a266..d0fec6832a9 100644 --- a/cli/src/util/input.rs +++ b/cli/src/util/input.rs @@ -46,7 +46,7 @@ pub fn prompt_yn(text: &str) -> Result { .map_err(|e| wrap(e, "Failed to read confirm input")) } -pub fn prompt_options(text: &str, options: &[T]) -> Result +pub fn prompt_options(text: impl Into, options: &[T]) -> Result where T: Display + Copy, { diff --git a/cli/src/util/prereqs.rs b/cli/src/util/prereqs.rs index f2e724b570c..134ce9bd0cd 100644 --- a/cli/src/util/prereqs.rs +++ b/cli/src/util/prereqs.rs @@ -5,6 +5,7 @@ use std::cmp::Ordering; use super::command::capture_command; +use crate::constants::QUALITYLESS_SERVER_NAME; use crate::update_service::Platform; use crate::util::errors::SetupError; use lazy_static::lazy_static; @@ -41,8 +42,13 @@ impl PreReqChecker { #[cfg(not(target_os = "linux"))] pub async fn verify(&self) -> Result { + use crate::constants::QUALITYLESS_PRODUCT_NAME; Platform::env_default().ok_or_else(|| { - SetupError("VS Code is not supported on this platform".to_owned()).into() + SetupError(format!( + "{} is not supported on this platform", + QUALITYLESS_PRODUCT_NAME + )) + .into() }) } @@ -91,8 +97,8 @@ impl PreReqChecker { .join("\n"); Err(AnyError::from(SetupError(format!( - "This machine not meet VS Code Server's prerequisites, expected either...\n{}", - bullets, + "This machine not meet {}'s prerequisites, expected either...\n{}", + QUALITYLESS_SERVER_NAME, bullets, )))) } } @@ -107,8 +113,8 @@ async fn check_musl_interpreter() -> Result<(), String> { if fs::metadata(MUSL_PATH).await.is_err() { return Err(format!( - "find {}, which is required to run the VS Code Server in musl environments", - MUSL_PATH + "find {}, which is required to run the {} in musl environments", + MUSL_PATH, QUALITYLESS_SERVER_NAME )); } diff --git a/package.json b/package.json index cb2d4bc882c..244e2e1ba98 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.74.0", - "distro": "540bfe34933334669527ef1900a9e112965fbdde", + "distro": "22b60ce5f0f5a4db5d17091721f4d84891aec3b8", "author": { "name": "Microsoft Corporation" },