aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 02:51:49 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 02:51:49 +0900
commitcccd901aef23a0ff7e9f87a4a57e9074c816a06f (patch)
tree3929a3f165419d43e69154fdf173771fbcbb5fad /crates/shirabe/src/command
parentad78317ecf8ffadae3088452b6b52e2d476fadeb (diff)
downloadphp-shirabe-cccd901aef23a0ff7e9f87a4a57e9074c816a06f.tar.gz
php-shirabe-cccd901aef23a0ff7e9f87a4a57e9074c816a06f.tar.zst
php-shirabe-cccd901aef23a0ff7e9f87a4a57e9074c816a06f.zip
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 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/command')
-rw-r--r--crates/shirabe/src/command/licenses_command.rs42
-rw-r--r--crates/shirabe/src/command/status_command.rs1
2 files changed, 27 insertions, 16 deletions
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)?;
- <crate::repository::LockArrayRepository as crate::repository::RepositoryInterface>::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<crate::package::PackageInterfaceHandle> =
+ let packages: Vec<crate::package::PackageInterfaceHandle> =
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: <comment>{}</comment>", root_name));
- io.write(&format!("Version: <comment>{}</comment>", root_version));
+ io.write(&format!(
+ "Name: <comment>{}</comment>",
+ root.get_pretty_name()
+ ));
+ io.write(&format!(
+ "Version: <comment>{}</comment>",
+ root.get_full_pretty_version(true, crate::package::DisplayMode::SourceRefIfDev)
+ ));
io.write(&format!("Licenses: <comment>{}</comment>", 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<String, PhpMixed> = 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(