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 features;
|
||||||
mod cargo;
|
mod cargo;
|
||||||
mod pal;
|
mod pal;
|
||||||
|
mod deps;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let path = env::args_os().skip(1).next().expect("need an argument");
|
let path = env::args_os().skip(1).next().expect("need an argument");
|
||||||
@ -48,6 +49,7 @@ fn main() {
|
|||||||
cargo::check(&path, &mut bad);
|
cargo::check(&path, &mut bad);
|
||||||
features::check(&path, &mut bad);
|
features::check(&path, &mut bad);
|
||||||
pal::check(&path, &mut bad);
|
pal::check(&path, &mut bad);
|
||||||
|
deps::check(&path, &mut bad);
|
||||||
|
|
||||||
if bad {
|
if bad {
|
||||||
panic!("some tidy checks failed");
|
panic!("some tidy checks failed");
|
||||||
|
Loading…
Reference in New Issue
Block a user