aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/constraint.rs
AgeCommit message (Collapse)Author
2026-02-22chore: remove unused filesnsfisis
2026-02-22refactor(workspace): split monolithic crate into 6 workspace cratesnsfisis
Extract modules from the single `mozart` crate into 5 focused library crates to improve compilation parallelism and architectural clarity: - mozart-constraint: version constraint parser (independent) - mozart-core: base types, console, validation, platform utilities - mozart-archiver: archive creation (tar, zip, bzip2) - mozart-registry: Packagist API, cache, resolver, downloader, lockfile - mozart-autoload: autoloader generation and PHP scanner Refactor Console::from_cli and build_cache_config to accept primitive args instead of &Cli to break circular dependencies. Introduce [workspace.dependencies] for centralized version management. Remove 9 unused direct dependencies from the CLI crate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21test(constraint): add comprehensive unit tests for version parsing and matchingnsfisis
Add ~136 tests across 7 categories: version parsing edge cases, version ordering, constraint parsing, constraint matching, internal functions, Composer behavioral compatibility, and divergence investigation. One test (double equals) is #[ignore]d due to == operator not being supported. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21feat(resolver): add inline and branch alias supportnsfisis
Inline aliases ("1.0.x-dev as 1.0.0") now use the right side for constraint matching via parse_for_constraint(), while parse() keeps the left side for version identity. Branch aliases from extra.branch-alias metadata create synthetic dev-stability entries in the resolver, allowing constraints like ^2.0 to match dev-master aliased to 2.x-dev. Real releases take precedence via entry().or_insert(). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21feat(install): implement install command with lock-based package installationnsfisis
Replaces the todo!() stub with a full implementation that reads composer.lock, computes install/update/skip/remove operations by comparing against vendor/composer/installed.json, downloads packages via the downloader module, and writes the updated installed registry. Handles edge cases: missing lock file, stale lock file, no dist info, empty packages, --dry-run, --no-dev, deprecated flags, and vendor directory cleanup after removals. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21feat(core): add version constraint, lockfile, installed registry, and ↵nsfisis
downloader modules Phase 1 infrastructure for the install command: - constraint: Composer-compatible version parsing and constraint matching (caret, tilde, wildcard, hyphen range, OR/AND combinators) - lockfile: composer.lock read/write with content-hash computation - installed: vendor/composer/installed.json registry (Composer 2.x format) - downloader: dist archive download with SHA-1 verification and zip/tar.gz extraction with top-level directory stripping Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>