aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-25 17:02:11 +0900
committernsfisis <nsfisis@gmail.com>2026-06-26 00:20:05 +0900
commit3498bb1ca00ab7d051d296b8d482bea987a00fa4 (patch)
treee10260e5816317f4547847e2a230ea1a87fb2448 /crates/shirabe/src/command
parent291b43d132749a61918dca23acef1b639c5333a7 (diff)
downloadphp-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.rs29
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 &current_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);