diff options
| author | kennytm <kennytm@gmail.com> | 2017-11-30 18:18:47 +0800 |
|---|---|---|
| committer | kennytm <kennytm@gmail.com> | 2017-12-03 18:36:56 +0800 |
| commit | 971b1ba42bcb318baf31047cf80a4cf532756ec8 (patch) | |
| tree | 067132d0ba595ab165b52c608f6567469c625792 /src/bootstrap/lib.rs | |
| parent | 128199e39c2644e3e0c0580869a561f9211e6d98 (diff) | |
| download | rust-971b1ba42bcb318baf31047cf80a4cf532756ec8.tar.gz rust-971b1ba42bcb318baf31047cf80a4cf532756ec8.zip | |
Record build and test result of extended tools into toolstates.json.
Diffstat (limited to 'src/bootstrap/lib.rs')
| -rw-r--r-- | src/bootstrap/lib.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 68329922592..2f00c313a0c 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -190,6 +190,7 @@ mod job { pub use config::Config; use flags::Subcommand; use cache::{Interned, INTERNER}; +use toolstate::ToolState; /// A structure representing a Rust compiler. /// @@ -874,6 +875,30 @@ impl Build { } } + /// Updates the actual toolstate of a tool. + /// + /// The toolstates are saved to the file specified by the key + /// `rust.save-toolstates` in `config.toml`. If unspecified, nothing will be + /// done. The file is updated immediately after this function completes. + pub fn save_toolstate(&self, tool: &str, state: ToolState) { + use std::io::{Seek, SeekFrom}; + + if let Some(ref path) = self.config.save_toolstates { + let mut file = t!(fs::OpenOptions::new() + .create(true) + .read(true) + .write(true) + .open(path)); + + let mut current_toolstates: HashMap<Box<str>, ToolState> = + serde_json::from_reader(&mut file).unwrap_or_default(); + current_toolstates.insert(tool.into(), state); + t!(file.seek(SeekFrom::Start(0))); + t!(file.set_len(0)); + t!(serde_json::to_writer(file, ¤t_toolstates)); + } + } + /// Get a list of crates from a root crate. /// /// Returns Vec<(crate, path to crate, is_root_crate)> |
