mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-27 06:41:18 +00:00
improve diff
This commit is contained in:
parent
06b01ffecf
commit
7977ee166a
1 changed files with 24 additions and 11 deletions
|
@ -100,16 +100,25 @@ pub fn check_dump_diff(conn: &mut PgConnection, mut before: String, name: &str)
|
||||||
if only_in_before.is_empty() && only_in_after.is_empty() {
|
if only_in_before.is_empty() && only_in_after.is_empty() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// add empty strings to the shorter vec so the lengths match
|
let after_has_more =
|
||||||
if only_in_before.len() < only_in_after.len() {
|
only_in_before.len() < only_in_after.len();
|
||||||
|
// outer iterator in the loop below should be the one with empty strings, otherwise the empty strings
|
||||||
|
// would appear to have the most similarity
|
||||||
|
let (chunks_gt, chunks_lt) = if after_has_more
|
||||||
|
{
|
||||||
only_in_before.resize_with(only_in_after.len(),Default::default);
|
only_in_before.resize_with(only_in_after.len(),Default::default);
|
||||||
|
(&mut only_in_after, &only_in_before)
|
||||||
} else {
|
} else {
|
||||||
only_in_after.resize_with(only_in_before.len(),Default::default);
|
only_in_after.resize_with(only_in_before.len(),Default::default);
|
||||||
}
|
(&mut only_in_before, &only_in_after)
|
||||||
|
};
|
||||||
|
|
||||||
let mut output = format!("These changes need to be applied in {name}:");
|
let mut output = format!("These changes need to be applied in {name}:");
|
||||||
for (before_chunk, before_chunk_filtered) in only_in_before {
|
// todo rename variables
|
||||||
let (most_similar_chunk_index, (most_similar_chunk, _)) = only_in_after
|
for (before_chunk, before_chunk_filtered) in chunks_lt {
|
||||||
|
let default = Default::default();
|
||||||
|
//panic!("{:?}",(before_chunk.clone(),chunks_lt.clone()));
|
||||||
|
let (most_similar_chunk_index, (most_similar_chunk, _)) = chunks_gt
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.max_by_key(|(_, (after_chunk, after_chunk_filtered))| {
|
.max_by_key(|(_, (after_chunk, after_chunk_filtered))| {
|
||||||
|
@ -120,10 +129,13 @@ pub fn check_dump_diff(conn: &mut PgConnection, mut before: String, name: &str)
|
||||||
if c.is_lowercase()))
|
if c.is_lowercase()))
|
||||||
.count()
|
.count()
|
||||||
})
|
})
|
||||||
.expect("resize should have prevented this from failing");
|
.unwrap_or((0,&default));
|
||||||
|
|
||||||
output.push('\n');
|
output.push('\n');
|
||||||
for line in diff::lines(most_similar_chunk, &before_chunk) {
|
let lines = if !after_has_more{diff::lines(&before_chunk,most_similar_chunk)}else{
|
||||||
|
diff::lines(most_similar_chunk, &before_chunk)};
|
||||||
|
for line in lines
|
||||||
|
{
|
||||||
match line {
|
match line {
|
||||||
diff::Result::Left(s) => write!(&mut output, "\n- {s}"),
|
diff::Result::Left(s) => write!(&mut output, "\n- {s}"),
|
||||||
diff::Result::Right(s) => write!(&mut output, "\n+ {s}"),
|
diff::Result::Right(s) => write!(&mut output, "\n+ {s}"),
|
||||||
|
@ -131,10 +143,11 @@ pub fn check_dump_diff(conn: &mut PgConnection, mut before: String, name: &str)
|
||||||
}
|
}
|
||||||
.expect("failed to build string");
|
.expect("failed to build string");
|
||||||
}
|
}
|
||||||
only_in_after.swap_remove(most_similar_chunk_index);
|
if !chunks_gt.is_empty() {
|
||||||
|
chunks_gt.swap_remove(most_similar_chunk_index);}
|
||||||
}
|
}
|
||||||
// should have all been removed
|
// should have all been removed
|
||||||
assert_eq!(only_in_after.len(), 0);
|
assert_eq!(chunks_gt.len(), 0);
|
||||||
panic!("{output}");
|
panic!("{output}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue