aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart-vcs/src/downloader/mod.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-08 19:52:18 +0900
committernsfisis <nsfisis@gmail.com>2026-05-08 19:52:18 +0900
commit5cb8fc4e306970764e84bb850da2c56f844c3b12 (patch)
tree0d66f3129a26138fcfee9402616b24929c40a017 /crates/mozart-vcs/src/downloader/mod.rs
parentd83b9ef48775aeb31ba1909b29d5470e6d0ddaaa (diff)
downloadphp-mozart-5cb8fc4e306970764e84bb850da2c56f844c3b12.tar.gz
php-mozart-5cb8fc4e306970764e84bb850da2c56f844c3b12.tar.zst
php-mozart-5cb8fc4e306970764e84bb850da2c56f844c3b12.zip
fix(status): align with Composer's StatusCommand pipeline
Replace the dist-hash tree-diff implementation with Composer's VCS-level status flow: three buckets (errors / unpushed_changes / vcs_version_changes) populated via ChangeReportInterface / DvcsDownloaderInterface / VcsCapableDownloaderInterface, and a bitfield exit code (1|2|4) instead of always 1. Supporting work: - mozart-semver: add normalize_branch (VersionParser::normalizeBranch). - mozart-vcs: extend VcsDownloader trait with unpushed_changes / vcs_reference; port GitDownloader::getUnpushedChanges (HEAD-ref discovery + git diff --name-status remote...branch + two-pass fetch); fix git status invocation to use --untracked-files=no (Composer parity); add hasMetadataRepository preconditions to git/hg/svn local_changes; port VersionGuesser (git/hg/svn dispatch — Fossil omitted, feature branch detection runs sequentially instead of via async promises). - mozart-core: extend LocalPackage with pretty_version, package_type, installation_source, source, dist, extra; add InstallationSource and PackageReference. factory.rs reads them from installed.json. - mozart-registry: new download_manager mirroring DownloadManager::getDownloaderForPackage. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart-vcs/src/downloader/mod.rs')
-rw-r--r--crates/mozart-vcs/src/downloader/mod.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/crates/mozart-vcs/src/downloader/mod.rs b/crates/mozart-vcs/src/downloader/mod.rs
index 7186348..8948921 100644
--- a/crates/mozart-vcs/src/downloader/mod.rs
+++ b/crates/mozart-vcs/src/downloader/mod.rs
@@ -24,8 +24,24 @@ pub trait VcsDownloader {
/// Detect local changes in the working copy.
/// Returns `None` if clean, `Some(diff)` if modified.
+ /// Mirrors `Composer\Downloader\ChangeReportInterface::getLocalChanges`.
fn local_changes(&self, target: &Path) -> Result<Option<String>>;
+ /// Detect commits present locally but not on the tracking remote.
+ /// Returns `None` if there are no unpushed commits or the concept does
+ /// not apply (only `GitDownloader` implements this in Composer's
+ /// `DvcsDownloaderInterface`).
+ fn unpushed_changes(&self, _target: &Path) -> Result<Option<String>> {
+ Ok(None)
+ }
+
+ /// Resolve the working copy's current VCS reference (e.g. commit hash).
+ /// Returns `None` if no reference can be determined. Mirrors
+ /// `Composer\Downloader\VcsCapableDownloaderInterface::getVcsReference`.
+ fn vcs_reference(&self, _target: &Path) -> Result<Option<String>> {
+ Ok(None)
+ }
+
/// Get commit log between two references.
fn commit_logs(&self, from: &str, to: &str, target: &Path) -> Result<String>;
}