Skip to content

Commit a7ea2dd

Browse files
committed
Make conflict reporting optional
1 parent f11c1f7 commit a7ea2dd

File tree

4 files changed

+55
-4
lines changed

4 files changed

+55
-4
lines changed

rust-bors.example.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ timeout = 3600
77
# (Optional, defaults to false)
88
merge_queue_enabled = true
99

10+
# Whether merge conflicts should be reported on PRs.
11+
# (Optional, defaults to false)
12+
report_merge_conflicts = true
13+
1014
# Labels that will block approval when present on a PR
1115
# (Optional)
1216
labels_blocking_approval = ["final-comment-period", "proposed-final-comment-period"]

src/bors/handlers/pr_events.rs

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ mod tests {
366366

367367
use crate::bors::PullRequestStatus;
368368
use crate::bors::merge_queue::AUTO_BUILD_CHECK_RUN_NAME;
369-
use crate::tests::{BorsTester, WorkflowRunData};
369+
use crate::tests::{BorsBuilder, BorsTester, GitHubState, WorkflowRunData};
370370
use crate::{
371371
database::{MergeableState, OctocrabMergeableState},
372372
tests::{User, default_branch_name, default_repo_name, run_test},
@@ -674,7 +674,7 @@ mod tests {
674674
}
675675

676676
#[sqlx::test]
677-
async fn conflict_message_unknown_sha(pool: sqlx::PgPool) {
677+
async fn conflict_message_disabled_in_config(pool: sqlx::PgPool) {
678678
run_test(pool, async |tester: &mut BorsTester| {
679679
let pr = tester
680680
.open_pr(default_repo_name(), |pr| {
@@ -687,6 +687,32 @@ mod tests {
687687
})
688688
.await;
689689
tester.push_to_branch(default_branch_name(), "sha").await?;
690+
691+
Ok(())
692+
})
693+
.await;
694+
}
695+
696+
#[sqlx::test]
697+
async fn conflict_message_unknown_sha(pool: sqlx::PgPool) {
698+
BorsBuilder::new(pool)
699+
.github(GitHubState::default().with_default_config(
700+
r#"
701+
merge_queue_enabled = true
702+
report_merge_conflicts = true
703+
"#,
704+
)).run_test(async |tester: &mut BorsTester| {
705+
let pr = tester
706+
.open_pr(default_repo_name(), |pr| {
707+
pr.mergeable_state = OctocrabMergeableState::Clean;
708+
})
709+
.await?;
710+
tester
711+
.modify_pr_state(pr.id(), |pr| {
712+
pr.mergeable_state = OctocrabMergeableState::Dirty;
713+
})
714+
.await;
715+
tester.push_to_branch(default_branch_name(), "sha").await?;
690716
assert_snapshot!(tester.get_next_comment_text(pr).await?, @":umbrella: The latest upstream changes made this pull request unmergeable. Please [resolve the merge conflicts](https://rustc-dev-guide.rust-lang.org/git.html#rebasing-and-conflicts).");
691717

692718
Ok(())
@@ -696,7 +722,13 @@ mod tests {
696722

697723
#[sqlx::test]
698724
async fn conflict_message_unknown_sha_approved(pool: sqlx::PgPool) {
699-
run_test(pool, async |tester: &mut BorsTester| {
725+
BorsBuilder::new(pool)
726+
.github(GitHubState::default().with_default_config(
727+
r#"
728+
merge_queue_enabled = true
729+
report_merge_conflicts = true
730+
"#,
731+
)).run_test(async |tester: &mut BorsTester| {
700732
let pr = tester
701733
.open_pr(default_repo_name(), |pr| {
702734
pr.mergeable_state = OctocrabMergeableState::Clean;
@@ -723,7 +755,13 @@ mod tests {
723755

724756
#[sqlx::test]
725757
async fn conflict_message_known_sha(pool: sqlx::PgPool) {
726-
run_test(pool, async |tester: &mut BorsTester| {
758+
BorsBuilder::new(pool)
759+
.github(GitHubState::default().with_default_config(
760+
r#"
761+
merge_queue_enabled = true
762+
report_merge_conflicts = true
763+
"#,
764+
)).run_test(async |tester: &mut BorsTester| {
727765
let pr2 = tester
728766
.open_pr(default_repo_name(), |pr| {
729767
pr.mergeable_state = OctocrabMergeableState::Clean;

src/bors/mergeability_queue.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,11 @@ async fn handle_pr_conflict(
442442
) -> anyhow::Result<()> {
443443
tracing::info!("Pull request {pr:?} was likely unmergeable (source: {conflict_source:?})");
444444

445+
if !repo_state.config.load().report_merge_conflicts {
446+
tracing::info!("Reporting merge conflicts is disabled, not doing anything further");
447+
return Ok(());
448+
}
449+
445450
let Some(pr) = db.get_pull_request(&pr.repo, pr.pr_number).await? else {
446451
return Err(anyhow::anyhow!("Pull request {pr:?} was not found"));
447452
};

src/config.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ pub struct RepositoryConfig {
3636
/// Defaults to false.
3737
#[serde(default)]
3838
pub merge_queue_enabled: bool,
39+
/// Whether merge conflicts should be reported on PRs.
40+
/// Defaults to false.
41+
#[serde(default)]
42+
pub report_merge_conflicts: bool,
3943
}
4044

4145
/// Load a repository config from TOML.

0 commit comments

Comments
 (0)