Auto merge of #38291 - brson:licenseck, r=alexcrichton
Check the license of vendored deps r? @alexcrichton
This commit is contained in:
commit
81fb6509c8
73
src/tools/tidy/src/deps.rs
Normal file
73
src/tools/tidy/src/deps.rs
Normal file
@ -0,0 +1,73 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
//! Check license of third-party deps by inspecting src/vendor
|
||||
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
use std::path::Path;
|
||||
|
||||
static LICENSES: &'static [&'static str] = &[
|
||||
"MIT/Apache-2.0"
|
||||
];
|
||||
|
||||
pub fn check(path: &Path, bad: &mut bool) {
|
||||
let path = path.join("vendor");
|
||||
assert!(path.exists(), "vendor directory missing");
|
||||
let mut saw_dir = false;
|
||||
for dir in t!(path.read_dir()) {
|
||||
saw_dir = true;
|
||||
let dir = t!(dir);
|
||||
let toml = dir.path().join("Cargo.toml");
|
||||
if !check_license(&toml) {
|
||||
*bad = true;
|
||||
}
|
||||
}
|
||||
assert!(saw_dir, "no vendored source");
|
||||
}
|
||||
|
||||
fn check_license(path: &Path) -> bool {
|
||||
if !path.exists() {
|
||||
panic!("{} does not exist", path.display());
|
||||
}
|
||||
let mut contents = String::new();
|
||||
t!(t!(File::open(path)).read_to_string(&mut contents));
|
||||
|
||||
let mut found_license = false;
|
||||
for line in contents.lines() {
|
||||
if !line.starts_with("license") {
|
||||
continue;
|
||||
}
|
||||
let license = extract_license(line);
|
||||
if !LICENSES.contains(&&*license) {
|
||||
println!("invalid license {} in {}", license, path.display());
|
||||
return false;
|
||||
}
|
||||
found_license = true;
|
||||
break;
|
||||
}
|
||||
if !found_license {
|
||||
println!("no license in {}", path.display());
|
||||
return false;
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
fn extract_license(line: &str) -> String {
|
||||
let first_quote = line.find('"');
|
||||
let last_quote = line.rfind('"');
|
||||
if let (Some(f), Some(l)) = (first_quote, last_quote) {
|
||||
let license = &line[f + 1 .. l];
|
||||
license.into()
|
||||
} else {
|
||||
"bad-license-parse".into()
|
||||
}
|
||||
}
|
@ -36,6 +36,7 @@ mod errors;
|
||||
mod features;
|
||||
mod cargo;
|
||||
mod pal;
|
||||
mod deps;
|
||||
|
||||
fn main() {
|
||||
let path = env::args_os().skip(1).next().expect("need an argument");
|
||||
@ -48,6 +49,7 @@ fn main() {
|
||||
cargo::check(&path, &mut bad);
|
||||
features::check(&path, &mut bad);
|
||||
pal::check(&path, &mut bad);
|
||||
deps::check(&path, &mut bad);
|
||||
|
||||
if bad {
|
||||
panic!("some tidy checks failed");
|
||||
|
Loading…
Reference in New Issue
Block a user