Skip to content

Commit ab3a1c5

Browse files
committed
Don't use current package when reading lockfile
1 parent 3fe50e1 commit ab3a1c5

File tree

3 files changed

+39
-10
lines changed

3 files changed

+39
-10
lines changed

src/cargo/core/resolver/encode.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,16 @@ pub type Metadata = BTreeMap<String, String>;
2323
impl EncodableResolve {
2424
pub fn into_resolve(self, ws: &Workspace) -> CargoResult<Resolve> {
2525
let path_deps = build_path_deps(ws);
26-
let default = try!(ws.current()).package_id().source_id();
2726

2827
let mut g = Graph::new();
2928
let mut tmp = HashMap::new();
3029
let mut replacements = HashMap::new();
3130

3231
let id2pkgid = |id: &EncodablePackageId| {
33-
to_package_id(&id.name, &id.version, id.source.as_ref(),
34-
default, &path_deps)
32+
to_package_id(&id.name, &id.version, id.source.as_ref(), &path_deps)
3533
};
3634
let dep2pkgid = |dep: &EncodableDependency| {
37-
to_package_id(&dep.name, &dep.version, dep.source.as_ref(),
38-
default, &path_deps)
35+
to_package_id(&dep.name, &dep.version, dep.source.as_ref(), &path_deps)
3936
};
4037

4138
let packages = {
@@ -127,7 +124,6 @@ impl EncodableResolve {
127124
let id = try!(to_package_id(&id.name,
128125
&id.version,
129126
id.source.as_ref(),
130-
default,
131127
&path_deps));
132128
let v = if v == "<none>" {
133129
None
@@ -194,11 +190,14 @@ fn build_path_deps(ws: &Workspace) -> HashMap<String, SourceId> {
194190
fn to_package_id(name: &str,
195191
version: &str,
196192
source: Option<&SourceId>,
197-
default_source: &SourceId,
198193
path_sources: &HashMap<String, SourceId>)
199194
-> CargoResult<PackageId> {
200-
let source = source.or(path_sources.get(name)).unwrap_or(default_source);
201-
PackageId::new(name, version, source)
195+
if let Some(source) = source.or(path_sources.get(name)) {
196+
PackageId::new(name, version, source)
197+
} else {
198+
let dummy_source = SourceId::from_url("path+file:///dummy_path").unwrap();
199+
PackageId::new(name, version, &dummy_source)
200+
}
202201
}
203202

204203

tests/install.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ fn git_with_lockfile() {
750750
[root]
751751
name = "foo"
752752
version = "0.1.0"
753-
dependencies = [ "b 0.1.0" ]
753+
dependencies = [ "bar 0.1.0" ]
754754
755755
[[package]]
756756
name = "bar"

tests/workspaces.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -910,3 +910,33 @@ fn workspace_in_git() {
910910
assert_that(p.cargo("build"),
911911
execs().with_status(0));
912912
}
913+
914+
915+
#[test]
916+
fn lockfile_can_specify_nonexistant_members() {
917+
let p = project("foo")
918+
.file("Cargo.toml", r#"
919+
[workspace]
920+
members = ["a"]
921+
"#)
922+
.file("a/Cargo.toml", r#"
923+
[project]
924+
name = "a"
925+
version = "0.1.0"
926+
authors = []
927+
"#)
928+
.file("a/src/main.rs", "fn main() {}")
929+
.file("Cargo.lock", r#"
930+
[root]
931+
name = "a"
932+
version = "0.1.0"
933+
934+
[[package]]
935+
name = "b"
936+
version = "0.1.0"
937+
"#);
938+
939+
p.build();
940+
941+
assert_that(p.cargo("build").cwd(p.root().join("a")), execs().with_status(0));
942+
}

0 commit comments

Comments
 (0)