From 5cb8fc4e306970764e84bb850da2c56f844c3b12 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 8 May 2026 19:52:18 +0900 Subject: fix(status): align with Composer's StatusCommand pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- crates/mozart-vcs/src/downloader/hg.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'crates/mozart-vcs/src/downloader/hg.rs') diff --git a/crates/mozart-vcs/src/downloader/hg.rs b/crates/mozart-vcs/src/downloader/hg.rs index bfffa07..926cfa8 100644 --- a/crates/mozart-vcs/src/downloader/hg.rs +++ b/crates/mozart-vcs/src/downloader/hg.rs @@ -46,11 +46,15 @@ impl VcsDownloader for HgDownloader { } fn local_changes(&self, target: &Path) -> Result> { + if !target.join(".hg").is_dir() { + return Ok(None); + } let output = self.hg_util.execute(&["st"], Some(target))?; - if output.stdout.trim().is_empty() { + let trimmed = output.stdout.trim(); + if trimmed.is_empty() { Ok(None) } else { - Ok(Some(output.stdout)) + Ok(Some(trimmed.to_string())) } } -- cgit v1.3.1