Skip to content

Commit c95a10d

Browse files
authored
feat: make svm list work offline (#164)
Print only what's been able to be fetched.
1 parent 771ab80 commit c95a10d

File tree

1 file changed

+33
-10
lines changed
  • crates/svm-rs/src/bin/svm-bin

1 file changed

+33
-10
lines changed

crates/svm-rs/src/bin/svm-bin/list.rs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,43 @@ pub struct ListCmd;
1010

1111
impl ListCmd {
1212
pub async fn run(self) -> anyhow::Result<()> {
13-
let all_versions = svm::all_versions().await?;
14-
let installed_versions = svm::installed_versions().unwrap_or_default();
15-
let current_version = svm::get_global_version()?;
13+
let mut failed = false;
14+
let mut err = |e: &svm::SvmError, s: &str| {
15+
failed = true;
16+
eprintln!("{s}: {e}");
17+
};
1618

17-
let a: HashSet<Version> = all_versions.iter().cloned().collect();
18-
let b: HashSet<Version> = installed_versions.iter().cloned().collect();
19-
let c = &a - &b;
19+
let all_versions = svm::all_versions()
20+
.await
21+
.inspect_err(|e| err(e, "Error fetching all versions"))
22+
.unwrap_or_default();
23+
let installed_versions = svm::installed_versions()
24+
.inspect_err(|e| err(e, "Error fetching installed versions"))
25+
.unwrap_or_default();
26+
let current_version =
27+
svm::get_global_version().inspect_err(|e| err(e, "Error fetching current version"));
2028

21-
let mut available_versions = c.iter().cloned().collect::<Vec<Version>>();
29+
let mut available_versions = {
30+
let a: HashSet<Version> = all_versions.iter().cloned().collect();
31+
let b: HashSet<Version> = installed_versions.iter().cloned().collect();
32+
let c = &a - &b;
33+
c.iter().cloned().collect::<Vec<Version>>()
34+
};
2235
available_versions.sort();
2336

24-
print::current_version(current_version);
25-
print::installed_versions(installed_versions);
26-
print::available_versions(available_versions);
37+
if let Ok(current_version) = current_version {
38+
print::current_version(current_version);
39+
}
40+
if !installed_versions.is_empty() {
41+
print::installed_versions(installed_versions);
42+
}
43+
if !available_versions.is_empty() {
44+
print::available_versions(available_versions);
45+
}
46+
47+
if failed {
48+
std::process::exit(1);
49+
}
2750

2851
Ok(())
2952
}

0 commit comments

Comments
 (0)