cli: Improve sync errors

In the case where we don't find any seeds, display a better error
message.

We also don't bail out on error, since the announcement step might still
be worth trying.
This commit is contained in:
cloudhead 2024-01-22 11:27:21 +01:00
parent 92d6fd4c7e
commit a60afc8350
No known key found for this signature in database
2 changed files with 22 additions and 3 deletions

View File

@ -96,3 +96,16 @@ with 1 node(s)`. This does not necessarily mean that only `bob` or
`eve` were synchronized with, since they both could have received the
announcement of the new changes. However, it does mean that we only
wait for at least 1 of the nodes to have fetched the changes from us.
It's also possible to receive an error if a repository is not found anywhere.
```
$ rad seed rad:z39mP9rQAaGmERfUMPULfPUi473tY
✓ Seeding policy updated for rad:z39mP9rQAaGmERfUMPULfPUi473tY with scope 'all'
```
``` (fail)
$ rad sync rad:z39mP9rQAaGmERfUMPULfPUi473tY
✗ Error: no seeds found for rad:z39mP9rQAaGmERfUMPULfPUi473tY
✗ Error: nothing to announce, repository rad:z39mP9rQAaGmERfUMPULfPUi473tY is not available locally
```

View File

@ -288,8 +288,10 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
let success = results.success().count();
let failed = results.failed().count();
if success == 0 {
anyhow::bail!("repository fetch from {failed} seed(s) failed");
if results.is_empty() {
term::error(format!("no seeds found for {rid}"));
} else if success == 0 {
term::error(format!("repository fetch from {failed} seed(s) failed"));
} else {
term::success!("Fetched repository from {success} seed(s)");
}
@ -381,7 +383,11 @@ fn announce_refs(
mut node: Node,
profile: &Profile,
) -> anyhow::Result<()> {
let repo = profile.storage.repository(rid)?;
let Ok(repo) = profile.storage.repository(rid) else {
return Err(anyhow!(
"nothing to announce, repository {rid} is not available locally"
));
};
let doc = repo.identity_doc()?;
let unsynced: Vec<_> = if doc.visibility.is_public() {
let seeds = node.seeds(rid)?;