template month/year, version into man pages while building dist tarball

This is meant to resolve #25689.
This commit is contained in:
Zack M. Davis 2017-12-04 21:36:57 -08:00
parent a4fa23a5bb
commit 207fc0bb45
4 changed files with 35 additions and 6 deletions

View File

@ -28,7 +28,7 @@ use build_helper::output;
use {Build, Compiler, Mode};
use channel;
use util::{cp_r, libdir, is_dylib, cp_filtered, copy};
use util::{cp_r, libdir, is_dylib, cp_filtered, copy, replace_in_file};
use builder::{Builder, RunConfig, ShouldRun, Step};
use compile;
use tool::{self, Tool};
@ -434,7 +434,22 @@ impl Step for Rustc {
// Man pages
t!(fs::create_dir_all(image.join("share/man/man1")));
cp_r(&build.src.join("src/doc/man"), &image.join("share/man/man1"));
let man_src = build.src.join("src/doc/man");
let man_dst = image.join("share/man/man1");
let date_output = output(Command::new("date").arg("+%B %Y"));
let month_year = date_output.trim();
// don't use our `bootstrap::util::{copy, cp_r}`, because those try
// to hardlink, and we don't want to edit the source templates
for entry_result in t!(fs::read_dir(man_src)) {
let file_entry = t!(entry_result);
let page_src = file_entry.path();
let page_dst = man_dst.join(file_entry.file_name());
t!(fs::copy(&page_src, &page_dst));
// template in month/year and version number
replace_in_file(&page_dst,
&[("<INSERT DATE HERE>", month_year),
("<INSERT VERSION HERE>", channel::CFG_RELEASE_NUM)]);
}
// Debugger scripts
builder.ensure(DebuggerScripts {

View File

@ -15,8 +15,8 @@
use std::env;
use std::str;
use std::fs::{self, File};
use std::io::{self, Read, Write};
use std::fs::{self, File, OpenOptions};
use std::io::{self, Read, Write, Seek, SeekFrom};
use std::path::{Path, PathBuf};
use std::process::Command;
use std::time::{SystemTime, Instant};
@ -51,6 +51,20 @@ pub fn copy(src: &Path, dst: &Path) {
t!(filetime::set_file_times(dst, atime, mtime));
}
/// Search-and-replaces within a file. (Not maximally efficiently: allocates a
/// new string for each replacement.)
pub fn replace_in_file(path: &Path, replacements: &[(&str, &str)]) {
let mut contents = String::new();
let mut file = t!(OpenOptions::new().read(true).write(true).open(path));
t!(file.read_to_string(&mut contents));
for &(target, replacement) in replacements {
contents = contents.replace(target, replacement);
}
t!(file.seek(SeekFrom::Start(0)));
t!(file.set_len(0));
t!(file.write_all(contents.as_bytes()));
}
pub fn read_stamp_file(stamp: &Path) -> Vec<PathBuf> {
let mut paths = Vec::new();
let mut contents = Vec::new();

View File

@ -1,4 +1,4 @@
.TH RUSTC "1" "September 2016" "rustc 1.13.0" "User Commands"
.TH RUSTC "1" "<INSERT DATE HERE>" "rustc <INSERT VERSION HERE>" "User Commands"
.SH NAME
rustc \- The Rust compiler
.SH SYNOPSIS

View File

@ -1,4 +1,4 @@
.TH RUSTDOC "1" "May 2017" "rustdoc 1.19.0" "User Commands"
.TH RUSTDOC "1" "<INSERT DATE HERE>" "rustdoc <INSERT VERSION HERE>" "User Commands"
.SH NAME
rustdoc \- generate documentation from Rust source code
.SH SYNOPSIS