]> git.lizzy.rs Git - rust.git/blob - src/tools/rustdoc-themes/main.rs
Rollup merge of #105109 - rcvalle:rust-kcfi, r=bjorn3
[rust.git] / src / tools / rustdoc-themes / main.rs
1 use std::env::args;
2 use std::fs::read_dir;
3 use std::path::Path;
4 use std::process::{exit, Command};
5
6 const FILES_TO_IGNORE: &[&str] = &["light.css"];
7
8 fn get_folders<P: AsRef<Path>>(folder_path: P) -> Vec<String> {
9     let mut ret = Vec::with_capacity(10);
10
11     for entry in read_dir(folder_path.as_ref()).expect("read_dir failed") {
12         let entry = entry.expect("Couldn't unwrap entry");
13         let path = entry.path();
14
15         if !path.is_file() {
16             continue;
17         }
18         let filename = path.file_name().expect("file_name failed");
19         if FILES_TO_IGNORE.iter().any(|x| x == &filename) {
20             continue;
21         }
22         ret.push(format!("{}", path.display()));
23     }
24     ret
25 }
26
27 fn main() {
28     let argv: Vec<String> = args().collect();
29
30     if argv.len() < 3 {
31         eprintln!("Needs rustdoc binary path");
32         exit(1);
33     }
34     let rustdoc_bin = &argv[1];
35     let themes_folder = &argv[2];
36     let themes = get_folders(&themes_folder);
37     if themes.is_empty() {
38         eprintln!("No theme found in \"{}\"...", themes_folder);
39         exit(1);
40     }
41     let arg_name = "--check-theme".to_owned();
42     let status = Command::new(rustdoc_bin)
43         .args(&themes.iter().flat_map(|t| vec![&arg_name, t].into_iter()).collect::<Vec<_>>())
44         .status()
45         .expect("failed to execute child");
46     if !status.success() {
47         exit(1);
48     }
49 }