Skip to content

Commit 0834d42

Browse files
committed
Add approved_at to approval info
1 parent 6b12285 commit 0834d42

File tree

5 files changed

+37
-18
lines changed

5 files changed

+37
-18
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- Add down migration script here
2+
ALTER TABLE pull_request DROP COLUMN approved_at;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- Add up migration script here
2+
ALTER TABLE pull_request ADD COLUMN approved_at TIMESTAMPTZ;

src/bors/handlers/review.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use std::sync::Arc;
22

3+
use chrono::Utc;
4+
35
use crate::PgDbClient;
46
use crate::bors::Comment;
57
use crate::bors::RepositoryState;
@@ -38,6 +40,7 @@ pub(super) async fn command_approve(
3840
let approval_info = ApprovalInfo {
3941
approver: approver.clone(),
4042
sha: pr.head.sha.to_string(),
43+
approved_at: Utc::now(),
4144
};
4245
let pr_model = db
4346
.get_or_create_pull_request(

src/database/mod.rs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ pub struct ApprovalInfo {
139139
pub approver: String,
140140
/// The SHA of the commit that was approved.
141141
pub sha: String,
142+
/// When the pull request was approved.
143+
pub approved_at: DateTime<Utc>,
142144
}
143145

144146
/// Represents the approval status of a pull request.
@@ -150,23 +152,29 @@ pub enum ApprovalStatus {
150152

151153
impl sqlx::Type<sqlx::Postgres> for ApprovalStatus {
152154
fn type_info() -> sqlx::postgres::PgTypeInfo {
153-
<(Option<String>, Option<String>) as sqlx::Type<sqlx::Postgres>>::type_info()
155+
<(Option<String>, Option<String>, Option<DateTime<Utc>>) as sqlx::Type<sqlx::Postgres>>::type_info()
154156
}
155157
}
156158

157159
impl<'r> sqlx::Decode<'r, sqlx::Postgres> for ApprovalStatus {
158160
fn decode(value: sqlx::postgres::PgValueRef<'r>) -> Result<Self, BoxDynError> {
159-
let (approver, sha) =
160-
<(Option<String>, Option<String>) as sqlx::Decode<sqlx::Postgres>>::decode(value)?;
161-
162-
match (approver, sha) {
163-
(Some(approver), Some(sha)) => {
164-
Ok(ApprovalStatus::Approved(ApprovalInfo { approver, sha }))
161+
let (approver, sha, approved_at) =
162+
<(Option<String>, Option<String>, Option<DateTime<Utc>>) as sqlx::Decode<
163+
sqlx::Postgres,
164+
>>::decode(value)?;
165+
166+
match (approver, sha, approved_at) {
167+
(Some(approver), Some(sha), Some(approved_at)) => {
168+
Ok(ApprovalStatus::Approved(ApprovalInfo {
169+
approver,
170+
sha,
171+
approved_at,
172+
}))
165173
}
166-
(None, None) => Ok(ApprovalStatus::NotApproved),
167-
(approver, sha) => Err(format!(
168-
"Inconsistent approval state: approver={:?}, sha={:?}",
169-
approver, sha
174+
(None, None, None) => Ok(ApprovalStatus::NotApproved),
175+
(approver, sha, approved_at) => Err(format!(
176+
"Inconsistent approval state: approver={:?}, sha={:?}, approved_at={:?}",
177+
approver, sha, approved_at
170178
)
171179
.into()),
172180
}

src/database/operations.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ pub(crate) async fn get_pull_request(
3737
pr.number as "number!: i64",
3838
(
3939
pr.approved_by,
40-
pr.approved_sha
40+
pr.approved_sha,
41+
pr.approved_at
4142
) AS "approval_status!: ApprovalStatus",
42-
pr.status as "pr_status: PullRequestStatus",
43+
pr.status as "pr_status: PullRequestStatus",
4344
pr.priority,
4445
pr.rollup as "rollup: RollupMode",
4546
pr.delegated,
@@ -135,9 +136,10 @@ pub(crate) async fn upsert_pull_request(
135136
pr.number as "number!: i64",
136137
(
137138
pr.approved_by,
138-
pr.approved_sha
139+
pr.approved_sha,
140+
pr.approved_at
139141
) AS "approval_status!: ApprovalStatus",
140-
pr.status as "pr_status: PullRequestStatus",
142+
pr.status as "pr_status: PullRequestStatus",
141143
pr.priority,
142144
pr.rollup as "rollup: RollupMode",
143145
pr.delegated,
@@ -204,6 +206,7 @@ pub(crate) async fn approve_pull_request(
204206
UPDATE pull_request
205207
SET approved_by = $1,
206208
approved_sha = $2,
209+
approved_at = NOW(),
207210
priority = COALESCE($3, priority),
208211
rollup = COALESCE($4, rollup)
209212
WHERE id = $5
@@ -227,7 +230,7 @@ pub(crate) async fn unapprove_pull_request(
227230
) -> anyhow::Result<()> {
228231
measure_db_query("unapprove_pull_request", || async {
229232
sqlx::query!(
230-
"UPDATE pull_request SET approved_by = NULL, approved_sha = NULL WHERE id = $1",
233+
"UPDATE pull_request SET approved_by = NULL, approved_sha = NULL, approved_at = NULL WHERE id = $1",
231234
pr_id
232235
)
233236
.execute(executor)
@@ -283,9 +286,10 @@ SELECT
283286
pr.number as "number!: i64",
284287
(
285288
pr.approved_by,
286-
pr.approved_sha
289+
pr.approved_sha,
290+
pr.approved_at
287291
) AS "approval_status!: ApprovalStatus",
288-
pr.status as "pr_status: PullRequestStatus",
292+
pr.status as "pr_status: PullRequestStatus",
289293
pr.delegated,
290294
pr.priority,
291295
pr.base_branch,

0 commit comments

Comments
 (0)