diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-20 08:33:49 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-20 08:33:57 +0900 |
| commit | f31b101ce1e921a026ba234b1f0a83b0392bc118 (patch) | |
| tree | b7ac2aa84d71ebd162cc21aeab0240e7e0544988 /crates/shirabe/src/command/status_command.rs | |
| parent | 5e31fa33c3b5cf726a57a063b8e7a070869250fe (diff) | |
| download | php-shirabe-f31b101ce1e921a026ba234b1f0a83b0392bc118.tar.gz php-shirabe-f31b101ce1e921a026ba234b1f0a83b0392bc118.tar.zst php-shirabe-f31b101ce1e921a026ba234b1f0a83b0392bc118.zip | |
fix(compile): fix all remaining compile errors
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/command/status_command.rs')
| -rw-r--r-- | crates/shirabe/src/command/status_command.rs | 87 |
1 files changed, 52 insertions, 35 deletions
diff --git a/crates/shirabe/src/command/status_command.rs b/crates/shirabe/src/command/status_command.rs index bc81a21..b62b4d6 100644 --- a/crates/shirabe/src/command/status_command.rs +++ b/crates/shirabe/src/command/status_command.rs @@ -39,44 +39,52 @@ impl StatusCommand { ); } - pub fn execute(&self, input: &dyn InputInterface, output: &dyn OutputInterface) -> Result<i64> { + pub fn execute( + &mut self, + input: &dyn InputInterface, + output: &dyn OutputInterface, + ) -> Result<i64> { let composer = self.require_composer(None, None)?; // TODO(plugin): dispatch CommandEvent let command_event = CommandEvent::new(PluginEvents::COMMAND, "status", input, output); composer .get_event_dispatcher() + .borrow_mut() .dispatch(Some(command_event.get_name()), None); - composer.get_event_dispatcher().dispatch_script( - ScriptEvents::PRE_STATUS_CMD, - true, - vec![], - indexmap::IndexMap::new(), - ); + composer + .get_event_dispatcher() + .borrow_mut() + .dispatch_script( + ScriptEvents::PRE_STATUS_CMD, + true, + vec![], + indexmap::IndexMap::new(), + ); let exit_code = self.do_execute(input)?; - composer.get_event_dispatcher().dispatch_script( - ScriptEvents::POST_STATUS_CMD, - true, - vec![], - indexmap::IndexMap::new(), - ); + composer + .get_event_dispatcher() + .borrow_mut() + .dispatch_script( + ScriptEvents::POST_STATUS_CMD, + true, + vec![], + indexmap::IndexMap::new(), + ); Ok(exit_code) } - fn do_execute(&self, input: &dyn InputInterface) -> Result<i64> { - let composer = self.require_composer(None, None)?; - - let installed_repo = composer.get_repository_manager().get_local_repository(); - - let dm = composer.get_download_manager(); - let im = composer.get_installation_manager(); + fn do_execute(&mut self, input: &dyn InputInterface) -> Result<i64> { + let mut composer = self.require_composer(None, None)?; + // TODO(phase-b): release the &mut self borrow held by get_io via clone_box. + let io_box = self.get_io().clone_box(); + let io: &dyn IOInterface = io_box.as_ref(); let mut errors: IndexMap<String, String> = IndexMap::new(); - let io = self.get_io(); let mut unpushed_changes: IndexMap<String, String> = IndexMap::new(); let mut vcs_version_changes: IndexMap<String, IndexMap<String, IndexMap<String, String>>> = IndexMap::new(); @@ -88,21 +96,34 @@ impl StatusCommand { .get_process_executor() .map(std::rc::Rc::clone) .unwrap_or_else(|| std::rc::Rc::new(std::cell::RefCell::new(ProcessExecutor::new(io)))); - let guesser = VersionGuesser::new( + let mut guesser = VersionGuesser::new( std::rc::Rc::clone(composer.get_config()), std::rc::Rc::clone(&process_executor), parser.clone(), - Some(io.clone_box()), + Some(io_box.clone_box()), ); let dumper = ArrayDumper::new(); - for package in installed_repo.get_canonical_packages() { - let downloader = dm.borrow().get_downloader_for_package(package.as_ref()); - let target_dir = im.get_install_path(package.as_ref()); + let dm = composer.get_download_manager().clone(); + let packages: Vec<_> = composer + .get_repository_manager() + .get_local_repository() + .get_canonical_packages(); + for package in packages { + let target_dir = composer + .get_installation_manager_mut() + .get_install_path(package.as_ref()); let target_dir = match target_dir { Some(d) => d, None => continue, }; + // TODO(phase-b): downloader borrow lifetime tied to dm.borrow() temporary; restructure later. + let dm_borrow = dm.borrow(); + let downloader: &dyn crate::downloader::downloader_interface::DownloaderInterface = + match dm_borrow.get_downloader_for_package(package.as_ref())? { + Some(d) => d, + None => continue, + }; // TODO(phase-b): isinstance checks using ChangeReportInterface/VcsCapableDownloaderInterface/DvcsDownloaderInterface if let Some(change_reporter) = downloader.as_change_report_interface() { @@ -132,12 +153,11 @@ impl StatusCommand { }; let current_version = - guesser.guess_version(&dumper.dump(package.as_ref()), &target_dir); + guesser.guess_version(&dumper.dump(package.as_ref()), &target_dir)?; if let (Some(prev_ref), Some(cur_version)) = (&previous_ref, ¤t_version) { - if cur_version.get("commit").map(|s| s.as_str()) != Some(prev_ref.as_str()) - && cur_version.get("pretty_version").map(|s| s.as_str()) - != Some(prev_ref.as_str()) + if cur_version.commit.as_deref() != Some(prev_ref.as_str()) + && cur_version.pretty_version.as_deref() != Some(prev_ref.as_str()) { let mut previous = IndexMap::new(); previous.insert( @@ -149,14 +169,11 @@ impl StatusCommand { let mut current = IndexMap::new(); current.insert( "version".to_string(), - cur_version - .get("pretty_version") - .cloned() - .unwrap_or_default(), + cur_version.pretty_version.clone().unwrap_or_default(), ); current.insert( "ref".to_string(), - cur_version.get("commit").cloned().unwrap_or_default(), + cur_version.commit.clone().unwrap_or_default(), ); let mut change = IndexMap::new(); |
