From bed0cd33ca32b95aed9d65891f97649a6f9d0069 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 18 Aug 2026 06:38:26 +0900 Subject: fix(process-executor): model commands as a CommandLine enum Commands were carried as `PhpMixed`, whose `String`/`List` variants do not tell a shell command line apart from an argv list at the type level. `Perforce::execute_command` and `Git::run_command` therefore funnelled string commands through `execute_args`, spawning `p4 set` or `git command` as a single argument instead of running it through a shell as PHP does; their tests were written against that shape. Introduce `CommandLine::{Shell, Args}` and use it for every `ProcessExecutor` entry point, the mock expectation queue and the `Git::run_command` callables. The unreachable "Invalid command type" branches disappear with it, and the affected tests go back to the string expectations the PHP suite uses. Co-Authored-By: Claude Opus 5 (1M context) --- crates/shirabe/src/package/locker.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'crates/shirabe/src/package') diff --git a/crates/shirabe/src/package/locker.rs b/crates/shirabe/src/package/locker.rs index 17911c6e..36edd29f 100644 --- a/crates/shirabe/src/package/locker.rs +++ b/crates/shirabe/src/package/locker.rs @@ -808,7 +808,7 @@ impl Locker { let command = GitUtil::build_rev_list_command(&self.process, args); let mut output = PhpMixed::Null; if 0 == self.process.borrow_mut().execute( - PhpMixed::List(command.into_iter().map(PhpMixed::String).collect()), + command, &mut output, path.as_deref(), )? { @@ -828,14 +828,14 @@ impl Locker { "hg" => { let mut output = PhpMixed::Null; if 0 == self.process.borrow_mut().execute( - PhpMixed::List(vec![ - PhpMixed::String("hg".to_string()), - PhpMixed::String("log".to_string()), - PhpMixed::String("--template".to_string()), - PhpMixed::String("{date|hgdate}".to_string()), - PhpMixed::String("-r".to_string()), - PhpMixed::String(source_ref), - ]), + vec![ + "hg".to_string(), + "log".to_string(), + "--template".to_string(), + "{date|hgdate}".to_string(), + "-r".to_string(), + source_ref, + ], &mut output, path.as_deref(), )? && let Some(m) = preg_match( -- cgit v1.3.1-4-g156e