diff --git a/src/instance.rs b/src/instance.rs index 321db95..d70a465 100644 --- a/src/instance.rs +++ b/src/instance.rs @@ -5,7 +5,7 @@ use std::{ }; use globset::{Glob, GlobSet, GlobSetBuilder}; -use log::warn; +use log::{error, warn}; use crate::{ file_conflict_solver::ConflictSolver, @@ -20,7 +20,7 @@ pub fn insert_mod_to_instance( from_mod: &ModConfig, files: &[ModFile], priority: isize, -) { +) -> bool { let mut solver = ConflictSolver::new(); let mut installed_files: Vec<(ModFile, &InstalledMod)> = Vec::new(); @@ -40,7 +40,14 @@ pub fn insert_mod_to_instance( let new_mod = InstalledMod::new(from_mod.id(), priority); for file in files { if let Some(conflict) = solver.add_file(file, &new_mod) { - // TODO: Return conflict + error!( + "File conflict detected at: {} between {} and {}", + conflict.rhs_file.dst().to_string_lossy(), + conflict.lhs_mod.mod_id(), + conflict.rhs_mod.mod_id() + ); + + return false; } } @@ -64,6 +71,8 @@ pub fn insert_mod_to_instance( for (_, installed_mod) in map { instance.update_or_create_mod(&installed_mod); } + + true } pub fn files_to_install_mod( diff --git a/src/main.rs b/src/main.rs index 1d24936..3145186 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,7 +39,9 @@ fn command_add(root_config: &RootConfig, instance_id: &str, mod_id: &str) -> any let files = files_to_install_mod(root_config, &instance, mod_to_install)?; - insert_mod_to_instance(&mut instance, mod_to_install, &files, 0); + if !insert_mod_to_instance(&mut instance, mod_to_install, &files, 0) { + return Err(anyhow!("File conflict")); + } instance.save_to_file()?;