aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command/validate_command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/command/validate_command.rs')
-rw-r--r--crates/shirabe/src/command/validate_command.rs39
1 files changed, 27 insertions, 12 deletions
diff --git a/crates/shirabe/src/command/validate_command.rs b/crates/shirabe/src/command/validate_command.rs
index af8a5ce..a15c819 100644
--- a/crates/shirabe/src/command/validate_command.rs
+++ b/crates/shirabe/src/command/validate_command.rs
@@ -108,13 +108,20 @@ impl ValidateCommand {
);
}
- pub fn execute(&self, input: &dyn InputInterface, output: &dyn OutputInterface) -> Result<i64> {
+ pub fn execute(
+ &mut self,
+ input: &dyn InputInterface,
+ output: &dyn OutputInterface,
+ ) -> Result<i64> {
let file = input
.get_argument("file")
.as_string_opt()
.map(|s| s.to_string())
- .unwrap_or_else(|| Factory::get_composer_file());
- let io = self.get_io();
+ .map(Ok)
+ .unwrap_or_else(Factory::get_composer_file)?;
+ // TODO(phase-b): get_io() takes &mut self via BaseCommand; clone_box to release the borrow.
+ let io_box = self.get_io().clone_box();
+ let io: &dyn IOInterface = io_box.as_ref();
if !std::path::Path::new(&file).exists() {
io.write_error(&format!("<error>{} not found.</error>", file));
@@ -125,7 +132,7 @@ impl ValidateCommand {
return Ok(3);
}
- let validator = ConfigValidator::new(io);
+ let validator = ConfigValidator::new(io.clone_box());
let check_all = if input.get_option("no-check-all").as_bool().unwrap_or(false) {
0
} else {
@@ -147,10 +154,10 @@ impl ValidateCommand {
};
let is_strict = input.get_option("strict").as_bool().unwrap_or(false);
let (mut errors, mut publish_errors, mut warnings) =
- validator.validate(&file, check_all, check_version)?;
+ validator.validate(&file, check_all, check_version);
let mut lock_errors: Vec<String> = vec![];
- let composer = self.create_composer_instance(input, io, vec![])?;
+ let mut composer = self.create_composer_instance(input, io, None, false, None)?;
let check_lock = (check_lock
&& composer
.get_config()
@@ -159,13 +166,17 @@ impl ValidateCommand {
.as_bool()
.unwrap_or(true))
|| input.get_option("check-lock").as_bool().unwrap_or(false);
- let locker = composer.get_locker();
+ // TODO(phase-b): get_missing_requirement_info needs &package from composer while
+ // locker holds &mut composer; cloning lock state isn't trivial. Use todo!() for the
+ // package-arg subexpression below.
+ let locker = composer.get_locker_mut();
if locker.is_locked() && !locker.is_fresh()? {
lock_errors.push("- The lock file is not up to date with the latest changes in composer.json, it is recommended that you run `composer update` or `composer update <package name>`.".to_string());
}
if locker.is_locked() {
- lock_errors.extend(locker.get_missing_requirement_info(composer.get_package(), true)?);
+ // TODO(phase-b): borrows composer twice; use todo!() for the package arg.
+ lock_errors.extend(locker.get_missing_requirement_info(todo!(), true)?);
}
self.output_result(
@@ -195,10 +206,13 @@ impl ValidateCommand {
.as_bool()
.unwrap_or(false)
{
- let local_repo = composer.get_repository_manager().get_local_repository();
- for package in local_repo.get_packages() {
+ let packages = composer
+ .get_repository_manager()
+ .get_local_repository()
+ .get_packages();
+ for package in packages {
let path = composer
- .get_installation_manager()
+ .get_installation_manager_mut()
.get_install_path(package.as_ref());
let path = match path {
Some(p) => p,
@@ -208,7 +222,7 @@ impl ValidateCommand {
if std::path::Path::new(&path).is_dir() && std::path::Path::new(&dep_file).exists()
{
let (mut dep_errors, mut dep_publish_errors, mut dep_warnings) =
- validator.validate(&dep_file, check_all, check_version)?;
+ validator.validate(&dep_file, check_all, check_version);
self.output_result(
io,
@@ -238,6 +252,7 @@ impl ValidateCommand {
let command_event = CommandEvent::new(PluginEvents::COMMAND, "validate", input, output);
let event_code = composer
.get_event_dispatcher()
+ .borrow_mut()
.dispatch(Some(command_event.get_name()), None)?;
Ok(exit_code.max(event_code))