Skip to content

Commit c4b302b

Browse files
committed
store date of nightly version in separate field
1 parent d9f1a13 commit c4b302b

8 files changed

+207
-9
lines changed

.sqlx/query-64d91ec806ed67d6cffd1a797da5059cc8fb44b37f94dc77877c88d266c5ac9b.json

+63
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-f9151734057f3e6562b1a56d1665ad3707b0ca37bbfca2d75e6e05b350dade04.json renamed to .sqlx/query-ac2450acd8bbec632668499a18c59644f6cfdc87bd6d280ca8db6a146929c8f5.json

+3-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-c955871bcda914feac9cfb23fe010399c0b3f75e92ac425fa4ec337e9b250c26.json

+57
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
DROP INDEX builds_nightly_date_idx;
2+
3+
ALTER TABLE builds
4+
DROP COLUMN rustc_nightly_date;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
ALTER TABLE builds
2+
ADD COLUMN rustc_nightly_date DATE;
3+
4+
CREATE INDEX builds_nightly_date_idx ON builds USING btree (rustc_nightly_date);
5+
6+
UPDATE builds
7+
SET rustc_nightly_date = CAST(SUBSTRING(rustc_version FROM ' (\d+-\d+-\d+)\)$') AS DATE)
8+
WHERE rustc_version IS NOT NULL;

src/db/add_package.rs

+70-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::{
44
error::Result,
55
registry_api::{CrateData, CrateOwner, ReleaseData},
66
storage::CompressionAlgorithm,
7-
utils::MetadataPackage,
7+
utils::{rustc_version::parse_rustc_date, MetadataPackage},
88
web::crate_details::{latest_release, releases_for_crate},
99
};
1010
use anyhow::Context;
@@ -17,7 +17,7 @@ use std::{
1717
io::{BufRead, BufReader},
1818
path::Path,
1919
};
20-
use tracing::{debug, info, instrument};
20+
use tracing::{debug, error, info, instrument};
2121

2222
/// Adds a package into database.
2323
///
@@ -248,6 +248,17 @@ pub(crate) async fn finish_build(
248248
debug!("updating build after finishing");
249249
let hostname = hostname::get()?;
250250

251+
let rustc_date = match parse_rustc_date(rustc_version) {
252+
Ok(date) => Some(date),
253+
Err(err) => {
254+
error!(
255+
"Failed to parse date from rustc version \"{}\": {:?}",
256+
rustc_version, err
257+
);
258+
None
259+
}
260+
};
261+
251262
let release_id = sqlx::query_scalar!(
252263
"UPDATE builds
253264
SET
@@ -257,16 +268,18 @@ pub(crate) async fn finish_build(
257268
build_server = $4,
258269
errors = $5,
259270
documentation_size = $6,
271+
rustc_nightly_date = $7,
260272
build_finished = NOW()
261273
WHERE
262-
id = $7
274+
id = $8
263275
RETURNING rid",
264276
rustc_version,
265277
docsrs_version,
266278
build_status as BuildStatus,
267279
hostname.to_str().unwrap_or(""),
268280
errors,
269281
documentation_size.map(|v| v as i64),
282+
rustc_date,
270283
build_id,
271284
)
272285
.fetch_one(&mut *conn)
@@ -612,6 +625,7 @@ mod test {
612625
use crate::registry_api::OwnerKind;
613626
use crate::test::*;
614627
use crate::utils::CargoMetadata;
628+
use chrono::NaiveDate;
615629
use test_case::test_case;
616630

617631
#[test]
@@ -649,7 +663,56 @@ mod test {
649663
}
650664

651665
#[test]
652-
fn test_finish_build_success() {
666+
fn test_finish_build_success_valid_rustc_date() {
667+
async_wrapper(|env| async move {
668+
let mut conn = env.async_db().await.async_conn().await;
669+
let crate_id = initialize_crate(&mut conn, "krate").await?;
670+
let release_id = initialize_release(&mut conn, crate_id, "0.1.0").await?;
671+
let build_id = initialize_build(&mut conn, release_id).await?;
672+
673+
finish_build(
674+
&mut conn,
675+
build_id,
676+
"rustc 1.84.0-nightly (e7c0d2750 2024-10-15)",
677+
"docsrs_version",
678+
BuildStatus::Success,
679+
None,
680+
None,
681+
)
682+
.await?;
683+
684+
let row = sqlx::query!(
685+
r#"SELECT
686+
rustc_version,
687+
docsrs_version,
688+
build_status as "build_status: BuildStatus",
689+
errors,
690+
rustc_nightly_date
691+
FROM builds
692+
WHERE id = $1"#,
693+
build_id
694+
)
695+
.fetch_one(&mut *conn)
696+
.await?;
697+
698+
assert_eq!(
699+
row.rustc_version,
700+
Some("rustc 1.84.0-nightly (e7c0d2750 2024-10-15)".into())
701+
);
702+
assert_eq!(row.docsrs_version, Some("docsrs_version".into()));
703+
assert_eq!(row.build_status, BuildStatus::Success);
704+
assert_eq!(
705+
row.rustc_nightly_date,
706+
Some(NaiveDate::from_ymd_opt(2024, 10, 15).unwrap())
707+
);
708+
assert!(row.errors.is_none());
709+
710+
Ok(())
711+
})
712+
}
713+
714+
#[test]
715+
fn test_finish_build_success_invalid_rustc_date() {
653716
async_wrapper(|env| async move {
654717
let mut conn = env.async_db().await.async_conn().await;
655718
let crate_id = initialize_crate(&mut conn, "krate").await?;
@@ -673,7 +736,8 @@ mod test {
673736
docsrs_version,
674737
build_status as "build_status: BuildStatus",
675738
documentation_size,
676-
errors
739+
errors,
740+
rustc_nightly_date
677741
FROM builds
678742
WHERE id = $1"#,
679743
build_id
@@ -685,6 +749,7 @@ mod test {
685749
assert_eq!(row.docsrs_version, Some("docsrs_version".into()));
686750
assert_eq!(row.build_status, BuildStatus::Success);
687751
assert_eq!(row.documentation_size, Some(42));
752+
assert!(row.rustc_nightly_date.is_none());
688753
assert!(row.errors.is_none());
689754

690755
Ok(())

src/utils/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub mod daemon;
2121
mod html;
2222
mod queue;
2323
pub(crate) mod queue_builder;
24-
mod rustc_version;
24+
pub(crate) mod rustc_version;
2525
use anyhow::Result;
2626
use serde::de::DeserializeOwned;
2727
use serde::Serialize;

src/utils/rustc_version.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub fn parse_rustc_version<S: AsRef<str>>(version: S) -> Result<String> {
2121
))
2222
}
2323

24-
fn parse_rustc_date<S: AsRef<str>>(version: S) -> Result<NaiveDate> {
24+
pub(crate) fn parse_rustc_date<S: AsRef<str>>(version: S) -> Result<NaiveDate> {
2525
static RE: Lazy<Regex> = Lazy::new(|| Regex::new(r" (\d+)-(\d+)-(\d+)\)$").unwrap());
2626

2727
let cap = RE

0 commit comments

Comments
 (0)