Skip to content

Commit 76e3e15

Browse files
committed
Rework mergeable_queue a ton
1 parent 9dd3c49 commit 76e3e15

File tree

12 files changed

+316
-118
lines changed

12 files changed

+316
-118
lines changed

Cargo.lock

Lines changed: 6 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ octocrab = "0.43"
2929
# Async
3030
futures = "0.3"
3131
tokio = { version = "1", features = ["full"] }
32+
tokio-util = { version="0.7.14", features = ["time"] }
3233
arc-swap = "1"
3334

3435
# Web
@@ -54,6 +55,7 @@ chrono = "0.4"
5455

5556
itertools = "0.14"
5657

58+
5759
[dev-dependencies]
5860
insta = "1.26"
5961
wiremock = "0.6"

src/bors/context.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ use std::{
33
sync::{Arc, RwLock},
44
};
55

6-
use super::{RepositoryState, mergeable_queue::MergeableQueue};
76
use crate::{PgDbClient, bors::command::CommandParser, github::GithubRepoName};
87

8+
use super::RepositoryState;
9+
910
pub struct BorsContext {
1011
pub parser: CommandParser,
1112
pub db: Arc<PgDbClient>,
1213
pub repositories: RwLock<HashMap<GithubRepoName, Arc<RepositoryState>>>,
13-
pub mergeable_queue: Arc<MergeableQueue>,
1414
}
1515

1616
impl BorsContext {
@@ -24,7 +24,6 @@ impl BorsContext {
2424
parser,
2525
db,
2626
repositories,
27-
mergeable_queue: Arc::new(MergeableQueue::default()),
2827
}
2928
}
3029
}

src/bors/handlers/mod.rs

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use tracing::Instrument;
3131
#[cfg(test)]
3232
use crate::tests::util::TestSyncMarker;
3333

34-
use super::mergeable_queue::MergeableQueueItem;
34+
use super::mergeable_queue::MergeableQueue;
3535

3636
mod help;
3737
mod info;
@@ -50,9 +50,9 @@ pub static WAIT_FOR_WORKFLOW_STARTED: TestSyncMarker = TestSyncMarker::new();
5050
pub async fn handle_bors_repository_event(
5151
event: BorsRepositoryEvent,
5252
ctx: Arc<BorsContext>,
53+
mergeable_queue: &MergeableQueue,
5354
) -> anyhow::Result<()> {
5455
let db = Arc::clone(&ctx.db);
55-
let mergeable_queue = Arc::clone(&ctx.mergeable_queue);
5656
let Some(repo) = ctx
5757
.repositories
5858
.read()
@@ -202,7 +202,7 @@ pub async fn handle_bors_repository_event(
202202
let span =
203203
tracing::info_span!("Pushed to branch", repo = payload.repository.to_string());
204204

205-
handle_push_to_branch(repo, db, mergeable_queue, payload)
205+
handle_push_to_branch(repo, db, payload)
206206
.instrument(span.clone())
207207
.await?;
208208
}
@@ -457,36 +457,6 @@ async fn reload_repos(
457457
Ok(())
458458
}
459459

460-
pub async fn handle_mergeable_queue_item(
461-
mergeable_queue_item: MergeableQueueItem,
462-
ctx: Arc<BorsContext>,
463-
) -> anyhow::Result<()> {
464-
let pr_model = ctx
465-
.db
466-
.get_pull_request(
467-
&mergeable_queue_item.repository,
468-
mergeable_queue_item.pr_number,
469-
)
470-
.await?
471-
.unwrap();
472-
let repo_state = ctx
473-
.repositories
474-
.read()
475-
.unwrap()
476-
.get(&mergeable_queue_item.repository)
477-
.cloned()
478-
.unwrap();
479-
let fetched_pr = repo_state
480-
.client
481-
.get_pull_request(mergeable_queue_item.pr_number)
482-
.await?;
483-
484-
ctx.db
485-
.update_pr_mergeable_state(&pr_model, fetched_pr.mergeable_state.into())
486-
.await?;
487-
Ok(())
488-
}
489-
490460
/// Is this branch interesting for the bot?
491461
fn is_bors_observed_branch(branch: &str) -> bool {
492462
branch == TRY_BRANCH_NAME

src/bors/handlers/pr_events.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use std::sync::Arc;
1414
pub(super) async fn handle_pull_request_edited(
1515
repo_state: Arc<RepositoryState>,
1616
db: Arc<PgDbClient>,
17-
mergeable_queue: Arc<MergeableQueue>,
17+
mergeable_queue: &MergeableQueue,
1818
payload: PullRequestEdited,
1919
) -> anyhow::Result<()> {
2020
let pr = &payload.pull_request;
@@ -34,9 +34,9 @@ pub(super) async fn handle_pull_request_edited(
3434
return Ok(());
3535
};
3636

37-
mergeable_queue
38-
.enqueue(repo_state.repository().clone(), pr_number)
39-
.await;
37+
db.update_pr_mergeable_state(&pr_model, MergeableState::Unknown)
38+
.await?;
39+
mergeable_queue.enqueue(repo_state.repository().clone(), pr_number);
4040

4141
if !pr_model.is_approved() {
4242
return Ok(());
@@ -160,7 +160,6 @@ pub(super) async fn handle_pull_request_ready_for_review(
160160
pub(super) async fn handle_push_to_branch(
161161
repo_state: Arc<RepositoryState>,
162162
db: Arc<PgDbClient>,
163-
_mergeable_queue: Arc<MergeableQueue>,
164163
payload: PushToBranch,
165164
) -> anyhow::Result<()> {
166165
let rows = db
@@ -171,8 +170,6 @@ pub(super) async fn handle_push_to_branch(
171170
)
172171
.await?;
173172

174-
// Push PRs to mergeable_queue
175-
176173
tracing::info!("Updated mergeable_state to `unknown` for {} PR(s)", rows);
177174

178175
Ok(())
@@ -216,10 +213,9 @@ mod tests {
216213
use crate::bors::PullRequestStatus;
217214
use crate::tests::mocks::default_pr_number;
218215
use crate::{
219-
database::MergeableState,
216+
database::{MergeableState, OctocrabMergeableState},
220217
tests::mocks::{User, default_branch_name, default_repo_name, run_test},
221218
};
222-
use octocrab::models::pulls::MergeableState as OctocrabMergeableState;
223219

224220
#[sqlx::test]
225221
async fn unapprove_on_base_edited(pool: sqlx::PgPool) {
@@ -471,12 +467,16 @@ mod tests {
471467
tester
472468
.edit_pr(default_repo_name(), default_pr_number(), |pr| {
473469
pr.base_branch = branch;
474-
pr.mergeable_state = OctocrabMergeableState::Unknown;
475470
})
476471
.await?;
472+
tester
473+
.default_repo()
474+
.lock()
475+
.get_pr_mut(default_pr_number())
476+
.mergeable_state = OctocrabMergeableState::Dirty;
477477
tester
478478
.wait_for_default_pr(|pr| {
479-
pr.base_branch == "beta" && pr.mergeable_state == MergeableState::Unknown
479+
pr.base_branch == "beta" && pr.mergeable_state == MergeableState::HasConflicts
480480
})
481481
.await?;
482482
Ok(tester)

0 commit comments

Comments
 (0)