From 42ba8b91c3cffbfd81e40786eb967a988ed9f83f Mon Sep 17 00:00:00 2001 From: jdx <216188+jdx@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:02:49 -0600 Subject: [PATCH] added RTX_USE_VERSION_HOST (#1138) can be used to bypass it --- src/env.rs | 2 ++ src/plugins/core/bun.rs | 3 ++- src/plugins/core/deno.rs | 3 ++- src/plugins/core/go.rs | 3 ++- src/plugins/core/java.rs | 3 ++- src/plugins/core/mod.rs | 10 +++++++--- src/plugins/core/node.rs | 24 +++++++----------------- src/plugins/core/node_build.rs | 5 +++++ src/plugins/core/python.rs | 3 ++- src/plugins/core/ruby.rs | 3 ++- src/plugins/external_plugin.rs | 3 +++ 11 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/env.rs b/src/env.rs index 4632e3f862..859057f955 100644 --- a/src/env.rs +++ b/src/env.rs @@ -87,6 +87,8 @@ pub static RTX_ALL_COMPILE: Lazy = Lazy::new(|| match var_option_bool("RTX #[allow(unused)] pub static GITHUB_API_TOKEN: Lazy> = Lazy::new(|| var("GITHUB_API_TOKEN").ok()); +pub static RTX_USE_VERSIONS_HOST: Lazy = Lazy::new(|| !var_is_false("RTX_USE_VERSIONS_HOST")); + // python pub static RTX_PYENV_REPO: Lazy = Lazy::new(|| { var("RTX_PYENV_REPO").unwrap_or_else(|_| "https://github.com/pyenv/pyenv.git".into()) diff --git a/src/plugins/core/bun.rs b/src/plugins/core/bun.rs index e1b0b8f7cc..2d6310e6af 100644 --- a/src/plugins/core/bun.rs +++ b/src/plugins/core/bun.rs @@ -28,7 +28,8 @@ impl BunPlugin { fn fetch_remote_versions(&self) -> Result> { match self.core.fetch_remote_versions_from_rtx() { - Ok(versions) => return Ok(versions), + Ok(Some(versions)) => return Ok(versions), + Ok(None) => {} Err(e) => warn!("failed to fetch remote versions: {}", e), } let releases: Vec = diff --git a/src/plugins/core/deno.rs b/src/plugins/core/deno.rs index 59ce2e62a3..f2298eba7d 100644 --- a/src/plugins/core/deno.rs +++ b/src/plugins/core/deno.rs @@ -29,7 +29,8 @@ impl DenoPlugin { fn fetch_remote_versions(&self) -> Result> { match self.core.fetch_remote_versions_from_rtx() { - Ok(versions) => return Ok(versions), + Ok(Some(versions)) => return Ok(versions), + Ok(None) => {} Err(e) => warn!("failed to fetch remote versions: {}", e), } let releases: Vec = diff --git a/src/plugins/core/go.rs b/src/plugins/core/go.rs index c6d3d6b971..097d352f52 100644 --- a/src/plugins/core/go.rs +++ b/src/plugins/core/go.rs @@ -29,7 +29,8 @@ impl GoPlugin { fn fetch_remote_versions(&self) -> Result> { match self.core.fetch_remote_versions_from_rtx() { - Ok(versions) => return Ok(versions), + Ok(Some(versions)) => return Ok(versions), + Ok(None) => {} Err(e) => warn!("failed to fetch remote versions: {}", e), } CorePlugin::run_fetch_task_with_timeout(move || { diff --git a/src/plugins/core/java.rs b/src/plugins/core/java.rs index 72913286ba..0d014e7cc6 100644 --- a/src/plugins/core/java.rs +++ b/src/plugins/core/java.rs @@ -78,7 +78,8 @@ impl JavaPlugin { fn fetch_remote_versions(&self) -> Result> { match self.core.fetch_remote_versions_from_rtx() { - Ok(versions) => return Ok(versions), + Ok(Some(versions)) => return Ok(versions), + Ok(None) => {} Err(e) => warn!("failed to fetch remote versions: {}", e), } let versions = self diff --git a/src/plugins/core/mod.rs b/src/plugins/core/mod.rs index 65600ac8a3..ad9ccf09b3 100644 --- a/src/plugins/core/mod.rs +++ b/src/plugins/core/mod.rs @@ -5,6 +5,7 @@ use std::path::PathBuf; use std::sync::Arc; use color_eyre::eyre::Result; +use itertools::Itertools; use once_cell::sync::Lazy; pub use python::PythonPlugin; @@ -93,13 +94,16 @@ impl CorePlugin { run_with_timeout(f, *env::RTX_FETCH_REMOTE_VERSIONS_TIMEOUT) } - pub fn fetch_remote_versions_from_rtx(&self) -> Result> { + pub fn fetch_remote_versions_from_rtx(&self) -> Result>> { + if !*env::RTX_USE_VERSIONS_HOST { + return Ok(None); + } let versions = HTTP .get_text(format!("http://rtx-versions.jdx.dev/{}", &self.name))? .lines() .map(|v| v.trim().to_string()) .filter(|v| !v.is_empty()) - .collect(); - Ok(versions) + .collect_vec(); + Ok(Some(versions)) } } diff --git a/src/plugins/core/node.rs b/src/plugins/core/node.rs index bad0d7ab58..20c5314add 100644 --- a/src/plugins/core/node.rs +++ b/src/plugins/core/node.rs @@ -35,14 +35,14 @@ impl NodePlugin { let node_url_overridden = env::var("RTX_NODE_MIRROR_URL") .or(env::var("NODE_BUILD_MIRROR_URL")) .is_ok(); - if node_url_overridden { - self.fetch_remote_versions_from_node(&RTX_NODE_MIRROR_URL) - } else { - self.fetch_remote_versions_from_rtx().or_else(|e| { - warn!("failed to fetch remote versions from rtx: {}", e); - self.fetch_remote_versions_from_node(&RTX_NODE_MIRROR_URL) - }) + if !node_url_overridden { + match self.core.fetch_remote_versions_from_rtx() { + Ok(Some(versions)) => return Ok(versions), + Ok(None) => {} + Err(e) => warn!("failed to fetch remote versions: {}", e), + } } + self.fetch_remote_versions_from_node(&RTX_NODE_MIRROR_URL) } fn fetch_remote_versions_from_node(&self, base: &Url) -> Result> { let versions = self @@ -60,16 +60,6 @@ impl NodePlugin { .collect(); Ok(versions) } - fn fetch_remote_versions_from_rtx(&self) -> Result> { - let versions = self - .http - .get_text("http://rtx-versions.jdx.dev/node")? - .lines() - .map(|v| v.trim().to_string()) - .filter(|v| !v.is_empty()) - .collect(); - Ok(versions) - } fn install_precompiled(&self, ctx: &InstallContext, opts: &BuildOpts) -> Result<()> { match self.fetch_tarball( diff --git a/src/plugins/core/node_build.rs b/src/plugins/core/node_build.rs index be83e42657..d0b7374690 100644 --- a/src/plugins/core/node_build.rs +++ b/src/plugins/core/node_build.rs @@ -84,6 +84,11 @@ impl NodeBuildPlugin { } fn fetch_remote_versions(&self) -> Result> { + match self.core.fetch_remote_versions_from_rtx() { + Ok(Some(versions)) => return Ok(versions), + Ok(None) => {} + Err(e) => warn!("failed to fetch remote versions: {}", e), + } self.install_or_update_node_build()?; let node_build_bin = self.node_build_bin(); CorePlugin::run_fetch_task_with_timeout(move || { diff --git a/src/plugins/core/python.rs b/src/plugins/core/python.rs index 5aad85aea0..04d337735d 100644 --- a/src/plugins/core/python.rs +++ b/src/plugins/core/python.rs @@ -64,7 +64,8 @@ impl PythonPlugin { fn fetch_remote_versions(&self) -> Result> { match self.core.fetch_remote_versions_from_rtx() { - Ok(versions) => return Ok(versions), + Ok(Some(versions)) => return Ok(versions), + Ok(None) => {} Err(e) => warn!("failed to fetch remote versions: {}", e), } self.install_or_update_python_build()?; diff --git a/src/plugins/core/ruby.rs b/src/plugins/core/ruby.rs index 9a5cc645a9..d3404395de 100644 --- a/src/plugins/core/ruby.rs +++ b/src/plugins/core/ruby.rs @@ -142,7 +142,8 @@ impl RubyPlugin { fn fetch_remote_versions(&self) -> Result> { match self.core.fetch_remote_versions_from_rtx() { - Ok(versions) => return Ok(versions), + Ok(Some(versions)) => return Ok(versions), + Ok(None) => {} Err(e) => warn!("failed to fetch remote versions: {}", e), } self.update_build_tool()?; diff --git a/src/plugins/external_plugin.rs b/src/plugins/external_plugin.rs index 5cc1f4bba4..bed5e4a742 100644 --- a/src/plugins/external_plugin.rs +++ b/src/plugins/external_plugin.rs @@ -139,6 +139,9 @@ impl ExternalPlugin { } fn fetch_versions(&self) -> Result>> { + if !*env::RTX_USE_VERSIONS_HOST { + return Ok(None); + } // ensure that we're using a default shorthand plugin let git = Git::new(self.plugin_path.to_path_buf()); if git.get_remote_url()