diff --git a/shelltests/installs.test b/shelltests/installs.test index c7bf429..8235f1b 100644 --- a/shelltests/installs.test +++ b/shelltests/installs.test @@ -34,4 +34,9 @@ target/debug/beamup install gleam v1.4.1 # force an install of the same version target/debug/beamup install -f true gleam v1.4.1 ->>>=0 \ No newline at end of file +>>>=0 + +# test attempt to install elixir without erlang +target/debug/beamup install elixir latest +>>>2 /Error: No default Erlang installation found. Install an Erlang version, like `beamup install erlang latest` or set a default with `beamup default erlang ` first./ +>>>=1 diff --git a/src/cmd/install.rs b/src/cmd/install.rs index d0a618d..1053b67 100644 --- a/src/cmd/install.rs +++ b/src/cmd/install.rs @@ -20,8 +20,6 @@ pub fn run( _repo: &Option, force: &Option, ) -> Result { - let release_dir = config::language_release_dir(language, id, force)?; - let out_dir = TempDir::new(github_repo.repo.as_str())?; let file = download_asset(language, out_dir.path(), github_repo, release)?; debug!("file {:?} downloaded", file); @@ -32,6 +30,8 @@ pub fn run( ) })?; + let release_dir = config::language_release_dir(language, id, force)?; + // TODO: better ways to check the type than the extension let ext = file.extension().map_or("", |e| e.to_str().unwrap_or("")); match ext { diff --git a/src/config.rs b/src/config.rs index ced9396..bfc7899 100644 --- a/src/config.rs +++ b/src/config.rs @@ -51,9 +51,9 @@ fn get_language_config(language: &languages::Language, config: &Config) -> Langu fn get_default_id(lc: &Option) -> Result { match lc { - None => Err(eyre!("No default found for {:?}", lc)), + None => Err(eyre!("No default found for language {:?}", lc)), Some(lc) => match &lc.default { - None => Err(eyre!("No default found for language")), + None => Err(eyre!("No default found for language {:?}", lc)), Some(default) => { debug!("Found default {:?}", default); Ok(default.to_string()) @@ -89,7 +89,10 @@ fn get_local_id(language_str: String, local_config: &Option) -> Opt } pub fn get_otp_major_vsn() -> Result { - let dir = install_to_use("erl")?; + let dir = match install_to_use("erl") { + Ok(dir) => Ok(dir), + Err(_) => Err(eyre!("No default Erlang installation found. Install an Erlang version, like `beamup install erlang latest` or set a default with `beamup default erlang ` first.")), + }?; let releases_dir = Path::new(&dir).join("lib").join("erlang").join("releases"); let mut otps = std::fs::read_dir(&releases_dir)?; let binding = otps diff --git a/src/github.rs b/src/github.rs index b1b0c08..0fc42bf 100644 --- a/src/github.rs +++ b/src/github.rs @@ -154,6 +154,8 @@ pub fn download_asset( GithubRepo { org, repo }: &GithubRepo, tag: &str, ) -> Result { + let asset_name = asset_name(language, tag)?; + let rt = setup_tokio(); let release_result = if tag == "latest" { @@ -186,8 +188,6 @@ pub fn download_asset( } }; - let asset_name = asset_name(language, tag)?; - match assets.iter().find(|&asset| *asset.name == asset_name) { Some(asset) => { let file = out_dir.join(asset_name);