re-attempt checking character after skipped trigger name, and make code less confusing

This commit is contained in:
dullbananas 2024-05-27 20:18:10 -07:00 committed by GitHub
parent 1a18350aca
commit d592e0f416
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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([Cow::Borrowed("\n")]) .chain(["\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 {