| Age | Commit message (Collapse) | Author |
|
- Extend self.version replacement to conflict, provide, and replace
link types (previously only require and require-dev)
- Only rewrite self.version when VCS metadata is actually removed,
matching Composer's behavior
- Read optimize-autoloader, classmap-authoritative, and apcu-autoloader
from the project's composer.json config section instead of hardcoding
false
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer auto-detects the shell from the $SHELL environment variable
when the shell argument is not provided. Mozart previously required
the argument and errored without it.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Match Composer's ClearCacheCommand behavior:
- Print per-directory status messages (clearing/GC) instead of a single summary
- Skip read-only caches with an informational message
- Print message for non-existent cache directories instead of silently skipping
- Catch filesystem errors and always return exit code 0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer writes advisory and abandoned-package output to stderr,
reserving stdout for JSON format only. Mozart was writing everything
to stdout, which breaks piping and scripting workflows.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer's BumpCommand uses ERROR_LOCK_OUTDATED=2 for stale lock files,
but Mozart was using LOCK_FILE_INVALID=4. Define a local constant to
avoid conflicting with the global exit code registry.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
symlink detection
- Route headers and hints to stderr, package paths to stdout
- Show full install path instead of vendor/<name> (M)
- Detect symlinked packages and report instead of diffing
- Add verbose hint message when not using -v
- Replace std::process::exit(1) with bail_silent for proper cleanup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Replace two-line output (name+counts, indented description) with
Composer's single-line aligned format: padded name, abandoned warning,
and terminal-width-aware description truncation. Remove summary header
and download/faver count display from text output.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
output messages
- Pass --apcu-autoloader and --apcu-autoloader-prefix through to
InstallConfig instead of hardcoding false/None
- Set --audit-format default to "summary" matching Composer behavior
- Print "./composer.json has been updated" after modification
- Print "Running composer update <packages>" before resolution step
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
apcu-prefix implicit enable
- Restrict --prefer-install to source/dist/auto and --audit-format to
table/plain/json/summary via clap value_parser
- Error when --prefer-install is combined with --prefer-source/--prefer-dist
- Wire --download-only through InstallConfig to skip autoloader and installed.json
- Implicitly enable --apcu-autoloader when --apcu-autoloader-prefix is set
- Apply same validation fixes to update, require, remove, create-project commands
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Rewrite composer_home() with Composer-compatible resolution: detect XDG
environment (any XDG_* var or /etc/xdg), prefer existing directories,
and fall back to ~/.composer for legacy systems. Consolidate duplicate
composer_home_dir() from global.rs into shared config_helpers. Accept
no subcommand gracefully with a helpful error instead of a parse error.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Read optimize-autoloader, classmap-authoritative, apcu-autoloader from
composer.json config section. Reject --dev with --no-dev and --strict-psr/
--strict-ambiguous without --optimize. Emit pre/post generation messages
with class count in optimized mode. Track ambiguous class mappings and
exit with code 2 when --strict-ambiguous detects conflicts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Without --locked, prefer vendor/composer/installed.json over composer.lock
to match Composer's data source priority. Add platform packages (php, ext-*,
lib-*) from detect_platform() so queries like `depends php` work. Show a
specific error message when a platform package is not found.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Add 18 missing config keys to config_value_type() including cache-read-only
(was in defaults but unmanageable), audit.* dotted keys, and bool-or-enum
keys like store-auths and bump-after-update. Implement --absolute flag to
resolve *-dir values to absolute paths. Fix render_value() to JSON-encode
arrays and use lowercase "null", matching Composer output.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Emit Composer-compatible stderr messages indicating which source is used
(lock file, vendor dir, or fallback). Detect empty installed.json and
fall back to the lock file with a warning instead of silently succeeding.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer-compatible output
Add value_parser for --format to enable shell completion with valid formats.
Parse @stability suffix (e.g. 1.0@beta) from version constraints before
resolution. Align output messages with Composer: "Searching for the specified
package.", match reporting, and split "Created:" across stderr/stdout.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
launch
Replace simple prefix check in is_valid_url with url::Url::parse() for
structural validation (e.g. "https://" with no host now correctly
rejected). Update Windows open_browser to use `start "web" explorer`
matching Composer's HomeCommand behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Validate license input against SPDX identifiers, also accepting
"proprietary". Interactive mode re-prompts on invalid input;
non-interactive mode exits with an error. Fall back to
COMPOSER_DEFAULT_LICENSE env var when no --license flag is given.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Strip constraint suffixes (`:^2.0`, `=2.0`, ` ^2.0`) from filter args
and replace exact matching with glob pattern matching (`psr/*`) to match
Composer's BumpCommand behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
platform
Remove hardcoded early-return that always marked lib-*, composer-plugin-api,
and composer-runtime-api as Missing. These packages now go through the normal
platform lookup, matching Composer's behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer returns exit code 1 and writes to stderr when no packages
match the reinstall patterns. Mozart was returning 0 with a stdout
message, which could mislead CI pipelines into thinking the command
succeeded.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer errors when more than one of --major-only, --minor-only, or
--patch-only is specified. Mozart was silently giving --major-only
precedence. Now both show and outdated commands validate mutual
exclusivity with the same error message as Composer.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer defaults to "fail" for the --abandoned flag, causing a
non-zero exit code when abandoned packages are detected. Mozart
was defaulting to "report", which only printed warnings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer's JsonFile::encode uses JSON_PRETTY_PRINT with 4-space indent.
Mozart was using serde_json::to_string_pretty which defaults to 2-space.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer outputs JSON with 4-space indentation. Mozart was using
serde_json::to_string_pretty which defaults to 2-space. Switch to
a custom PrettyFormatter with explicit 4-space indent.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
behavior
Distinguish "Package not found" from "Invalid or missing repository URL"
like Composer's HomeCommand. Add <info> color formatting for --show output,
remove the unnecessary "Opening ... in browser" message, and emit a stderr
message when no package is specified.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Replace clap's built-in --version with custom handler that outputs
Composer-compatible version info: Mozart version line, PHP version
with binary path, and diagnose hint. Add detect_php_version_and_binary()
to mozart-core platform module.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Deduplicate --only-vendor results to unique vendor names instead of
showing full package names. Align JSON output schema with Composer by
emitting only name, description, url, and abandoned fields.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Parse the `abandoned` field from Packagist search API responses and
show a "! Abandoned !" warning inline, matching Composer's behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Introduce a Symfony Console-style tag macro that replaces verbose
patterns like `console::info(&format!("text {name}"))` with
`console_format!("<info>text {name}</info>")`. Supports all 6 tag
types (info, comment, error, question, highlight, warning) with
format argument distribution across multiple tagged segments.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
dependency exit codes
- Replace simple to_lowercase() with sanitize_package_name_component()
for uppercase name suggestions (e.g. MyCompany/MyLibrary → my-company/my-library)
- Return error/warning counts from validate_dependencies() and merge
them into the final exit code, matching Composer behavior
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Deduplicate suggestions by (source, target) pair matching Composer's
map-based approach where last reason wins. Add ANSI color formatting
using console::info (green) and console::comment (yellow) for package
names, suggesters, and the transitive hint message.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Return exit code 1 when no dependents are found or no packages are
installed, matching Composer's behavior. Align error messages: use
"Could not find package" and "There is no installed package depending
on" phrasing. Write errors to stderr instead of stdout. Apply the
same no-install fix to the prohibits command.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Reject simultaneous --only-name and --only-vendor flags with an error,
and reject unsupported --format values with exit code 1, matching
Composer's input validation behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- "Nothing to bump." → "No requirements to update in <path>."
- "N constraint(s) bumped successfully." → "<path> has been updated (N changes)."
- Dry-run now shows "<path> would be updated with:" followed by
" - require.<pkg>: <ver>" per change, matching Composer's format
- Also update bump message in update command for consistency
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Add blank lines between groups, use 78-dash separator in dual mode,
sanitize reason strings by replacing newlines and stripping control
characters, and include root package name in direct-deps filter so
its suggestions are correctly shown by default.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Composer caps the repo cache at 1 GB during garbage collection, but
Mozart was passing u64::MAX (no limit). Align with Composer behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Replace direct println\! with console.write_stdout() so the about
command honors verbosity settings, matching Composer's behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
absent
Match Composer behavior: --dry-run now returns exit code 1 when
un-bumped constraints are detected (useful for CI). Also warn when
the package type field is missing, since Composer treats it as
"library" by default.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Extends the PHP inline script to query constants and functions for 14
library packages (lib-pcre, lib-openssl, lib-curl, lib-libxml, etc.)
and parses the new LIB:name:version output format. This fixes SAT
resolver failures for packages requiring lib-* constraints like
lib-pcre >=7.0.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Virtual/meta packages (e.g. "psr/http-client-implementation") don't
exist on Packagist and caused a fatal error during transitive dependency
exploration. These packages are resolved via provides/replaces from
other packages already in the pool, so 404 errors are now skipped.
Also fix PoolBuilder::next_pending() repeatedly returning the same
virtual package name by tracking explored names in a HashSet, since
virtual packages are never added to inputs and the old check
(inputs.any(name)) never matched them.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
The install command succeeds with a warning when no lock file exists,
rather than failing with a suggestion to run update.
|
|
|
|
Re-resolve dependencies and compare with the current lock file to
detect packages that are no longer reachable from root requirements.
Removes them from the lock file and re-installs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Walk vendor/<vendor>/<package>/composer.json files and run the same
manifest validations on each dependency, reporting per-package errors
and warnings with a summary count.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- --patch-only: restrict updates to patch-level changes by pinning
packages back to locked versions when major.minor differs
- --root-reqs: auto-populate update list with root require/require-dev
packages when no explicit packages are specified
- --bump-after-update: bump composer.json version constraints to match
resolved versions after update, with dev/no-dev/all modes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Split AND constraints (e.g. ">=1.0 <2.0" or ">=1.0,<2.0") into parts
and bump only the lower-bound operator (>=, ^, ~) while preserving
upper-bound operators (<, <=, \!=) unchanged.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Use previously stored but unused fields: show installed_version in
advisory tables/plain/JSON output, and package version in abandoned
package output. Remove unused unlockable_ids field from LockTransaction.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Replace unreachable\!() with proper @dev suffix output. Although Dev
is normally handled by an early return, this prevents a panic if the
control flow is ever refactored.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Parse `==` as an exact match operator, identical to `=`. Previously
the `=` handler would strip only one `=`, leaving `=1.2.3` which
failed to parse as a version number.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|