aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command/repository_command.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-02 17:32:43 +0900
committernsfisis <nsfisis@gmail.com>2026-08-02 17:32:43 +0900
commit7e31bab9ff7209c9b6d7928a581d7a449846f42e (patch)
treeb121966a169ee74afe04d066576e862a6702bbf6 /crates/shirabe/src/command/repository_command.rs
parentebcb4a7f013c0511dd6617686395cef17822d1e2 (diff)
downloadphp-shirabe-7e31bab9ff7209c9b6d7928a581d7a449846f42e.tar.gz
php-shirabe-7e31bab9ff7209c9b6d7928a581d7a449846f42e.tar.zst
php-shirabe-7e31bab9ff7209c9b6d7928a581d7a449846f42e.zip
fix(json): propagate JsonFile::encode errors instead of unwrapping
PHP's JsonFile::encode throws a RuntimeException when json_encode fails; the port swallowed that into an .unwrap() marked TODO(phase-c). Return anyhow::Result from encode/encode_with_options and propagate at every call site (print_table and list_repositories become Result-returning to carry it). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/command/repository_command.rs')
-rw-r--r--crates/shirabe/src/command/repository_command.rs15
1 files changed, 10 insertions, 5 deletions
diff --git a/crates/shirabe/src/command/repository_command.rs b/crates/shirabe/src/command/repository_command.rs
index 31d2de3f..d23e114c 100644
--- a/crates/shirabe/src/command/repository_command.rs
+++ b/crates/shirabe/src/command/repository_command.rs
@@ -50,7 +50,7 @@ impl RepositoryCommand {
command
}
- fn list_repositories(&self, mut repos: IndexMap<String, PhpMixed>) {
+ fn list_repositories(&self, mut repos: IndexMap<String, PhpMixed>) -> anyhow::Result<()> {
let io = self.get_io();
let mut packagist_present = false;
@@ -84,7 +84,7 @@ impl RepositoryCommand {
if repos.is_empty() {
io.write("No repositories configured");
- return;
+ return Ok(());
}
for (key, repo) in &repos {
@@ -111,14 +111,19 @@ impl RepositoryCommand {
.get("type")
.and_then(|v| v.as_string())
.unwrap_or("unknown");
- let url = repo_map
+ let url = match repo_map
.get("url")
.and_then(|v| v.as_string())
.map(|s| s.to_string())
- .unwrap_or_else(|| JsonFile::encode(repo));
+ {
+ Some(url) => url,
+ None => JsonFile::encode(repo)?,
+ };
io.write(&format!("[{}] <info>{}</info> {}", name, r#type, url));
}
}
+
+ Ok(())
}
/// PHP: private function suggestTypeForAdd(): \Closure (a static closure — `this` unused)
@@ -352,7 +357,7 @@ impl Command for RepositoryCommand {
match action.as_str() {
"list" | "ls" | "show" => {
- self.list_repositories(repos);
+ self.list_repositories(repos)?;
Ok(0)
}
"add" => {