Skip to content

Commit 57562fd

Browse files
Merge #1487
1487: Handle renamed dependencies coming from Cargo r=carols10cents a=alexcrichton This commit is intended to be coupled with rust-lang/cargo#5993 where Cargo will start sending the registry more information about locally renamed crates to persist into the index. Co-authored-by: Alex Crichton <[email protected]>
2 parents 33cf649 + c04208b commit 57562fd

File tree

5 files changed

+59
-1
lines changed

5 files changed

+59
-1
lines changed

src/git.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ pub struct Dependency {
3434
pub default_features: bool,
3535
pub target: Option<String>,
3636
pub kind: Option<DependencyKind>,
37+
#[serde(skip_serializing_if = "Option::is_none")]
38+
pub package: Option<String>,
3739
}
3840

3941
fn index_file(base: &Path, name: &str) -> PathBuf {

src/models/dependency.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,26 @@ pub fn add_dependencies(
9696
));
9797
}
9898

99+
// If this dependency has an explicit name in `Cargo.toml` that
100+
// means that the `name` we have listed is actually the package name
101+
// that we're depending on. The `name` listed in the index is the
102+
// Cargo.toml-written-name which is what cargo uses for
103+
// `--extern foo=...`
104+
let (name, package) = match &dep.explicit_name_in_toml {
105+
Some(explicit) => (explicit.to_string(), Some(dep.name.to_string())),
106+
None => (dep.name.to_string(), None),
107+
};
108+
99109
Ok((
100110
git::Dependency {
101-
name: dep.name.to_string(),
111+
name,
102112
req: dep.version_req.to_string(),
103113
features: dep.features.iter().map(|s| s.to_string()).collect(),
104114
optional: dep.optional,
105115
default_features: dep.default_features,
106116
target: dep.target.clone(),
107117
kind: dep.kind.or(Some(DependencyKind::Normal)),
118+
package,
108119
},
109120
(
110121
version_id.eq(target_version_id),
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"request":{"uri":"http://alexcrichton-test.s3.amazonaws.com/crates/new-krate/new-krate-1.0.0.crate","method":"PUT","headers":[["date","Fri, 15 Sep 2017 07:53:06 -0700"],["content-length","35"],["content-type","application/x-tar"],["proxy-connection","Keep-Alive"],["accept","*/*"],["host","alexcrichton-test.s3.amazonaws.com"],["authorization","AWS AKIAICL5IWUZYWWKA7JA:uDc39eNdF6CcwB+q+JwKsoDLQc4="]],"body":[31,139,8,0,0,0,0,0,0,255,237,192,1,1,0,0,0,130,32,255,175,110,72,80,192,171,1,46,175,181,239,0,4,0,0]},"response":{"status":200,"headers":[["content-length","0"],["Server","AmazonS3"],["date","Fri, 15 Sep 2017 14:53:07 GMT"],["ETag","\"f9016ad360cebb4fe2e6e96e5949f022\""],["x-amz-id-2","JdIvnNTw53aqXjBIqBLNuN4kxf/w1XWX+xuIiGBDYy7yzOSDuAMtBSrTW4ZWetcCIdqCUHuQ51A="],["x-amz-request-id","26589A5E52F8395C"]],"body":[]}}]

src/tests/krate.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,7 @@ fn new_krate_with_dependency() {
724724
version_req: u::CrateVersionReq(semver::VersionReq::parse(">= 0").unwrap()),
725725
target: None,
726726
kind: None,
727+
explicit_name_in_toml: None,
727728
};
728729
let mut req = new_req_full(Arc::clone(&app), krate("new_dep"), "1.0.0", vec![dep]);
729730
{
@@ -750,6 +751,45 @@ fn new_krate_with_dependency() {
750751
assert_eq!(p.deps[0].name, "foo_dep");
751752
}
752753

754+
#[test]
755+
fn new_renamed_crate() {
756+
let (_b, app, middle) = app();
757+
let dep = u::CrateDependency {
758+
name: u::CrateName("package-name".to_string()),
759+
optional: false,
760+
default_features: true,
761+
features: Vec::new(),
762+
version_req: u::CrateVersionReq(semver::VersionReq::parse(">= 0").unwrap()),
763+
target: None,
764+
kind: None,
765+
explicit_name_in_toml: Some(u::CrateName("my-name".to_string())),
766+
};
767+
let mut req = new_req_full(Arc::clone(&app), krate("new-krate"), "1.0.0", vec![dep]);
768+
{
769+
let conn = app.diesel_database.get().unwrap();
770+
let user = new_user("user").create_or_update(&conn).unwrap();
771+
sign_in_as(&mut req, &user);
772+
CrateBuilder::new("package-name", user.id).expect_build(&conn);
773+
}
774+
775+
let mut response = ok_resp!(middle.call(&mut req));
776+
::json::<GoodCrate>(&mut response);
777+
778+
let path = ::git::checkout().join("ne/w-/new-krate");
779+
assert!(path.exists());
780+
let mut contents = String::new();
781+
File::open(&path)
782+
.unwrap()
783+
.read_to_string(&mut contents)
784+
.unwrap();
785+
let p: git::Crate = serde_json::from_str(&contents).unwrap();
786+
assert_eq!(p.name, "new-krate");
787+
assert_eq!(p.vers, "1.0.0");
788+
assert_eq!(p.deps.len(), 1);
789+
assert_eq!(p.deps[0].name, "my-name");
790+
assert_eq!(p.deps[0].package, Some("package-name".to_string()));
791+
}
792+
753793
#[test]
754794
fn new_krate_non_canon_crate_name_dependencies() {
755795
let (_b, app, middle) = app();
@@ -761,6 +801,7 @@ fn new_krate_non_canon_crate_name_dependencies() {
761801
version_req: u::CrateVersionReq(semver::VersionReq::parse(">= 0").unwrap()),
762802
target: None,
763803
kind: None,
804+
explicit_name_in_toml: None,
764805
}];
765806
let mut req = new_req_full(Arc::clone(&app), krate("new_dep"), "1.0.0", deps);
766807
{
@@ -785,6 +826,7 @@ fn new_krate_with_wildcard_dependency() {
785826
version_req: u::CrateVersionReq(semver::VersionReq::parse("*").unwrap()),
786827
target: None,
787828
kind: None,
829+
explicit_name_in_toml: None,
788830
};
789831
let mut req = new_req_full(Arc::clone(&app), krate("new_wild"), "1.0.0", vec![dep]);
790832
{
@@ -1112,6 +1154,7 @@ fn new_krate_dependency_missing() {
11121154
version_req: u::CrateVersionReq(semver::VersionReq::parse(">= 0.0.0").unwrap()),
11131155
target: None,
11141156
kind: None,
1157+
explicit_name_in_toml: None,
11151158
};
11161159
let mut req = new_req_full(Arc::clone(&app), krate("foo_missing"), "1.0.0", vec![dep]);
11171160
sign_in(&mut req, &app);

src/views/krate_publish.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ pub struct CrateDependency {
6363
pub version_req: CrateVersionReq,
6464
pub target: Option<String>,
6565
pub kind: Option<DependencyKind>,
66+
pub explicit_name_in_toml: Option<CrateName>,
6667
}
6768

6869
impl<'de> Deserialize<'de> for CrateName {

0 commit comments

Comments
 (0)