Skip to content

Commit 48437ea

Browse files
committed
upgrade semver and refactor match_version
1 parent f6a0ea3 commit 48437ea

File tree

5 files changed

+111
-118
lines changed

5 files changed

+111
-118
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ structopt = "0.3"
2929
crates-index = { version = "0.18.5", optional = true }
3030
crates-index-diff = "8.0.0"
3131
reqwest = { version = "0.11", features = ["blocking", "json"] } # TODO: Remove blocking when async is ready
32-
semver = { version = "0.9", features = ["serde"] }
32+
semver = { version = "1.0.4", features = ["serde"] }
3333
slug = "0.1.1"
3434
env_logger = "0.9.0"
3535
r2d2 = "0.8"

src/web/crate_details.rs

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use super::{match_version, redirect_base, render_markdown, MatchSemver, MetaData};
2-
use crate::utils::get_correct_docsrs_style_file;
2+
use crate::utils::{get_correct_docsrs_style_file, report_error};
33
use crate::{db::Pool, impl_webpage, repositories::RepositoryStatsUpdater, web::page::WebPage};
4+
use anyhow::anyhow;
45
use chrono::{DateTime, Utc};
56
use iron::prelude::*;
67
use iron::Url;
@@ -74,6 +75,7 @@ pub struct Release {
7475
pub build_status: bool,
7576
pub yanked: bool,
7677
pub is_library: bool,
78+
pub rustdoc_status: bool,
7779
}
7880

7981
impl CrateDetails {
@@ -232,12 +234,13 @@ impl CrateDetails {
232234
pub fn latest_release(&self) -> &Release {
233235
self.releases
234236
.iter()
235-
.find(|release| !release.version.is_prerelease() && !release.yanked)
237+
.find(|release| release.version.pre.is_empty() && !release.yanked)
236238
.unwrap_or(&self.releases[0])
237239
}
238240
}
239241

240-
fn releases_for_crate(
242+
/// Return all releases for a crate, sorted in descending order by semver
243+
pub(crate) fn releases_for_crate(
241244
conn: &mut impl GenericClient,
242245
crate_id: i32,
243246
) -> Result<Vec<Release>, anyhow::Error> {
@@ -248,7 +251,8 @@ fn releases_for_crate(
248251
version,
249252
build_status,
250253
yanked,
251-
is_library
254+
is_library,
255+
rustdoc_status
252256
FROM releases
253257
WHERE
254258
releases.crate_id = $1",
@@ -257,15 +261,23 @@ fn releases_for_crate(
257261
.into_iter()
258262
.filter_map(|row| {
259263
let version: String = row.get("version");
260-
semver::Version::parse(&version)
261-
.map(|semversion| Release {
264+
match semver::Version::parse(&version) {
265+
Ok(semversion) => Some(Release {
262266
id: row.get("id"),
263267
version: semversion,
264268
build_status: row.get("build_status"),
265269
yanked: row.get("yanked"),
266270
is_library: row.get("is_library"),
267-
})
268-
.ok()
271+
rustdoc_status: row.get("rustdoc_status"),
272+
}),
273+
Err(err) => {
274+
report_error(&anyhow!(err).context(format!(
275+
"invalid semver in database for crate {}: {}",
276+
crate_id, version
277+
)));
278+
None
279+
}
280+
}
269281
})
270282
.collect();
271283

@@ -491,55 +503,63 @@ mod tests {
491503
build_status: true,
492504
yanked: false,
493505
is_library: true,
506+
rustdoc_status: true,
494507
id: details.releases[0].id,
495508
},
496509
Release {
497510
version: semver::Version::parse("0.12.0")?,
498511
build_status: true,
499512
yanked: false,
500513
is_library: true,
514+
rustdoc_status: true,
501515
id: details.releases[1].id,
502516
},
503517
Release {
504518
version: semver::Version::parse("0.3.0")?,
505519
build_status: false,
506520
yanked: false,
507521
is_library: true,
522+
rustdoc_status: false,
508523
id: details.releases[2].id,
509524
},
510525
Release {
511526
version: semver::Version::parse("0.2.0")?,
512527
build_status: true,
513528
yanked: true,
514529
is_library: true,
530+
rustdoc_status: true,
515531
id: details.releases[3].id,
516532
},
517533
Release {
518534
version: semver::Version::parse("0.2.0-alpha")?,
519535
build_status: true,
520536
yanked: false,
521537
is_library: true,
538+
rustdoc_status: true,
522539
id: details.releases[4].id,
523540
},
524541
Release {
525542
version: semver::Version::parse("0.1.1")?,
526543
build_status: true,
527544
yanked: false,
528545
is_library: true,
546+
rustdoc_status: true,
529547
id: details.releases[5].id,
530548
},
531549
Release {
532550
version: semver::Version::parse("0.1.0")?,
533551
build_status: true,
534552
yanked: false,
535553
is_library: true,
554+
rustdoc_status: true,
536555
id: details.releases[6].id,
537556
},
538557
Release {
539558
version: semver::Version::parse("0.0.1")?,
540559
build_status: false,
541560
yanked: false,
542561
is_library: false,
562+
rustdoc_status: false,
543563
id: details.releases[7].id,
544564
},
545565
]

0 commit comments

Comments
 (0)