Skip to content

Commit

Permalink
Merge pull request #146 from ChrisGreenaway/fix-issue-131-renamed-dep…
Browse files Browse the repository at this point in the history
…endencies

Fixes issue #131 - handle renamed dependencies
  • Loading branch information
ChrisGreenaway authored Jul 29, 2019
2 parents 11e8a45 + 4e6d295 commit 8d6d904
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 26 deletions.
39 changes: 24 additions & 15 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ struct RegistryDependency {
default_features: bool,
target: Option<String>,
kind: Option<String>,
package: Option<String>
}

fn main() {
Expand Down Expand Up @@ -295,21 +296,29 @@ fn registry_pkg(pkg: &Package, resolve: &Resolve) -> RegistryPackage {
let mut deps = pkg
.dependencies()
.iter()
.map(|dep| RegistryDependency {
name: dep.package_name().to_string(),
req: dep.version_req().to_string(),
features: dep.features().iter().map(|s| s.to_string()).collect(),
optional: dep.is_optional(),
default_features: dep.uses_default_features(),
target: dep.platform().map(|platform| match *platform {
Platform::Name(ref s) => s.to_string(),
Platform::Cfg(ref s) => format!("cfg({})", s),
}),
kind: match dep.kind() {
Kind::Normal => None,
Kind::Development => Some("dev".to_string()),
Kind::Build => Some("build".to_string()),
},
.map(|dep| {
let (name, package) = match &dep.explicit_name_in_toml() {
Some(explicit) => (explicit.to_string(), Some(dep.package_name().to_string())),
None => (dep.package_name().to_string(), None),
};

RegistryDependency {
name,
req: dep.version_req().to_string(),
features: dep.features().iter().map(|s| s.to_string()).collect(),
optional: dep.is_optional(),
default_features: dep.uses_default_features(),
target: dep.platform().map(|platform| match *platform {
Platform::Name(ref s) => s.to_string(),
Platform::Cfg(ref s) => format!("cfg({})", s),
}),
kind: match dep.kind() {
Kind::Normal => None,
Kind::Development => Some("dev".to_string()),
Kind::Build => Some("build".to_string()),
},
package,
}
})
.collect::<Vec<_>>();
deps.sort();
Expand Down
64 changes: 53 additions & 11 deletions tests/all.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ dependencies = [
contents.clear();
File::open(registry.join("index/fi/le/filetime")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"filetime","vers":"0.1.10","deps":[{"name":"libc","req":"^0.2","features":[],"optional":false,"default_features":true,"target":null,"kind":null},{"name":"tempdir","req":"^0.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"dev"}],"cksum":"5363ab8e4139b8568a6237db5248646e5a8a2f89bd5ccb02092182b11fd3e922","features":{},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"filetime","vers":"0.1.10","deps":[{"name":"libc","req":"^0.2","features":[],"optional":false,"default_features":true,"target":null,"kind":null,"package":null},{"name":"tempdir","req":"^0.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"dev","package":null}],"cksum":"5363ab8e4139b8568a6237db5248646e5a8a2f89bd5ccb02092182b11fd3e922","features":{},"yanked":false}"#);

File::create(&lock).unwrap().write_all(br#"
[[package]]
Expand Down Expand Up @@ -312,12 +312,54 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
let mut contents = String::new();
let path = registry.join("index/in/fl/inflector");
let path = fs::canonicalize(path).unwrap();

assert_eq!(path.file_name().unwrap(), "inflector");

File::open(registry.join("index/in/fl/inflector")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"Inflector","vers":"0.11.3","deps":[{"name":"lazy_static","req":"^1.0.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null},{"name":"regex","req":"^1.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null}],"cksum":"4467f98bb61f615f8273359bf1c989453dfc1ea4a45ae9298f1dcd0672febe5d","features":{"default":["heavyweight"],"heavyweight":["lazy_static","regex"],"unstable":[]},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"Inflector","vers":"0.11.3","deps":[{"name":"lazy_static","req":"^1.0.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null},{"name":"regex","req":"^1.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null}],"cksum":"4467f98bb61f615f8273359bf1c989453dfc1ea4a45ae9298f1dcd0672febe5d","features":{"default":["heavyweight"],"heavyweight":["lazy_static","regex"],"unstable":[]},"yanked":false}"#);
}

#[test]
fn renamed() {
let td = TempDir::new().unwrap();
let lock = td.path().join("Cargo.lock");
let registry = td.path().join("registry");
fs::create_dir(td.path().join("src")).unwrap();
File::create(&td.path().join("Cargo.toml")).unwrap().write_all(br#"
[package]
name = "foo"
version = "0.1.0"
authors = []
[dependencies]
rustc-demangle = "0.1.14"
"#).unwrap();
File::create(&td.path().join("src/lib.rs")).unwrap().write_all(b"").unwrap();
File::create(&lock).unwrap().write_all(br#"
[[package]]
name = "foo"
version = "0.1.0"
dependencies = [
"rustc-demangle 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rustc-demangle"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
"#).unwrap();
run(cmd().arg(&registry).arg("--sync").arg(&lock));

let mut contents = String::new();
let path = registry.join("index/ru/st/rustc-demangle");
let path = fs::canonicalize(path).unwrap();

assert_eq!(path.file_name().unwrap(), "rustc-demangle");

File::open(registry.join("index/ru/st/rustc-demangle")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"rustc-demangle","vers":"0.1.14","deps":[{"name":"compiler_builtins","req":"^0.1.2","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null},{"name":"core","req":"^1.0.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":"rustc-std-workspace-core"}],"cksum":"ccc78bfd5acd7bf3e89cffcf899e5cb1a52d6fafa8dec2739ad70c9577a57288","features":{"rustc-dep-of-std":["compiler_builtins","core"]},"yanked":false}"#);
}

#[test]
Expand Down Expand Up @@ -368,12 +410,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
let mut contents = String::new();
File::open(registry.join("index/la/zy/lazy_static")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"lazy_static","vers":"0.2.11","deps":[{"name":"compiletest_rs","req":"^0.3","features":[],"optional":true,"default_features":true,"target":null,"kind":null},{"name":"spin","req":"^0.4.6","features":[],"optional":true,"default_features":true,"target":null,"kind":null}],"cksum":"76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73","features":{"compiletest":["compiletest_rs"],"nightly":[],"spin_no_std":["nightly","spin"]},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"lazy_static","vers":"0.2.11","deps":[{"name":"compiletest_rs","req":"^0.3","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null},{"name":"spin","req":"^0.4.6","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null}],"cksum":"76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73","features":{"compiletest":["compiletest_rs"],"nightly":[],"spin_no_std":["nightly","spin"]},"yanked":false}"#);

contents.clear();
File::open(registry.join("index/la/ng/language-tags")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"language-tags","vers":"0.2.2","deps":[{"name":"heapsize","req":">= 0.2.2, < 0.4","features":[],"optional":true,"default_features":true,"target":null,"kind":null},{"name":"heapsize_plugin","req":"^0.1.2","features":[],"optional":true,"default_features":true,"target":null,"kind":null}],"cksum":"a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a","features":{"heap_size":["heapsize","heapsize_plugin"]},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"language-tags","vers":"0.2.2","deps":[{"name":"heapsize","req":">= 0.2.2, < 0.4","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null},{"name":"heapsize_plugin","req":"^0.1.2","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null}],"cksum":"a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a","features":{"heap_size":["heapsize","heapsize_plugin"]},"yanked":false}"#);

// Modify the Cargo.toml to swap an existing library, add a new one and delete another
File::create(&td.path().join("Cargo.toml")).unwrap().write_all(br#"
Expand Down Expand Up @@ -422,18 +464,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
contents.clear();
File::open(registry.join("index/la/zy/lazy_static")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"lazy_static","vers":"0.2.11","deps":[{"name":"compiletest_rs","req":"^0.3","features":[],"optional":true,"default_features":true,"target":null,"kind":null},{"name":"spin","req":"^0.4.6","features":[],"optional":true,"default_features":true,"target":null,"kind":null}],"cksum":"76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73","features":{"compiletest":["compiletest_rs"],"nightly":[],"spin_no_std":["nightly","spin"]},"yanked":false}
{"name":"lazy_static","vers":"1.2.0","deps":[{"name":"spin","req":"^0.4.10","features":["once"],"optional":true,"default_features":false,"target":null,"kind":null}],"cksum":"a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1","features":{"nightly":[],"spin_no_std":["spin"]},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"lazy_static","vers":"0.2.11","deps":[{"name":"compiletest_rs","req":"^0.3","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null},{"name":"spin","req":"^0.4.6","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null}],"cksum":"76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73","features":{"compiletest":["compiletest_rs"],"nightly":[],"spin_no_std":["nightly","spin"]},"yanked":false}
{"name":"lazy_static","vers":"1.2.0","deps":[{"name":"spin","req":"^0.4.10","features":["once"],"optional":true,"default_features":false,"target":null,"kind":null,"package":null}],"cksum":"a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1","features":{"nightly":[],"spin_no_std":["spin"]},"yanked":false}"#);

contents.clear();
File::open(registry.join("index/la/zy/lazycell")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"lazycell","vers":"1.2.1","deps":[{"name":"clippy","req":"^0.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null}],"cksum":"b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f","features":{"nightly":[],"nightly-testing":["clippy","nightly"]},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"lazycell","vers":"1.2.1","deps":[{"name":"clippy","req":"^0.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null}],"cksum":"b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f","features":{"nightly":[],"nightly-testing":["clippy","nightly"]},"yanked":false}"#);

contents.clear();
File::open(registry.join("index/la/ng/language-tags")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"language-tags","vers":"0.2.2","deps":[{"name":"heapsize","req":">= 0.2.2, < 0.4","features":[],"optional":true,"default_features":true,"target":null,"kind":null},{"name":"heapsize_plugin","req":"^0.1.2","features":[],"optional":true,"default_features":true,"target":null,"kind":null}],"cksum":"a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a","features":{"heap_size":["heapsize","heapsize_plugin"]},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"language-tags","vers":"0.2.2","deps":[{"name":"heapsize","req":">= 0.2.2, < 0.4","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null},{"name":"heapsize_plugin","req":"^0.1.2","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null}],"cksum":"a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a","features":{"heap_size":["heapsize","heapsize_plugin"]},"yanked":false}"#);

// Run for the third time -- delete unused (default)
run(cmd().arg(&registry).arg("--sync").arg(&lock));
Expand All @@ -451,12 +493,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
contents.clear();
File::open(registry.join("index/la/zy/lazy_static")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"lazy_static","vers":"1.2.0","deps":[{"name":"spin","req":"^0.4.10","features":["once"],"optional":true,"default_features":false,"target":null,"kind":null}],"cksum":"a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1","features":{"nightly":[],"spin_no_std":["spin"]},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"lazy_static","vers":"1.2.0","deps":[{"name":"spin","req":"^0.4.10","features":["once"],"optional":true,"default_features":false,"target":null,"kind":null,"package":null}],"cksum":"a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1","features":{"nightly":[],"spin_no_std":["spin"]},"yanked":false}"#);

contents.clear();
File::open(registry.join("index/la/zy/lazycell")).unwrap()
.read_to_string(&mut contents).unwrap();
assert_eq!(contents, r#"{"name":"lazycell","vers":"1.2.1","deps":[{"name":"clippy","req":"^0.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null}],"cksum":"b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f","features":{"nightly":[],"nightly-testing":["clippy","nightly"]},"yanked":false}"#);
assert_eq!(contents, r#"{"name":"lazycell","vers":"1.2.1","deps":[{"name":"clippy","req":"^0.0","features":[],"optional":true,"default_features":true,"target":null,"kind":null,"package":null}],"cksum":"b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f","features":{"nightly":[],"nightly-testing":["clippy","nightly"]},"yanked":false}"#);
}

fn run(cmd: &mut Command) -> String {
Expand Down

0 comments on commit 8d6d904

Please sign in to comment.