From cccd901aef23a0ff7e9f87a4a57e9074c816a06f Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 6 Jun 2026 02:51:49 +0900 Subject: fix(command): use full pretty version and drop stale phase-b TODOs LicensesCommand now renders the root package version via get_full_pretty_version, matching PHP getFullPrettyVersion, and holds the root package handle directly instead of snapshotting fields. Also align update/mark-alias operations on get_full_pretty_version and remove the now-stale phase-b TODO markers in status and licenses commands. Co-Authored-By: Claude Opus 4.8 --- crates/shirabe/src/command/licenses_command.rs | 42 ++++++++++++++-------- crates/shirabe/src/command/status_command.rs | 1 - .../operation/mark_alias_installed_operation.rs | 2 +- .../operation/mark_alias_uninstalled_operation.rs | 2 +- .../operation/update_operation.rs | 8 ++--- 5 files changed, 33 insertions(+), 22 deletions(-) (limited to 'crates/shirabe') diff --git a/crates/shirabe/src/command/licenses_command.rs b/crates/shirabe/src/command/licenses_command.rs index e66267f..d870acb 100644 --- a/crates/shirabe/src/command/licenses_command.rs +++ b/crates/shirabe/src/command/licenses_command.rs @@ -89,10 +89,7 @@ impl LicensesCommand { .borrow_mut() .dispatch(Some(command_event.get_name()), None); - // TODO(phase-b): snapshot root package fields up-front to release the immutable borrow. - let root_name = composer.get_package().get_pretty_name().to_string(); - let root_version = composer.get_package().get_pretty_version().to_string(); - let root_licenses_snap = composer.get_package().get_license().clone(); + let root = composer.get_package(); let packages = if input.get_option("locked").as_bool().unwrap_or(false) { let locker = composer.get_locker().clone(); @@ -105,11 +102,12 @@ impl LicensesCommand { } let no_dev = input.get_option("no-dev").as_bool().unwrap_or(false); let repo = locker.get_locked_repository(!no_dev)?; - ::get_packages(&mut *repo.borrow_mut())? + repo.borrow_mut().get_packages()? } else { let repository_manager = composer.get_repository_manager().clone(); let repository_manager = repository_manager.borrow(); let repo = repository_manager.get_local_repository(); + if input.get_option("no-dev").as_bool().unwrap_or(false) { RepositoryUtils::filter_required_packages( &repo.get_packages()?, @@ -121,11 +119,10 @@ impl LicensesCommand { repo.get_packages()? } }; - let _ = composer.get_package(); - let pkg_pi: Vec = + let packages: Vec = packages.into_iter().map(|p| p.into()).collect(); - let packages = PackageSorter::sort_packages_alphabetically(pkg_pi); + let packages = PackageSorter::sort_packages_alphabetically(packages); let io = self.get_io(); let format = input @@ -135,14 +132,20 @@ impl LicensesCommand { .to_string(); match format.as_str() { "text" => { - let root_licenses = root_licenses_snap.clone(); + let root_licenses = root.get_license(); let licenses_str = if root_licenses.is_empty() { "none".to_string() } else { root_licenses.join(", ") }; - io.write(&format!("Name: {}", root_name)); - io.write(&format!("Version: {}", root_version)); + io.write(&format!( + "Name: {}", + root.get_pretty_name() + )); + io.write(&format!( + "Version: {}", + root.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev) + )); io.write(&format!("Licenses: {}", licenses_str)); io.write("Dependencies:"); io.write(""); @@ -178,7 +181,7 @@ impl LicensesCommand { table.add_row(PhpMixed::List(vec![ Box::new(PhpMixed::String(name)), Box::new(PhpMixed::String(package.get_full_pretty_version( - false, + true, crate::package::DisplayMode::SourceRefIfDev, ))), Box::new(PhpMixed::String(licenses_str)), @@ -216,12 +219,21 @@ impl LicensesCommand { } let mut output_map: IndexMap = IndexMap::new(); - output_map.insert("name".to_string(), PhpMixed::String(root_name.clone())); + output_map.insert( + "name".to_string(), + PhpMixed::String(root.get_pretty_name().clone()), + ); output_map.insert( "version".to_string(), - PhpMixed::String(root_version.clone()), + PhpMixed::String( + root.get_full_pretty_version( + true, + crate::package::DisplayMode::SourceRefIfDev, + ) + .clone(), + ), ); - let root_licenses = root_licenses_snap.clone(); + let root_licenses = root.get_license(); output_map.insert( "license".to_string(), PhpMixed::List( diff --git a/crates/shirabe/src/command/status_command.rs b/crates/shirabe/src/command/status_command.rs index e729e1f..f651e59 100644 --- a/crates/shirabe/src/command/status_command.rs +++ b/crates/shirabe/src/command/status_command.rs @@ -134,7 +134,6 @@ impl StatusCommand { }; let mut downloader = downloader_handle.borrow_mut(); - // TODO(phase-b): isinstance checks using ChangeReportInterface/VcsCapableDownloaderInterface/DvcsDownloaderInterface if let Some(change_reporter) = downloader.as_change_report_interface() { if std::path::Path::new(&target_dir).is_symlink() { errors.insert( diff --git a/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs b/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs index 4ef436b..f5cb825 100644 --- a/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs +++ b/crates/shirabe/src/dependency_resolver/operation/mark_alias_installed_operation.rs @@ -41,7 +41,7 @@ impl OperationInterface for MarkAliasInstalledOperation { self.package.get_alias_of().get_pretty_name(), self.package .get_alias_of() - .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev,), + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev), ) } diff --git a/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs b/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs index 41b0979..f8314f5 100644 --- a/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs +++ b/crates/shirabe/src/dependency_resolver/operation/mark_alias_uninstalled_operation.rs @@ -41,7 +41,7 @@ impl OperationInterface for MarkAliasUninstalledOperation { self.package.get_alias_of().get_pretty_name(), self.package .get_alias_of() - .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev,), + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev), ) } diff --git a/crates/shirabe/src/dependency_resolver/operation/update_operation.rs b/crates/shirabe/src/dependency_resolver/operation/update_operation.rs index 104f4ef..0bf3e35 100644 --- a/crates/shirabe/src/dependency_resolver/operation/update_operation.rs +++ b/crates/shirabe/src/dependency_resolver/operation/update_operation.rs @@ -32,10 +32,10 @@ impl UpdateOperation { target_package: PackageInterfaceHandle, lock: bool, ) -> String { - let mut from_version = - initial_package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRef); - let mut to_version = - target_package.get_full_pretty_version(false, crate::package::DisplayMode::SourceRef); + let mut from_version = initial_package + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev); + let mut to_version = target_package + .get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev); if from_version == to_version && initial_package.get_source_reference() != target_package.get_source_reference() -- cgit v1.3.1