diff --git a/Cargo.lock b/Cargo.lock index 992d06d5c7..bf2e287a1d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -34,19 +34,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "getrandom", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -399,7 +386,7 @@ checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" dependencies = [ "chrono", "chrono-tz-build", - "phf 0.11.2", + "phf", ] [[package]] @@ -409,8 +396,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" dependencies = [ "parse-zoneinfo", - "phf 0.11.2", - "phf_codegen 0.11.2", + "phf", + "phf_codegen", ] [[package]] @@ -687,29 +674,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "cssparser" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b3df4f93e5fbbe73ec01ec8d3f68bba73107993a5b1e7519273c32db9b0d5be" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "phf 0.11.2", - "smallvec", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn 2.0.87", -] - [[package]] name = "ctor" version = "0.2.8" @@ -794,17 +758,6 @@ dependencies = [ "syn 2.0.87", ] -[[package]] -name = "derive_more" -version = "0.99.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - [[package]] name = "deunicode" version = "1.6.0" @@ -866,21 +819,6 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" -[[package]] -name = "dtoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - [[package]] name = "duct" version = "0.13.7" @@ -924,12 +862,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ego-tree" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12a0bb14ac04a9fcf170d0bbbef949b44cc492f4452bd20c095636956f653642" - [[package]] name = "either" version = "1.13.0" @@ -1161,16 +1093,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures-channel" version = "0.3.31" @@ -1221,15 +1143,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1240,15 +1153,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "getopts" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" -dependencies = [ - "unicode-width", -] - [[package]] name = "getrandom" version = "0.2.15" @@ -1390,20 +1294,6 @@ dependencies = [ "windows", ] -[[package]] -name = "html5ever" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 2.0.87", -] - [[package]] name = "http" version = "1.1.0" @@ -2000,7 +1890,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3015551c284515db7c30c559fc1080f9cb9ee990d1f6fca315451a107c7540bb" dependencies = [ "cc", - "which", + "which 6.0.3", ] [[package]] @@ -2033,26 +1923,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "markup5ever" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" -dependencies = [ - "log", - "phf 0.11.2", - "phf_codegen 0.11.2", - "string_cache", - "string_cache_codegen", - "tendril", -] - [[package]] name = "matchers" version = "0.1.0" @@ -2219,7 +2089,7 @@ dependencies = [ "versions", "vfox", "walkdir", - "which", + "which 7.0.0", "xx", "zip", ] @@ -2288,12 +2158,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nix" version = "0.29.0" @@ -2603,33 +2467,13 @@ dependencies = [ "indexmap 2.6.0", ] -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_shared 0.10.0", -] - [[package]] name = "phf" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ - "phf_macros", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_codegen" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", + "phf_shared", ] [[package]] @@ -2638,18 +2482,8 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" dependencies = [ - "phf_generator 0.11.2", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand", + "phf_generator", + "phf_shared", ] [[package]] @@ -2658,32 +2492,10 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ - "phf_shared 0.11.2", + "phf_shared", "rand", ] -[[package]] -name = "phf_macros" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" -dependencies = [ - "phf_generator 0.11.2", - "phf_shared 0.11.2", - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher 0.3.11", -] - [[package]] name = "phf_shared" version = "0.11.2" @@ -2748,12 +2560,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "predicates" version = "3.1.2" @@ -3215,22 +3021,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scraper" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90460b31bfe1fc07be8262e42c665ad97118d4585869de9345a84d501a9eaf0" -dependencies = [ - "ahash", - "cssparser", - "ego-tree", - "getopts", - "html5ever", - "once_cell", - "selectors", - "tendril", -] - [[package]] name = "security-framework" version = "2.11.1" @@ -3254,25 +3044,6 @@ dependencies = [ "libc", ] -[[package]] -name = "selectors" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb30575f3638fc8f6815f448d50cb1a2e255b0897985c8c59f4d37b72a07b06" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "new_debug_unreachable", - "phf 0.10.1", - "phf_codegen 0.10.0", - "precomputed-hash", - "servo_arc", - "smallvec", -] - [[package]] name = "self-replace" version = "1.5.0" @@ -3386,15 +3157,6 @@ dependencies = [ "serde", ] -[[package]] -name = "servo_arc" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d036d71a959e00c77a63538b90a6c2390969f9772b096ea837205c6bd0491a44" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "sevenz-rust" version = "0.6.1" @@ -3581,32 +3343,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - [[package]] name = "strsim" version = "0.11.1" @@ -3763,17 +3499,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - [[package]] name = "tera" version = "1.20.0" @@ -3961,6 +3686,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tl" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b130bd8a58c163224b44e217b4239ca7b927d82bf6cc2fea1fc561d15056e3f7" + [[package]] name = "tokio" version = "1.41.0" @@ -4162,7 +3893,7 @@ dependencies = [ "tempfile", "thiserror", "url", - "which", + "which 6.0.3", "xz2", "zip", ] @@ -4287,12 +4018,6 @@ dependencies = [ "xx", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf16_iter" version = "1.0.5" @@ -4342,9 +4067,7 @@ dependencies = [ [[package]] name = "vfox" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4937155ff5b084823401cb98a1a0f96fea7fca8d53683a28283fe19bdb7af" +version = "0.2.0" dependencies = [ "homedir", "indexmap 2.6.0", @@ -4353,10 +4076,10 @@ dependencies = [ "mlua", "once_cell", "reqwest", - "scraper", "serde", "serde_json", "thiserror", + "tl", "tokio", "url", "xx", @@ -4515,6 +4238,18 @@ dependencies = [ "winsafe", ] +[[package]] +name = "which" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9cad3279ade7346b96e38731a641d7343dd6a53d55083dd54eadfa5a1b38c6b" +dependencies = [ + "either", + "home", + "rustix", + "winsafe", +] + [[package]] name = "widestring" version = "1.1.0" diff --git a/Cargo.toml b/Cargo.toml index da0c5e034f..8efc9fa247 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -121,10 +121,10 @@ url = "2" # usage-lib = { path = "../usage/lib", features = ["clap", "docs"] } usage-lib = { version = "1", features = ["clap", "docs"] } versions = { version = "6", features = ["serde"] } -# vfox = { path="../vfox.rs" } -vfox = "0.2" +# vfox = { path = "../vfox.rs" } +vfox = "0.3" walkdir = "2" -which = "6" +which = "7" xx = { version = "1", features = ["glob"] } zip = { version = "2", default-features = false, features = ["deflate"] } diff --git a/e2e/backend/test_vfox_kotlin_slow b/e2e/backend/test_vfox_kotlin_slow new file mode 100644 index 0000000000..d938b7474c --- /dev/null +++ b/e2e/backend/test_vfox_kotlin_slow @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +mise use java +assert_contains "mise x vfox:version-fox/vfox-kotlin@2.0.20 -- kotlin -version" "Kotlin version 2.0.20" diff --git a/e2e/backend/test_vfox_maven_slow b/e2e/backend/test_vfox_maven_slow new file mode 100644 index 0000000000..cd97b896b0 --- /dev/null +++ b/e2e/backend/test_vfox_maven_slow @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +mise use java +assert_contains "mise x vfox:version-fox/vfox-maven@3.9.8 -- mvn --version" "Apache Maven 3.9.8" diff --git a/e2e/backend/test_vfox_python_slow b/e2e/backend/test_vfox_python_slow new file mode 100644 index 0000000000..872019b5e7 --- /dev/null +++ b/e2e/backend/test_vfox_python_slow @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +mise i vfox:version-fox/vfox-python@3.12.0 +assert "mise x vfox:version-fox/vfox-python@3.12.0 -- python3 -V" "Python 3.12.0" diff --git a/registry.toml b/registry.toml index 1318da5593..5f0d40e79c 100644 --- a/registry.toml +++ b/registry.toml @@ -163,8 +163,7 @@ cyclonedx = ["asdf:xeedio/asdf-cyclonedx"] dagger = ["asdf:virtualstaticvoid/asdf-dagger"] danger-js = ["asdf:MontakOleg/asdf-danger-js"] dapr = ["asdf:asdf-community/asdf-dapr-cli"] -# dart = ["vfox:version-fox/vfox-dart", "asdf:PatOConnor43/asdf-dart"] # TODO: vfox has issues on arm64 -dart = ["asdf:PatOConnor43/asdf-dart"] +dart = ["asdf:PatOConnor43/asdf-dart", "vfox:version-fox/vfox-dart"] dasel = ["asdf:asdf-community/asdf-dasel"] datree = ["asdf:lukeab/asdf-datree"] daytona = ["asdf:CrouchingMuppet/asdf-daytona"] @@ -212,8 +211,7 @@ editorconfig-checker = ["asdf:gabitchov/asdf-editorconfig-checker"] ejson = ["asdf:cipherstash/asdf-ejson"] eksctl = ["asdf:elementalvoid/asdf-eksctl"] elasticsearch = ["asdf:asdf-community/asdf-elasticsearch"] -# elixir = ["vfox:version-fox/vfox-elixir", "asdf:mise-plugins/mise-elixir"] # TODO: not sure what is wrong with this one -elixir = ["asdf:mise-plugins/mise-elixir"] +elixir = ["asdf:mise-plugins/mise-elixir", "vfox:version-fox/vfox-elixir"] elixir-ls = ["asdf:juantascon/asdf-elixir-ls"] elm = ["asdf:asdf-community/asdf-elm"] embulk = ["asdf:yuokada/asdf-embulk"] @@ -396,8 +394,7 @@ ko = ["asdf:zasdaym/asdf-ko"] koka = ["asdf:susurri/asdf-koka"] kompose = ["ubi:kubernetes/kompose", "asdf:technikhil314/asdf-kompose"] kops = ["asdf:Antiarchitect/asdf-kops"] -# kotlin = ["vfox:version-fox/vfox-kotlin", "asdf:asdf-community/asdf-kotlin"] # TODO: needs html extension for vfox.rs -kotlin = ["asdf:asdf-community/asdf-kotlin"] +kotlin = ["asdf:asdf-community/asdf-kotlin", "vfox:version-fox/vfox-kotlin"] kp = ["asdf:vmware-tanzu/tanzu-plug-in-for-asdf"] kpack = ["asdf:asdf-community/asdf-kpack-cli"] kpt = ["asdf:nlamirault/asdf-kpt"] @@ -473,8 +470,7 @@ mark = ["asdf:jfreeland/asdf-mark"] markdownlint-cli2 = ["npm:markdownlint-cli2", "asdf:paulo-ferraz-oliveira/asdf-markdownlint-cli2"] marp-cli = ["asdf:xataz/asdf-marp-cli"] mask = ["asdf:aaaaninja/asdf-mask"] -# maven = ["vfox:version-fox/vfox-maven", "asdf:mise-plugins/asdf-maven"] # TODO: needs html extension for vfox.rs -maven = ["asdf:mise-plugins/asdf-maven"] +maven = ["asdf:mise-plugins/asdf-maven", "vfox:version-fox/vfox-maven"] mc = ["asdf:penpyt/asdf-mc"] mdbook = ["asdf:cipherstash/asdf-mdbook"] mdbook-linkcheck = ["asdf:cipherstash/asdf-mdbook-linkcheck"] diff --git a/src/backend/vfox.rs b/src/backend/vfox.rs index 0f12206c1b..f0b3e9b6e8 100644 --- a/src/backend/vfox.rs +++ b/src/backend/vfox.rs @@ -14,7 +14,7 @@ use crate::dirs; use crate::install_context::InstallContext; use crate::plugins::vfox_plugin::VfoxPlugin; use crate::plugins::{Plugin, PluginType}; -use crate::toolset::{ToolVersion, Toolset}; +use crate::toolset::{ToolRequest, ToolVersion, Toolset}; use crate::ui::multi_progress_report::MultiProgressReport; #[derive(Debug)] @@ -92,6 +92,15 @@ impl Backend for VfoxBackend { ) -> eyre::Result> { self._exec_env(tv).cloned() } + + fn get_dependencies(&self, tvr: &ToolRequest) -> eyre::Result> { + let out = match tvr.backend().name.as_str() { + "poetry" | "pipenv" | "pipx" => vec!["python"], + "elixir" => vec!["erlang"], + _ => vec![], + }; + Ok(out.into_iter().map(|s| s.into()).collect()) + } } impl VfoxBackend { @@ -110,6 +119,8 @@ impl VfoxBackend { pub fn from_arg(ba: BackendArg) -> Self { let pathname = ba.short.to_kebab_case(); let plugin_path = dirs::PLUGINS.join(&pathname); + let mut plugin = VfoxPlugin::new(pathname.clone()); + plugin.full = Some(ba.full.clone()); Self { remote_version_cache: CacheManagerBuilder::new( ba.cache_path.join("remote_versions.msgpack.z"), @@ -124,7 +135,7 @@ impl VfoxBackend { .with_fresh_file(plugin_path.to_path_buf()) .with_fresh_file(ba.installs_path.to_path_buf()) .build(), - plugin: Box::new(VfoxPlugin::new(pathname.clone())), + plugin: Box::new(plugin), ba, pathname, } diff --git a/src/plugins/vfox_plugin.rs b/src/plugins/vfox_plugin.rs index f560034383..ea07773da1 100644 --- a/src/plugins/vfox_plugin.rs +++ b/src/plugins/vfox_plugin.rs @@ -22,6 +22,7 @@ use xx::regex; #[derive(Debug)] pub struct VfoxPlugin { pub name: String, + pub full: Option, pub plugin_path: PathBuf, pub repo: Mutex, pub repo_url: Option, @@ -42,6 +43,7 @@ impl VfoxPlugin { let repo = Git::new(&plugin_path); Self { name, + full: None, repo_url: None, repo: Mutex::new(repo), plugin_path, @@ -71,7 +73,7 @@ impl VfoxPlugin { if let Some(url) = self.repo().get_remote_url() { return Ok(Url::parse(&url)?); } - vfox_to_url(&self.name) + vfox_to_url(self.full.as_ref().unwrap_or(&self.name)) } pub fn mise_env(&self, opts: &toml::Value) -> Result>> { @@ -253,6 +255,7 @@ Plugins could support local directories in the future but for now a symlink is r } fn vfox_to_url(name: &str) -> eyre::Result { + let name = name.strip_prefix("vfox:").unwrap_or(name); if let Some(full) = registry::REGISTRY_VFOX.get(name.trim_start_matches("vfox-")) { // bun -> version-fox/vfox-bun return vfox_to_url(full.split_once(':').unwrap().1);