Skip to content

Commit 4894e08

Browse files
andwuralexcrichton
authored andcommitted
Fix non-deterministic unit dependency list generation
This resulted in the flags passed to rustc having random ordering, see #3895.
1 parent d5bfd58 commit 4894e08

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/cargo/core/resolver/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,12 @@ unable to verify that `{0}` is the same as when the lockfile was generated
200200
Deps { edges: self.graph.edges(pkg), resolve: self }
201201
}
202202

203+
pub fn deps_sorted(&self, pkg: &PackageId) -> Vec<&PackageId> {
204+
let mut deps = self.deps(pkg).collect::<Vec<_>>();
205+
deps.sort();
206+
deps
207+
}
208+
203209
pub fn deps_not_replaced(&self, pkg: &PackageId) -> DepsNotReplaced {
204210
DepsNotReplaced { edges: self.graph.edges(pkg) }
205211
}

src/cargo/ops/cargo_rustc/context.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -614,8 +614,8 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
614614
}
615615

616616
let id = unit.pkg.package_id();
617-
let deps = self.resolve.deps(id);
618-
let mut ret = deps.filter(|dep| {
617+
let deps = self.resolve.deps_sorted(id);
618+
let mut ret = deps.iter().filter(|dep| {
619619
unit.pkg.dependencies().iter().filter(|d| {
620620
d.name() == dep.name() && d.version_req().matches(dep.version())
621621
}).any(|d| {
@@ -748,7 +748,8 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
748748

749749
/// Returns the dependencies necessary to document a package
750750
fn doc_deps(&self, unit: &Unit<'a>) -> CargoResult<Vec<Unit<'a>>> {
751-
let deps = self.resolve.deps(unit.pkg.package_id()).filter(|dep| {
751+
let deps = self.resolve.deps_sorted(unit.pkg.package_id());
752+
let deps = deps.iter().filter(|dep| {
752753
unit.pkg.dependencies().iter().filter(|d| {
753754
d.name() == dep.name()
754755
}).any(|dep| {

0 commit comments

Comments
 (0)