Skip to content

Instantly share code, notes, and snippets.

@ehuss

ehuss/main.rs Secret

Created November 18, 2019 20:00
Show Gist options
  • Save ehuss/b65122f9bfd835da1c612aa71b1efd28 to your computer and use it in GitHub Desktop.
Save ehuss/b65122f9bfd835da1c612aa71b1efd28 to your computer and use it in GitHub Desktop.
Package name scanner
use anyhow::*;
use rayon::prelude::*;
use std::fs;
fn doit() -> Result<(), Error> {
walkdir::WalkDir::new("/Users/eric/Proj/rust/crates-fetch")
.into_iter()
.par_bridge()
.filter(|entry| entry.as_ref().unwrap().file_name().to_str().unwrap() == "Cargo.toml")
.for_each(|entry| {
let e = entry.unwrap();
let path = e.path();
let contents = match fs::read_to_string(path) {
Ok(s) => s,
Err(e) => {
println!("Failed to read {:?}, ignoring: {:?}", path, e);
return;
}
};
let v = toml::from_str::<toml::Value>(&contents);
if let Ok(v) = v {
let name = match v
.get("package")
.or_else(|| v.get("project"))
.and_then(|p| p.get("name"))
{
Some(name) => name.as_str().unwrap(),
None => {
println!("Couldn't find package name in {:?}", e.path());
return;
}
};
let lib_name = match v.get("lib").and_then(|l| l.get("name")) {
Some(lib_name) => lib_name.as_str().unwrap(),
None => return,
};
if lib_name.replace("-", "_") == name.replace("-", "_") {
return;
}
if name != lib_name {
let pack_vers = e
.path()
.parent()
.unwrap()
.file_name()
.unwrap()
.to_str()
.unwrap();
println!("{},{},{}", pack_vers, name, lib_name);
}
}
});
Ok(())
}
fn main() {
if let Err(e) = doit() {
println!("{:?}", e);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment