* wip: fix manganis import path * upgrade tauri bundler, convert todo!() to unimplemented!() * feat: mobile hotreloading + ios asset configuration * remove oid demo and its associated env vars * nuke all the things that cause cache thrashing * swap to Asset type * add some more logs * display impl for attrvalue * dont panic on collect failure * cut down web deps to 150 * clean up deps in a lot of places, simplify build scripts * clean up asset resolution and cli-dev profile * wire up absolute paths for manganis asset in a particular mode * move document related things around to shorten compile times * move most things to `document::Item` and then decompose the cli-config * switch link to stylesheet for clarity in examples * move manganis workspace example to examples folder * decompose manganis-cli-support * dont need mobile demo anymore * remove gloo dialogs * html doesnt need document * rename hotreload to devtools * really clean up the html crate * fix weird rsx spacing * clean up desktop to use callback * clean up document a bit * re-wire up devsocket * fix utf css * yeeeet that js out of here * synthetic web system works * web crate almost done being cleaned up * desktop mostly cleaned up too * clean up cli a bit * more cli cleanup * cli builds again * clean up cli, inline structs, cut down number of unique types where possible * hotreload works again for desktop and this time, mobile too * cfg out tungstenite * devserver err * more refactor to cli builder * switch to unbounded_send * new structure is much cleaner * add http serve subcommand * bundled hotreload * kick stylsheets * clean up a bit more, split up eventloop * amazingly serve seems done * change from pub to pub(crate) in cli * remove tools * bit more polish to cli * fix issue with join * gracefully handle fullstack without a server * fullstack mobile demo * fix launch function, move projects into example-projects folder * hoist examples * add "run" command * clean up launch * remove old manual websocket receiver * doctor command * allow desktop to scroll * cut apart router crate * dont put launch in prelude * use dioxus::launch where possible * rename rsx, cut out hotreload tests * remove liveview project * bump native * fix compile for renderers * move sync event response out of interpreter * move render in serve * rollback settings change * cli compiles, huzzah! * change uris for asset * fix asset * new tui screen * new cargo-like tui works * very very verty close * it works! very small bug with incorrect grapheme calc * Clean up devserver a bit * status sytem * tidy up debug filters * clean up logging situation * Fix a number of bugs with log printing * new printing system is more reliable * wire up more stuff * things working but fullstack is having issues * fullstack works again! * hotreloading bundled assets works again * bundled hotreload and beginnings of macos bundling * Hotreload desktop * combined server builds * add build handle * fix fullstack assets * make open async, add some hooks for ios * migrate filemap to runner * wip global crate system * fixup bundles + organize asset * fix asset location bug * all the bundled reloading! * open ios simulator! * full hotreload support for mobile + serverfn * basic cleanups * clean up dx * Move filemap * fix cutting of newlines * assets workibg, some android * hoist wry/tao * use sync locks and headers to fix issues with android * desktop -> mac/win/linux with alias * better logging * feat: workspace (entire computer!) hotreload * should rebuild toggle, ios simulator bootup * proper mobile support in launch * more robust handling of assets * fix cargo * bring back some of tauri bundle * make warnings go away, clippy happy on cli * some final clippy cleanups * fmt * move manganis to its own folder * upgrade bundle to stable * drastically slim down manganis, prepping for merge * typos, failing test, docsrs config * remove static gen test * nix static gen test * we use --platform web instead of --platform fullstack now * only bind dev urls in desktop/mobile * install gtk * nix static gen * split build dir by app name
171 lines
5.4 KiB
Rust
171 lines
5.4 KiB
Rust
use crate::Result;
|
|
use anyhow::Context;
|
|
use std::path::PathBuf;
|
|
use tokio::process::Command;
|
|
|
|
#[derive(Debug, Default)]
|
|
pub struct RustupShow {
|
|
pub default_host: String,
|
|
pub rustup_home: PathBuf,
|
|
pub installed_toolchains: Vec<String>,
|
|
pub installed_targets: Vec<String>,
|
|
pub active_rustc: String,
|
|
pub active_toolchain: String,
|
|
}
|
|
impl RustupShow {
|
|
/// Collect the output of `rustup show` and parse it
|
|
pub async fn from_cli() -> Result<RustupShow> {
|
|
let output = Command::new("rustup").args(["show"]).output().await?;
|
|
let stdout =
|
|
String::from_utf8(output.stdout).context("Failed to parse rustup show output")?;
|
|
|
|
Ok(RustupShow::from_stdout(stdout))
|
|
}
|
|
|
|
/// Parse the output of `rustup show`
|
|
pub fn from_stdout(output: String) -> RustupShow {
|
|
// I apologize for this hand-rolled parser
|
|
|
|
let mut result = RustupShow::default();
|
|
let mut current_section = "";
|
|
|
|
for line in output.lines() {
|
|
let line = line.trim();
|
|
if line.is_empty() {
|
|
continue;
|
|
}
|
|
|
|
if line.starts_with("Default host: ") {
|
|
result.default_host = line.strip_prefix("Default host: ").unwrap().to_string();
|
|
} else if line.starts_with("rustup home: ") {
|
|
result.rustup_home =
|
|
PathBuf::from(line.strip_prefix("rustup home: ").unwrap().trim());
|
|
} else if line == "installed toolchains" {
|
|
current_section = "toolchains";
|
|
} else if line == "installed targets for active toolchain" {
|
|
current_section = "targets";
|
|
} else if line == "active toolchain" {
|
|
current_section = "active_toolchain";
|
|
} else {
|
|
if line.starts_with("---") || line.is_empty() {
|
|
continue;
|
|
}
|
|
match current_section {
|
|
"toolchains" => result
|
|
.installed_toolchains
|
|
.push(line.trim_end_matches(" (default)").to_string()),
|
|
"targets" => result.installed_targets.push(line.to_string()),
|
|
"active_toolchain" => {
|
|
if result.active_toolchain.is_empty() {
|
|
result.active_toolchain = line.to_string();
|
|
} else if line.starts_with("rustc ") {
|
|
result.active_rustc = line.to_string();
|
|
}
|
|
}
|
|
_ => {}
|
|
}
|
|
}
|
|
}
|
|
|
|
result
|
|
}
|
|
|
|
pub fn has_wasm32_unknown_unknown(&self) -> bool {
|
|
self.installed_targets
|
|
.contains(&"wasm32-unknown-unknown".to_string())
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn parses_rustup_show() {
|
|
let output = r#"
|
|
Default host: aarch64-apple-darwin
|
|
rustup home: /Users/jonkelley/.rustup
|
|
|
|
installed toolchains
|
|
--------------------
|
|
|
|
stable-aarch64-apple-darwin (default)
|
|
nightly-2021-07-06-aarch64-apple-darwin
|
|
nightly-2021-09-24-aarch64-apple-darwin
|
|
nightly-2022-03-10-aarch64-apple-darwin
|
|
nightly-2023-03-18-aarch64-apple-darwin
|
|
nightly-2024-01-11-aarch64-apple-darwin
|
|
nightly-aarch64-apple-darwin
|
|
1.58.1-aarch64-apple-darwin
|
|
1.60.0-aarch64-apple-darwin
|
|
1.68.2-aarch64-apple-darwin
|
|
1.69.0-aarch64-apple-darwin
|
|
1.71.1-aarch64-apple-darwin
|
|
1.72.1-aarch64-apple-darwin
|
|
1.73.0-aarch64-apple-darwin
|
|
1.74.1-aarch64-apple-darwin
|
|
1.77.2-aarch64-apple-darwin
|
|
1.78.0-aarch64-apple-darwin
|
|
1.79.0-aarch64-apple-darwin
|
|
1.49-aarch64-apple-darwin
|
|
1.55-aarch64-apple-darwin
|
|
1.56-aarch64-apple-darwin
|
|
1.57-aarch64-apple-darwin
|
|
1.66-aarch64-apple-darwin
|
|
1.69-aarch64-apple-darwin
|
|
1.70-aarch64-apple-darwin
|
|
1.74-aarch64-apple-darwin
|
|
|
|
installed targets for active toolchain
|
|
--------------------------------------
|
|
|
|
aarch64-apple-darwin
|
|
aarch64-apple-ios
|
|
aarch64-apple-ios-sim
|
|
aarch64-linux-android
|
|
aarch64-unknown-linux-gnu
|
|
armv7-linux-androideabi
|
|
i686-linux-android
|
|
thumbv6m-none-eabi
|
|
thumbv7em-none-eabihf
|
|
wasm32-unknown-unknown
|
|
x86_64-apple-darwin
|
|
x86_64-apple-ios
|
|
x86_64-linux-android
|
|
x86_64-pc-windows-msvc
|
|
x86_64-unknown-linux-gnu
|
|
|
|
active toolchain
|
|
----------------
|
|
|
|
stable-aarch64-apple-darwin (default)
|
|
rustc 1.79.0 (129f3b996 2024-06-10)
|
|
"#;
|
|
let show = RustupShow::from_stdout(output.to_string());
|
|
assert_eq!(show.default_host, "aarch64-apple-darwin");
|
|
assert_eq!(show.rustup_home, PathBuf::from("/Users/jonkelley/.rustup"));
|
|
assert_eq!(
|
|
show.active_toolchain,
|
|
"stable-aarch64-apple-darwin (default)"
|
|
);
|
|
assert_eq!(show.active_rustc, "rustc 1.79.0 (129f3b996 2024-06-10)");
|
|
assert_eq!(show.installed_toolchains.len(), 26);
|
|
assert_eq!(show.installed_targets.len(), 15);
|
|
assert_eq!(
|
|
show.installed_targets,
|
|
vec![
|
|
"aarch64-apple-darwin".to_string(),
|
|
"aarch64-apple-ios".to_string(),
|
|
"aarch64-apple-ios-sim".to_string(),
|
|
"aarch64-linux-android".to_string(),
|
|
"aarch64-unknown-linux-gnu".to_string(),
|
|
"armv7-linux-androideabi".to_string(),
|
|
"i686-linux-android".to_string(),
|
|
"thumbv6m-none-eabi".to_string(),
|
|
"thumbv7em-none-eabihf".to_string(),
|
|
"wasm32-unknown-unknown".to_string(),
|
|
"x86_64-apple-darwin".to_string(),
|
|
"x86_64-apple-ios".to_string(),
|
|
"x86_64-linux-android".to_string(),
|
|
"x86_64-pc-windows-msvc".to_string(),
|
|
"x86_64-unknown-linux-gnu".to_string(),
|
|
]
|
|
)
|
|
}
|