aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command/licenses_command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/command/licenses_command.rs')
-rw-r--r--crates/shirabe/src/command/licenses_command.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/crates/shirabe/src/command/licenses_command.rs b/crates/shirabe/src/command/licenses_command.rs
index 3c1745a..3be4df3 100644
--- a/crates/shirabe/src/command/licenses_command.rs
+++ b/crates/shirabe/src/command/licenses_command.rs
@@ -107,8 +107,7 @@ impl Command for LicensesCommand {
input: Rc<RefCell<dyn InputInterface>>,
output: Rc<RefCell<dyn OutputInterface>>,
) -> anyhow::Result<i64> {
- let composer = self.require_composer(None, None)?;
- let mut composer = crate::command::composer_full_mut(&composer);
+ let composer_handle = self.require_composer(None, None)?;
// TODO(plugin): dispatch COMMAND event for plugin hooks
let command_event = CommandEvent::new(
@@ -117,11 +116,14 @@ impl Command for LicensesCommand {
input.clone(),
output.clone(),
);
- composer
- .get_event_dispatcher()
+ // The event dispatcher reads back through the shared Composer handle (script listeners), so the
+ // dispatch must run while no other borrow of that handle is held.
+ let event_dispatcher = composer_handle.borrow_partial().get_event_dispatcher();
+ event_dispatcher
.borrow_mut()
.dispatch(Some(command_event.get_name()), None);
+ let mut composer = crate::command::composer_full_mut(&composer_handle);
let root = composer.get_package();
let packages = if input