diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-21 23:38:32 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-21 23:38:32 +0900 |
| commit | 52310761f67220c9c075cd847205825a720035ee (patch) | |
| tree | 0528fc94aea7853e41313e19964d74a958dae9c9 /crates/mozart/src/archiver.rs | |
| parent | 92da9e37c68beb180e45e550fba5acd7d28dca27 (diff) | |
| download | php-mozart-52310761f67220c9c075cd847205825a720035ee.tar.gz php-mozart-52310761f67220c9c075cd847205825a720035ee.tar.zst php-mozart-52310761f67220c9c075cd847205825a720035ee.zip | |
feat(console): add structured error handling, verbosity, and suggestions
Implement Phase 7.2 error handling & UX infrastructure:
- Add exit_code module with MozartError, bail()/bail_silent() helpers,
and Composer-compatible exit code constants (0-5, 100)
- Redesign Console struct with Verbosity enum (Quiet/Normal/Verbose/
VeryVerbose/Debug), ANSI auto-detection via IsTerminal, and
verbosity-gated output methods (info/verbose/debug/error)
- Thread Console through all 33 command execute() signatures
- Replace all std::process::exit() calls with structured MozartError
returns handled in main()
- Migrate eprintln\! status messages to console.info() for quiet-mode
suppression
- Add suggest module with Levenshtein distance and "Did you mean?"
formatting for future package name suggestions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart/src/archiver.rs')
| -rw-r--r-- | crates/mozart/src/archiver.rs | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/crates/mozart/src/archiver.rs b/crates/mozart/src/archiver.rs index 2deb96f..57985ef 100644 --- a/crates/mozart/src/archiver.rs +++ b/crates/mozart/src/archiver.rs @@ -974,7 +974,12 @@ mod tests { no_ansi: false, }; - execute(&args, &cli).unwrap(); + let console = crate::console::Console { + interactive: false, + verbosity: crate::console::Verbosity::Normal, + decorated: false, + }; + execute(&args, &cli, &console).unwrap(); let archive_path = out.path().join("test-archive.tar"); assert!(archive_path.exists(), "tar archive was not created"); @@ -1038,7 +1043,12 @@ mod tests { no_ansi: false, }; - execute(&args, &cli).unwrap(); + let console = crate::console::Console { + interactive: false, + verbosity: crate::console::Verbosity::Normal, + decorated: false, + }; + execute(&args, &cli, &console).unwrap(); let archive_path = out.path().join("test-archive.zip"); assert!(archive_path.exists(), "zip archive was not created"); @@ -1088,7 +1098,12 @@ mod tests { no_ansi: false, }; - execute(&args, &cli).unwrap(); + let console = crate::console::Console { + interactive: false, + verbosity: crate::console::Verbosity::Normal, + decorated: false, + }; + execute(&args, &cli, &console).unwrap(); assert!(custom_out.path().join("custom.tar").exists()); } @@ -1137,7 +1152,12 @@ mod tests { no_ansi: false, }; - execute(&args, &cli).unwrap(); + let console = crate::console::Console { + interactive: false, + verbosity: crate::console::Verbosity::Normal, + decorated: false, + }; + execute(&args, &cli, &console).unwrap(); assert!(out.path().join("my-custom-name.tar").exists()); } @@ -1190,7 +1210,12 @@ mod tests { no_ansi: false, }; - execute(&args, &cli).unwrap(); + let console = crate::console::Console { + interactive: false, + verbosity: crate::console::Verbosity::Normal, + decorated: false, + }; + execute(&args, &cli, &console).unwrap(); let tar_path = out.path().join("filtered.tar"); assert!(tar_path.exists()); @@ -1255,7 +1280,12 @@ mod tests { no_ansi: false, }; - execute(&args, &cli).unwrap(); + let console = crate::console::Console { + interactive: false, + verbosity: crate::console::Verbosity::Normal, + decorated: false, + }; + execute(&args, &cli, &console).unwrap(); let tar_path = out.path().join("with-excludes.tar"); assert!(tar_path.exists()); @@ -1321,7 +1351,12 @@ mod tests { no_ansi: false, }; - execute(&args, &cli).unwrap(); + let console = crate::console::Console { + interactive: false, + verbosity: crate::console::Verbosity::Normal, + decorated: false, + }; + execute(&args, &cli, &console).unwrap(); let tar_path = out.path().join("unfiltered.tar"); assert!(tar_path.exists()); @@ -1383,7 +1418,12 @@ mod tests { no_ansi: false, }; - let result = execute(&args, &cli); + let console = crate::console::Console { + interactive: false, + verbosity: crate::console::Verbosity::Normal, + decorated: false, + }; + let result = execute(&args, &cli, &console); assert!(result.is_err()); assert!(result.unwrap_err().to_string().contains("rar")); } |
