120 lines
3.2 KiB
Rust
120 lines
3.2 KiB
Rust
|
|
use std::{path::Path, process::Command};
|
||
|
|
|
||
|
|
use anyhow::Result;
|
||
|
|
|
||
|
|
use crate::{bail_on_err, EMSCRIPTEN_VERSION};
|
||
|
|
|
||
|
|
pub fn run_fixtures() -> Result<()> {
|
||
|
|
let grammars_dir = Path::new(env!("CARGO_MANIFEST_DIR"))
|
||
|
|
.parent()
|
||
|
|
.unwrap()
|
||
|
|
.join("test")
|
||
|
|
.join("fixtures")
|
||
|
|
.join("grammars");
|
||
|
|
|
||
|
|
[
|
||
|
|
("bash", "master"),
|
||
|
|
("c", "master"),
|
||
|
|
("cpp", "master"),
|
||
|
|
("embedded-template", "master"),
|
||
|
|
("go", "master"),
|
||
|
|
("html", "master"),
|
||
|
|
("java", "master"),
|
||
|
|
("javascript", "master"),
|
||
|
|
("jsdoc", "master"),
|
||
|
|
("json", "master"),
|
||
|
|
("php", "master"),
|
||
|
|
("python", "master"),
|
||
|
|
("ruby", "master"),
|
||
|
|
("rust", "master"),
|
||
|
|
("typescript", "master"),
|
||
|
|
]
|
||
|
|
.iter()
|
||
|
|
.try_for_each(|(grammar, r#ref)| {
|
||
|
|
let grammar_dir = grammars_dir.join(grammar);
|
||
|
|
let grammar_url = format!("https://github.com/tree-sitter/tree-sitter-{grammar}");
|
||
|
|
|
||
|
|
println!("Updating the {grammar} grammar...");
|
||
|
|
|
||
|
|
if !grammar_dir.exists() {
|
||
|
|
let mut command = Command::new("git");
|
||
|
|
command.args([
|
||
|
|
"clone",
|
||
|
|
"--depth",
|
||
|
|
"1",
|
||
|
|
&grammar_url,
|
||
|
|
&grammar_dir.to_string_lossy(),
|
||
|
|
]);
|
||
|
|
bail_on_err(
|
||
|
|
&command.spawn()?.wait_with_output()?,
|
||
|
|
"Failed to clone the {grammar} grammar",
|
||
|
|
)?;
|
||
|
|
}
|
||
|
|
|
||
|
|
std::env::set_current_dir(&grammar_dir)?;
|
||
|
|
|
||
|
|
let mut command = Command::new("git");
|
||
|
|
command.args(["fetch", "origin", r#ref, "--depth", "1"]);
|
||
|
|
bail_on_err(
|
||
|
|
&command.spawn()?.wait_with_output()?,
|
||
|
|
"Failed to fetch the {grammar} grammar",
|
||
|
|
)?;
|
||
|
|
|
||
|
|
let mut command = Command::new("git");
|
||
|
|
command.args(["reset", "--hard", "FETCH_HEAD"]);
|
||
|
|
bail_on_err(
|
||
|
|
&command.spawn()?.wait_with_output()?,
|
||
|
|
"Failed to reset the {grammar} grammar",
|
||
|
|
)?;
|
||
|
|
|
||
|
|
Ok(())
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn run_emscripten() -> Result<()> {
|
||
|
|
let emscripten_dir = Path::new(env!("CARGO_MANIFEST_DIR"))
|
||
|
|
.parent()
|
||
|
|
.unwrap()
|
||
|
|
.join("target")
|
||
|
|
.join("emsdk");
|
||
|
|
|
||
|
|
if emscripten_dir.exists() {
|
||
|
|
println!("Emscripten SDK already exists");
|
||
|
|
return Ok(());
|
||
|
|
}
|
||
|
|
println!("Cloning the Emscripten SDK...");
|
||
|
|
|
||
|
|
let mut command = Command::new("git");
|
||
|
|
command.args([
|
||
|
|
"clone",
|
||
|
|
"https://github.com/emscripten-core/emsdk.git",
|
||
|
|
&emscripten_dir.to_string_lossy(),
|
||
|
|
]);
|
||
|
|
bail_on_err(
|
||
|
|
&command.spawn()?.wait_with_output()?,
|
||
|
|
"Failed to clone the Emscripten SDK",
|
||
|
|
)?;
|
||
|
|
|
||
|
|
std::env::set_current_dir(&emscripten_dir)?;
|
||
|
|
|
||
|
|
let emsdk = if cfg!(windows) {
|
||
|
|
"emsdk.bat"
|
||
|
|
} else {
|
||
|
|
"./emsdk"
|
||
|
|
};
|
||
|
|
|
||
|
|
let mut command = Command::new(emsdk);
|
||
|
|
command.args(["install", EMSCRIPTEN_VERSION]);
|
||
|
|
bail_on_err(
|
||
|
|
&command.spawn()?.wait_with_output()?,
|
||
|
|
"Failed to install Emscripten",
|
||
|
|
)?;
|
||
|
|
|
||
|
|
let mut command = Command::new(emsdk);
|
||
|
|
command.args(["activate", EMSCRIPTEN_VERSION]);
|
||
|
|
bail_on_err(
|
||
|
|
&command.spawn()?.wait_with_output()?,
|
||
|
|
"Failed to activate Emscripten",
|
||
|
|
)
|
||
|
|
}
|