aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/console/command/command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/command/command.rs')
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/command/command.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/command/command.rs b/crates/shirabe-external-packages/src/symfony/console/command/command.rs
index e737b58..2d94ad2 100644
--- a/crates/shirabe-external-packages/src/symfony/console/command/command.rs
+++ b/crates/shirabe-external-packages/src/symfony/console/command/command.rs
@@ -394,6 +394,18 @@ pub trait Command: std::fmt::Debug + shirabe_php_shim::AsAny {
input: Rc<RefCell<dyn InputInterface>>,
output: Rc<RefCell<dyn OutputInterface>>,
) -> anyhow::Result<i64> {
+ self.base_run(input, output)
+ }
+
+ /// The base-class (`Command`) body of `run`, as PHP's `Command::run`. Proxy commands such as
+ /// `GlobalCommand` override `run` but still call `base_run` to delegate to the base behavior,
+ /// matching PHP's `parent::run($input, $output)`. It must not be overridden, or the late
+ /// binding of `initialize`/`interact`/`execute` to the concrete command breaks.
+ fn base_run(
+ &mut self,
+ input: Rc<RefCell<dyn InputInterface>>,
+ output: Rc<RefCell<dyn OutputInterface>>,
+ ) -> anyhow::Result<i64> {
// add the application arguments and options
self.merge_application_definition(true);