display file conflict to user
This commit is contained in:
@@ -5,7 +5,7 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use globset::{Glob, GlobSet, GlobSetBuilder};
|
use globset::{Glob, GlobSet, GlobSetBuilder};
|
||||||
use log::warn;
|
use log::{error, warn};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
file_conflict_solver::ConflictSolver,
|
file_conflict_solver::ConflictSolver,
|
||||||
@@ -20,7 +20,7 @@ pub fn insert_mod_to_instance(
|
|||||||
from_mod: &ModConfig,
|
from_mod: &ModConfig,
|
||||||
files: &[ModFile],
|
files: &[ModFile],
|
||||||
priority: isize,
|
priority: isize,
|
||||||
) {
|
) -> bool {
|
||||||
let mut solver = ConflictSolver::new();
|
let mut solver = ConflictSolver::new();
|
||||||
|
|
||||||
let mut installed_files: Vec<(ModFile, &InstalledMod)> = Vec::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);
|
let new_mod = InstalledMod::new(from_mod.id(), priority);
|
||||||
for file in files {
|
for file in files {
|
||||||
if let Some(conflict) = solver.add_file(file, &new_mod) {
|
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 {
|
for (_, installed_mod) in map {
|
||||||
instance.update_or_create_mod(&installed_mod);
|
instance.update_or_create_mod(&installed_mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn files_to_install_mod(
|
pub fn files_to_install_mod(
|
||||||
|
|||||||
@@ -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)?;
|
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()?;
|
instance.save_to_file()?;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user