diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-25 17:02:11 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-26 00:20:05 +0900 |
| commit | 3498bb1ca00ab7d051d296b8d482bea987a00fa4 (patch) | |
| tree | e10260e5816317f4547847e2a230ea1a87fb2448 /crates/shirabe/src/command | |
| parent | 291b43d132749a61918dca23acef1b639c5333a7 (diff) | |
| download | php-shirabe-3498bb1ca00ab7d051d296b8d482bea987a00fa4.tar.gz php-shirabe-3498bb1ca00ab7d051d296b8d482bea987a00fa4.tar.zst php-shirabe-3498bb1ca00ab7d051d296b8d482bea987a00fa4.zip | |
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) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/command')
| -rw-r--r-- | crates/shirabe/src/command/config_command.rs | 29 |
1 files changed, 21 insertions, 8 deletions
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<String, PhpMixed> = - 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<String, PhpMixed> = 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<String, PhpMixed> = 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); |
