| //! Check for external package sources. Allow only vendorable packages. |
| |
| use std::fs; |
| use std::path::Path; |
| |
| /// List of allowed sources for packages. |
| const ALLOWED_SOURCES: &[&str] = &["\"registry+https://github.com/rust-lang/crates.io-index\""]; |
| |
| /// Checks for external package sources. |
| pub fn check(path: &Path, bad: &mut bool) { |
| // `Cargo.lock` of rust (tidy runs inside `src/`). |
| let path = path.join("../Cargo.lock"); |
| |
| // Open and read the whole file. |
| let cargo_lock = t!(fs::read_to_string(&path)); |
| |
| // Process each line. |
| for line in cargo_lock.lines() { |
| // Consider only source entries. |
| if !line.starts_with("source = ") { |
| continue; |
| } |
| |
| // Extract source value. |
| let source = line.splitn(2, '=').nth(1).unwrap().trim(); |
| |
| // Ensure source is allowed. |
| if !ALLOWED_SOURCES.contains(&&*source) { |
| println!("invalid source: {}", source); |
| *bad = true; |
| } |
| } |
| } |