mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-30 08:11:20 +00:00
re-attempt checking character after skipped trigger name, and make code less confusing
This commit is contained in:
parent
1a18350aca
commit
d592e0f416
1 changed files with 23 additions and 18 deletions
|
@ -12,9 +12,16 @@ pub fn get_dump() -> String {
|
||||||
let db_url = SETTINGS.get_database_url();
|
let db_url = SETTINGS.get_database_url();
|
||||||
let output = Command::new("pg_dump")
|
let output = Command::new("pg_dump")
|
||||||
.args([
|
.args([
|
||||||
|
// Specify database URL
|
||||||
"--dbname",
|
"--dbname",
|
||||||
&db_url,
|
&db_url,
|
||||||
|
// Allow differences in row data and old fast tables
|
||||||
"--schema-only",
|
"--schema-only",
|
||||||
|
"--exclude-table=comment_aggregates_fast",
|
||||||
|
"--exclude-table=community_aggregates_fast",
|
||||||
|
"--exclude-table=post_aggregates_fast",
|
||||||
|
"--exclude-table=user_fast",
|
||||||
|
// Ignore some things to reduce the amount of queries done by pg_dump
|
||||||
"--no-owner",
|
"--no-owner",
|
||||||
"--no-privileges",
|
"--no-privileges",
|
||||||
"--no-comments",
|
"--no-comments",
|
||||||
|
@ -23,10 +30,6 @@ pub fn get_dump() -> String {
|
||||||
"--no-subscriptions",
|
"--no-subscriptions",
|
||||||
"--no-table-access-method",
|
"--no-table-access-method",
|
||||||
"--no-tablespaces",
|
"--no-tablespaces",
|
||||||
"--exclude-table=comment_aggregates_fast",
|
|
||||||
"--exclude-table=community_aggregates_fast",
|
|
||||||
"--exclude-table=post_aggregates_fast",
|
|
||||||
"--exclude-table=user_fast",
|
|
||||||
])
|
])
|
||||||
.stderr(Stdio::inherit())
|
.stderr(Stdio::inherit())
|
||||||
.output()
|
.output()
|
||||||
|
@ -46,6 +49,7 @@ pub fn check_dump_diff(before: String, after: String, label: &str) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Borrow checker requires this to be a separate variable
|
||||||
let normalized_chunk_vecs = [&before, &after]
|
let normalized_chunk_vecs = [&before, &after]
|
||||||
// Remove identical items
|
// Remove identical items
|
||||||
.map(|dump| chunks(dump).collect::<BTreeSet<_>>())
|
.map(|dump| chunks(dump).collect::<BTreeSet<_>>())
|
||||||
|
@ -53,8 +57,7 @@ pub fn check_dump_diff(before: String, after: String, label: &str) {
|
||||||
// Remove items without unwanted types of differences (if migrations are correct, then this
|
// Remove items without unwanted types of differences (if migrations are correct, then this
|
||||||
// removes everything)
|
// removes everything)
|
||||||
.map(|chunks| chunks.map(|&i| normalize_chunk(i)).collect::<BTreeSet<_>>());
|
.map(|chunks| chunks.map(|&i| normalize_chunk(i)).collect::<BTreeSet<_>>());
|
||||||
|
let [only_in_before, only_in_after] = normalized_chunk_vecs // Imagine that this line doesn't exist
|
||||||
let [only_in_before, only_in_after] = normalized_chunk_vecs
|
|
||||||
.differences()
|
.differences()
|
||||||
.map(|chunks| chunks.map(|i| &**i).collect::<Vec<_>>());
|
.map(|chunks| chunks.map(|i| &**i).collect::<Vec<_>>());
|
||||||
|
|
||||||
|
@ -86,7 +89,7 @@ pub fn check_dump_diff(before: String, after: String, label: &str) {
|
||||||
}
|
}
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let lines = if after_has_more {
|
let diff_lines = if after_has_more {
|
||||||
diff::lines(most_similar_chunk, chunk)
|
diff::lines(most_similar_chunk, chunk)
|
||||||
} else {
|
} else {
|
||||||
diff::lines(chunk, most_similar_chunk)
|
diff::lines(chunk, most_similar_chunk)
|
||||||
|
@ -95,16 +98,16 @@ pub fn check_dump_diff(before: String, after: String, label: &str) {
|
||||||
other_chunks.swap_remove(most_similar_chunk_index);
|
other_chunks.swap_remove(most_similar_chunk_index);
|
||||||
|
|
||||||
Some(
|
Some(
|
||||||
lines
|
diff_lines
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|line| {
|
.flat_map(|line| {
|
||||||
Cow::Owned(match line {
|
match line {
|
||||||
diff::Result::Left(s) => format!("- {s}\n"),
|
diff::Result::Left(s) => ["- ", s, "\n"],
|
||||||
diff::Result::Right(s) => format!("+ {s}\n"),
|
diff::Result::Right(s) => ["+ ", s, "\n"],
|
||||||
diff::Result::Both(s, _) => format!(" {s}\n"),
|
diff::Result::Both(s, _) => [" ", s, "\n"],
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
.chain(["\n"])
|
||||||
.chain([Cow::Borrowed("\n")])
|
|
||||||
.collect::<String>(),
|
.collect::<String>(),
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
@ -231,7 +234,7 @@ fn sort_within_sections<T: Ord + ?Sized>(vec: &mut [&T], mut section: impl FnMut
|
||||||
vec.sort_unstable_by_key(|&i| (section(i), i));
|
vec.sort_unstable_by_key(|&i| (section(i), i));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn chunks(dump: &str) -> impl Iterator<Item = &str> {
|
fn chunks(diff: &str) -> impl Iterator<Item = &str> {
|
||||||
let mut remaining = dump;
|
let mut remaining = dump;
|
||||||
std::iter::from_fn(move || {
|
std::iter::from_fn(move || {
|
||||||
remaining = remaining.trim_start();
|
remaining = remaining.trim_start();
|
||||||
|
@ -259,11 +262,13 @@ fn remove_skipped_item_from_beginning(s: &str) -> Option<&str> {
|
||||||
.or_else(|| {
|
.or_else(|| {
|
||||||
s.strip_prefix("CREATE FUNCTION public.")
|
s.strip_prefix("CREATE FUNCTION public.")
|
||||||
.and_then(after_skipped_trigger_name)
|
.and_then(after_skipped_trigger_name)
|
||||||
} /* .and_then(|a| a.strip_prefix("()")) */)
|
.and_then(|a| a.strip_prefix('('))
|
||||||
|
})
|
||||||
.or_else(|| {
|
.or_else(|| {
|
||||||
s.strip_prefix("CREATE TRIGGER ")
|
s.strip_prefix("CREATE TRIGGER ")
|
||||||
.and_then(after_skipped_trigger_name)
|
.and_then(after_skipped_trigger_name)
|
||||||
} /* .and_then(|a| a.strip_prefix(' ')) */)
|
.and_then(|a| a.strip_prefix(' '))
|
||||||
|
})
|
||||||
{
|
{
|
||||||
Some(after_first_occurence(after, "\n\n"))
|
Some(after_first_occurence(after, "\n\n"))
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue