From 3498bb1ca00ab7d051d296b8d482bea987a00fa4 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Thu, 25 Jun 2026 17:02:11 +0900 Subject: test: port 24 command/repository/package/util tests; add TlsHelper Port command (9), util gitlab/forgejo/tls (6), package (6), repository (3) tests. Implement TlsHelper. Fix porting bugs: config_command extra merge, RootAliasPackage setters, ValidatingArrayLoader isset, repository_factory name generation, forgejo exception code, version_parser error chaining. Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/shirabe/src/command/config_command.rs | 29 ++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'crates/shirabe/src/command') diff --git a/crates/shirabe/src/command/config_command.rs b/crates/shirabe/src/command/config_command.rs index 7bd65b6..308d557 100644 --- a/crates/shirabe/src/command/config_command.rs +++ b/crates/shirabe/src/command/config_command.rs @@ -823,14 +823,27 @@ impl Command for ConfigCommand { PhpMixed::List(value.as_list().cloned().unwrap_or_default()), ); } else { - // PHP "+" operator on arrays: keep keys from left, fill from right - let mut merged: IndexMap = - value.as_array().cloned().unwrap_or_default(); - if let Some(cv) = current_value.as_array() { - for (k, v) in cv { - if !merged.contains_key(k) { - merged.insert(k.clone(), v.clone()); - } + // PHP "+" operator on arrays: keep keys from left, fill from right. + // A list participates with its integer indices as keys. + let mut merged: IndexMap = match &value { + PhpMixed::List(l) => l + .iter() + .enumerate() + .map(|(i, v)| (i.to_string(), v.clone())) + .collect(), + _ => value.as_array().cloned().unwrap_or_default(), + }; + let fill: IndexMap = match ¤t_value { + PhpMixed::List(l) => l + .iter() + .enumerate() + .map(|(i, v)| (i.to_string(), v.clone())) + .collect(), + _ => current_value.as_array().cloned().unwrap_or_default(), + }; + for (k, v) in fill { + if !merged.contains_key(&k) { + merged.insert(k, v); } } value = PhpMixed::Array(merged); -- cgit v1.3.1