mirror of
https://github.com/WarrenHood/MCModpackManager.git
synced 2025-04-29 13:04:58 +01:00
Show diff of files when applying merges
This commit is contained in:
parent
24a34e49b5
commit
bb7eb0e14f
7
Cargo.lock
generated
7
Cargo.lock
generated
|
@ -2078,6 +2078,7 @@ dependencies = [
|
||||||
"serde_yaml",
|
"serde_yaml",
|
||||||
"sha1",
|
"sha1",
|
||||||
"sha2",
|
"sha2",
|
||||||
|
"similar",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"tokio",
|
"tokio",
|
||||||
"toml",
|
"toml",
|
||||||
|
@ -3294,6 +3295,12 @@ version = "0.3.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
|
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "similar"
|
||||||
|
version = "2.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "siphasher"
|
name = "siphasher"
|
||||||
version = "0.3.11"
|
version = "0.3.11"
|
||||||
|
|
|
@ -17,6 +17,7 @@ serde_json = "1.0.128"
|
||||||
serde_yaml = "0.9.34"
|
serde_yaml = "0.9.34"
|
||||||
sha1 = "0.10.6"
|
sha1 = "0.10.6"
|
||||||
sha2 = "0.10.8"
|
sha2 = "0.10.8"
|
||||||
|
similar = "2.6.0"
|
||||||
tempfile = "3.12.0"
|
tempfile = "3.12.0"
|
||||||
tokio = { version = "1.39.2", features = ["full"] }
|
tokio = { version = "1.39.2", features = ["full"] }
|
||||||
toml = { version = "0.8.19", features = ["preserve_order"] }
|
toml = { version = "0.8.19", features = ["preserve_order"] }
|
||||||
|
|
|
@ -6,6 +6,7 @@ use crate::{
|
||||||
};
|
};
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use similar::{ChangeTag, TextDiff};
|
||||||
use std::{
|
use std::{
|
||||||
collections::{BTreeMap, BTreeSet},
|
collections::{BTreeMap, BTreeSet},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
|
@ -298,9 +299,20 @@ impl ModpackMeta {
|
||||||
)
|
)
|
||||||
.with_context(|| format!("Failed to merge file {src:?} -> {dst:?}"))?;
|
.with_context(|| format!("Failed to merge file {src:?} -> {dst:?}"))?;
|
||||||
|
|
||||||
std::fs::write(dst, merged_contents).with_context(|| {
|
std::fs::write(dst, &merged_contents).with_context(|| {
|
||||||
format!("Failed to write merged contents of {src:?} -> {dst:?}")
|
format!("Failed to write merged contents of {src:?} -> {dst:?}")
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
println!("Successfully merged {src:?} -> {dst:?}. See diff below:");
|
||||||
|
let diff = TextDiff::from_lines(&dst_val, &merged_contents);
|
||||||
|
for change in diff.iter_all_changes() {
|
||||||
|
let sign = match change.tag() {
|
||||||
|
ChangeTag::Delete => "-",
|
||||||
|
ChangeTag::Insert => "+",
|
||||||
|
ChangeTag::Equal => " ",
|
||||||
|
};
|
||||||
|
print!("{}{}", sign, change);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
println!("Syncing file {} -> {}", src.display(), dst.display());
|
println!("Syncing file {} -> {}", src.display(), dst.display());
|
||||||
std::fs::copy(src, dst)?;
|
std::fs::copy(src, dst)?;
|
||||||
|
|
Loading…
Reference in a new issue