From dd550d1cbe1117c18e3c03aecf013fe2a7c90ba4 Mon Sep 17 00:00:00 2001
From: QuietMisdreavus
Date: Wed, 5 Dec 2018 10:23:09 -0600
Subject: [PATCH] print current rust version on the about page
---
src/docbuilder/chroot_builder.rs | 13 +++++++++++--
src/web/mod.rs | 6 +-----
src/web/sitemap.rs | 23 ++++++++++++++++++++---
templates/about.hbs | 6 ++++++
4 files changed, 38 insertions(+), 10 deletions(-)
diff --git a/src/docbuilder/chroot_builder.rs b/src/docbuilder/chroot_builder.rs
index b561bc199..f643722f8 100644
--- a/src/docbuilder/chroot_builder.rs
+++ b/src/docbuilder/chroot_builder.rs
@@ -11,7 +11,7 @@ use std::process::Command;
use std::path::PathBuf;
use std::fs::remove_dir_all;
use postgres::Connection;
-use rustc_serialize::json::Json;
+use rustc_serialize::json::{Json, ToJson};
use error::Result;
@@ -314,7 +314,7 @@ impl DocBuilder {
/// Gets rustc and cratesfyi version from chroot environment
- fn get_versions(&self) -> (String, String) {
+ pub fn get_versions(&self) -> (String, String) {
// It is safe to use expect here
// chroot environment must always have rustc and cratesfyi installed
(String::from(self.chroot_command("rustc --version")
@@ -439,6 +439,15 @@ impl DocBuilder {
try!(self.clean(&pkg));
+ let (vers, _) = self.get_versions();
+
+ try!(conn.query("INSERT INTO config (name, value) VALUES ('rustc_version', $1)",
+ &[&vers.to_json()])
+ .or_else(|_| {
+ conn.query("UPDATE config SET value = $1 WHERE name = 'rustc_version'",
+ &[&vers.to_json()])
+ }));
+
Ok(())
}
}
diff --git a/src/web/mod.rs b/src/web/mod.rs
index 068f73c9f..a008013f7 100644
--- a/src/web/mod.rs
+++ b/src/web/mod.rs
@@ -61,7 +61,6 @@ use semver::{Version, VersionReq};
use rustc_serialize::json::{Json, ToJson};
use std::collections::BTreeMap;
-
/// Duration of static files for staticfile and DatabaseFileHandler (in seconds)
const STATIC_FILE_CACHE_DURATION: u64 = 60 * 60 * 24 * 30 * 12; // 12 months
const STYLE_CSS: &'static str = include_str!(concat!(env!("OUT_DIR"), "/style.css"));
@@ -97,9 +96,7 @@ impl CratesfyiHandler {
let mut router = Router::new();
router.get("/", releases::home_page, "index");
router.get("/style.css", style_css_handler, "style_css");
- router.get("/about",
- |_: &mut Request| page::Page::new(false).title("About Docs.rs").to_resp("about"),
- "about");
+ router.get("/about", sitemap::about_handler, "about");
router.get("/robots.txt", sitemap::robots_txt_handler, "robots_txt");
router.get("/sitemap.xml", sitemap::sitemap_handler, "sitemap_xml");
router.get("/opensearch.xml", opensearch_xml_handler, "opensearch_xml");
@@ -427,7 +424,6 @@ fn opensearch_xml_handler(_: &mut Request) -> IronResult {
Ok(response)
}
-
/// MetaData used in header
#[derive(Debug)]
pub struct MetaData {
diff --git a/src/web/sitemap.rs b/src/web/sitemap.rs
index 07bd189d7..a94946a1f 100644
--- a/src/web/sitemap.rs
+++ b/src/web/sitemap.rs
@@ -1,11 +1,11 @@
-
-
+use std::collections::BTreeMap;
use iron::prelude::*;
use iron::headers::ContentType;
+use rustc_serialize::json::Json;
use super::page::Page;
use super::pool::Pool;
use time;
-
+use db::connect_db;
pub fn sitemap_handler(req: &mut Request) -> IronResult {
let conn = extension!(req, Pool);
@@ -31,3 +31,20 @@ pub fn robots_txt_handler(_: &mut Request) -> IronResult {
resp.headers.set(ContentType("text/plain".parse().unwrap()));
Ok(resp)
}
+
+pub fn about_handler(req: &mut Request) -> IronResult {
+ let mut content = BTreeMap::new();
+
+ let conn = extension!(req, Pool);
+ let res = ctry!(conn.query("SELECT value FROM config WHERE name = 'rustc_version'", &[]));
+
+ if let Some(row) = res.iter().next() {
+ if let Some(Ok::(res)) = row.get_opt(0) {
+ if let Some(vers) = res.as_string() {
+ content.insert("rustc_version".to_string(), vers.to_string());
+ }
+ }
+ }
+
+ Page::new(content).title("About Docs.rs").to_resp("about")
+}
diff --git a/templates/about.hbs b/templates/about.hbs
index 53164b49d..894bd1a37 100644
--- a/templates/about.hbs
+++ b/templates/about.hbs
@@ -10,6 +10,12 @@
Docs.rs automatically builds crates' documentation released on
crates.io
using the nightly release of the Rust compiler.
+ {{#if content.rustc_version}}
+ The current version of the Rust compiler in use is {{content.rustc_version}}
.
+ If you need a newer version of this compiler, check the
+ issues page
+ and file a new issue if you don't see an existing request.
+ {{/if}}