diff options
author | Michael Davis | 2023-06-12 15:32:36 +0000 |
---|---|---|
committer | GitHub | 2023-06-12 15:32:36 +0000 |
commit | 25ad534d6404e2aa39536df818371dcbbc928b52 (patch) | |
tree | 9ae565d7f4fbfc1f842d156a4c128ed33eedc457 | |
parent | 18e07addfd464844fc18833cfb1d1cd38c683c11 (diff) |
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.
-rw-r--r-- | Cargo.lock | 1 | ||||
-rw-r--r-- | helix-loader/Cargo.toml | 1 | ||||
-rw-r--r-- | helix-loader/src/grammar.rs | 11 |
3 files changed, 13 insertions, 0 deletions
@@ -1167,6 +1167,7 @@ dependencies = [ "threadpool", "toml", "tree-sitter", + "which", ] [[package]] diff --git a/helix-loader/Cargo.toml b/helix-loader/Cargo.toml index b0d8f146..6e0217a2 100644 --- a/helix-loader/Cargo.toml +++ b/helix-loader/Cargo.toml @@ -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 diff --git a/helix-loader/src/grammar.rs b/helix-loader/src/grammar.rs index 16955187..66111aeb 100644 --- a/helix-loader/src/grammar.rs +++ b/helix-loader/src/grammar.rs @@ -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| { |