diff options
Diffstat (limited to 'xtask/src/install.rs')
-rw-r--r-- | xtask/src/install.rs | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/xtask/src/install.rs b/xtask/src/install.rs index fcc4f05e4..789e9f27b 100644 --- a/xtask/src/install.rs +++ b/xtask/src/install.rs | |||
@@ -3,8 +3,7 @@ | |||
3 | use std::{env, path::PathBuf, str}; | 3 | use std::{env, path::PathBuf, str}; |
4 | 4 | ||
5 | use anyhow::{bail, format_err, Context, Result}; | 5 | use anyhow::{bail, format_err, Context, Result}; |
6 | 6 | use xshell::{cmd, pushd}; | |
7 | use crate::not_bash::{pushd, run}; | ||
8 | 7 | ||
9 | // Latest stable, feel free to send a PR if this lags behind. | 8 | // Latest stable, feel free to send a PR if this lags behind. |
10 | const REQUIRED_RUST_VERSION: u32 = 47; | 9 | const REQUIRED_RUST_VERSION: u32 = 47; |
@@ -76,7 +75,7 @@ fn fix_path_for_mac() -> Result<()> { | |||
76 | } | 75 | } |
77 | 76 | ||
78 | fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { | 77 | fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { |
79 | let _dir = pushd("./editors/code"); | 78 | let _dir = pushd("./editors/code")?; |
80 | 79 | ||
81 | let find_code = |f: fn(&str) -> bool| -> Result<&'static str> { | 80 | let find_code = |f: fn(&str) -> bool| -> Result<&'static str> { |
82 | ["code", "code-insiders", "codium", "code-oss"] | 81 | ["code", "code-insiders", "codium", "code-oss"] |
@@ -89,24 +88,25 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { | |||
89 | }; | 88 | }; |
90 | 89 | ||
91 | let installed_extensions = if cfg!(unix) { | 90 | let installed_extensions = if cfg!(unix) { |
92 | run!("npm --version").context("`npm` is required to build the VS Code plugin")?; | 91 | cmd!("npm --version").run().context("`npm` is required to build the VS Code plugin")?; |
93 | run!("npm install")?; | 92 | cmd!("npm install").run()?; |
94 | 93 | ||
95 | run!("npm run package --scripts-prepend-node-path")?; | 94 | cmd!("npm run package --scripts-prepend-node-path").run()?; |
96 | 95 | ||
97 | let code = find_code(|bin| run!("{} --version", bin).is_ok())?; | 96 | let code = find_code(|bin| cmd!("{bin} --version").read().is_ok())?; |
98 | run!("{} --install-extension rust-analyzer.vsix --force", code)?; | 97 | cmd!("{code} --install-extension rust-analyzer.vsix --force").run()?; |
99 | run!("{} --list-extensions", code; echo = false)? | 98 | cmd!("{code} --list-extensions").read()? |
100 | } else { | 99 | } else { |
101 | run!("cmd.exe /c npm --version") | 100 | cmd!("cmd.exe /c npm --version") |
101 | .run() | ||
102 | .context("`npm` is required to build the VS Code plugin")?; | 102 | .context("`npm` is required to build the VS Code plugin")?; |
103 | run!("cmd.exe /c npm install")?; | 103 | cmd!("cmd.exe /c npm install").run()?; |
104 | 104 | ||
105 | run!("cmd.exe /c npm run package")?; | 105 | cmd!("cmd.exe /c npm run package").run()?; |
106 | 106 | ||
107 | let code = find_code(|bin| run!("cmd.exe /c {}.cmd --version", bin).is_ok())?; | 107 | let code = find_code(|bin| cmd!("cmd.exe /c {bin}.cmd --version").read().is_ok())?; |
108 | run!(r"cmd.exe /c {}.cmd --install-extension rust-analyzer.vsix --force", code)?; | 108 | cmd!("cmd.exe /c {code}.cmd --install-extension rust-analyzer.vsix --force").run()?; |
109 | run!("cmd.exe /c {}.cmd --list-extensions", code; echo = false)? | 109 | cmd!("cmd.exe /c {code}.cmd --list-extensions").read()? |
110 | }; | 110 | }; |
111 | 111 | ||
112 | if !installed_extensions.contains("rust-analyzer") { | 112 | if !installed_extensions.contains("rust-analyzer") { |
@@ -122,7 +122,7 @@ fn install_client(ClientOpt::VsCode: ClientOpt) -> Result<()> { | |||
122 | 122 | ||
123 | fn install_server(opts: ServerOpt) -> Result<()> { | 123 | fn install_server(opts: ServerOpt) -> Result<()> { |
124 | let mut old_rust = false; | 124 | let mut old_rust = false; |
125 | if let Ok(stdout) = run!("cargo --version") { | 125 | if let Ok(stdout) = cmd!("cargo --version").read() { |
126 | if !check_version(&stdout, REQUIRED_RUST_VERSION) { | 126 | if !check_version(&stdout, REQUIRED_RUST_VERSION) { |
127 | old_rust = true; | 127 | old_rust = true; |
128 | } | 128 | } |
@@ -134,12 +134,13 @@ fn install_server(opts: ServerOpt) -> Result<()> { | |||
134 | REQUIRED_RUST_VERSION, | 134 | REQUIRED_RUST_VERSION, |
135 | ) | 135 | ) |
136 | } | 136 | } |
137 | 137 | let features = match opts.malloc { | |
138 | let malloc_feature = match opts.malloc { | 138 | Malloc::System => &[][..], |
139 | Malloc::System => "", | 139 | Malloc::Mimalloc => &["--features", "mimalloc"], |
140 | Malloc::Mimalloc => "--features mimalloc", | ||
141 | }; | 140 | }; |
142 | let res = run!("cargo install --path crates/rust-analyzer --locked --force {}", malloc_feature); | 141 | |
142 | let cmd = cmd!("cargo install --path crates/rust-analyzer --locked --force {features...}"); | ||
143 | let res = cmd.run(); | ||
143 | 144 | ||
144 | if res.is_err() && old_rust { | 145 | if res.is_err() && old_rust { |
145 | eprintln!( | 146 | eprintln!( |
@@ -148,7 +149,8 @@ fn install_server(opts: ServerOpt) -> Result<()> { | |||
148 | ); | 149 | ); |
149 | } | 150 | } |
150 | 151 | ||
151 | res.map(drop) | 152 | res?; |
153 | Ok(()) | ||
152 | } | 154 | } |
153 | 155 | ||
154 | fn check_version(version_output: &str, min_minor_version: u32) -> bool { | 156 | fn check_version(version_output: &str, min_minor_version: u32) -> bool { |