Check for 'git' before fetching/building grammars (#7320)

Previously the error message for this potential failure-case was
confusing: "no such file or directory". `hx -g fetch`, `hx -g build` and
the helix-term builder should bail early if the git binary is not
available.
This commit is contained in:
Michael Davis 2023-06-12 10:32:36 -05:00 committed by GitHub
parent 18e07addfd
commit 25ad534d64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 0 deletions

1
Cargo.lock generated
View File

@ -1167,6 +1167,7 @@ dependencies = [
"threadpool",
"toml",
"tree-sitter",
"which",
]
[[package]]

View File

@ -21,6 +21,7 @@ etcetera = "0.8"
tree-sitter = "0.20"
once_cell = "1.18"
log = "0.4"
which = "4.4"
# TODO: these two should be on !wasm32 only

View File

@ -85,7 +85,16 @@ pub fn get_language(name: &str) -> Result<Language> {
Ok(language)
}
fn ensure_git_is_available() -> Result<()> {
match which::which("git") {
Ok(_cmd) => Ok(()),
Err(err) => Err(anyhow::anyhow!("'git' could not be found ({err})")),
}
}
pub fn fetch_grammars() -> Result<()> {
ensure_git_is_available()?;
// We do not need to fetch local grammars.
let mut grammars = get_grammar_configs()?;
grammars.retain(|grammar| !matches!(grammar.source, GrammarSource::Local { .. }));
@ -145,6 +154,8 @@ pub fn fetch_grammars() -> Result<()> {
}
pub fn build_grammars(target: Option<String>) -> Result<()> {
ensure_git_is_available()?;
let grammars = get_grammar_configs()?;
println!("Building {} grammars", grammars.len());
let results = run_parallel(grammars, move |grammar| {