Skip to content

Commit df62a57

Browse files
committed
list used used_replacements after we figure out what is used
1 parent 0131d09 commit df62a57

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

src/cargo/core/resolver/context.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ pub struct Context {
4747
// hash maps but are built up as "construction lists". We'll iterate these
4848
// at the very end and actually construct the map that we're making.
4949
pub resolve_graph: RcList<GraphNode>,
50-
pub resolve_replacements: RcList<(PackageId, PackageId)>,
5150
}
5251

5352
/// When backtracking it can be useful to know how far back to go.
@@ -104,7 +103,6 @@ impl Context {
104103
None
105104
},
106105
parents: Graph::new(),
107-
resolve_replacements: RcList::new(),
108106
activations: im_rc::HashMap::new(),
109107
}
110108
}
@@ -331,15 +329,14 @@ impl Context {
331329
Ok(ret)
332330
}
333331

334-
pub fn resolve_replacements(&self) -> HashMap<PackageId, PackageId> {
335-
let mut replacements = HashMap::new();
336-
let mut cur = &self.resolve_replacements;
337-
while let Some(ref node) = cur.head {
338-
let (k, v) = node.0;
339-
replacements.insert(k, v);
340-
cur = &node.1;
341-
}
342-
replacements
332+
pub fn resolve_replacements(
333+
&self,
334+
registry: &RegistryQueryer<'_>,
335+
) -> HashMap<PackageId, PackageId> {
336+
self.activations
337+
.values()
338+
.filter_map(|(s, _)| registry.used_replacement_for(s.package_id()))
339+
.collect()
343340
}
344341

345342
pub fn graph(&self) -> Graph<PackageId, Vec<Dependency>> {

src/cargo/core/resolver/mod.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ pub fn resolve(
143143
}
144144
let resolve = Resolve::new(
145145
cx.graph(),
146-
cx.resolve_replacements(),
146+
cx.resolve_replacements(&registry),
147147
cx.resolve_features
148148
.iter()
149149
.map(|(k, v)| (*k, v.iter().map(|x| x.to_string()).collect()))
@@ -668,8 +668,6 @@ fn activate(
668668

669669
let candidate = match candidate.replace {
670670
Some(replace) => {
671-
cx.resolve_replacements
672-
.push((candidate_pid, replace.package_id()));
673671
if cx.flag_activated(&replace, method)? && activated {
674672
return Ok(None);
675673
}

src/cargo/core/resolver/types.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,12 @@ pub struct RegistryQueryer<'a> {
9595
pub registry: &'a mut (dyn Registry + 'a),
9696
replacements: &'a [(PackageIdSpec, Dependency)],
9797
try_to_use: &'a HashSet<PackageId>,
98-
cache: HashMap<Dependency, Rc<Vec<Candidate>>>,
9998
// If set the list of dependency candidates will be sorted by minimal
10099
// versions first. That allows `cargo update -Z minimal-versions` which will
101100
// specify minimum dependency versions to be used.
102101
minimal_versions: bool,
102+
cache: HashMap<Dependency, Rc<Vec<Candidate>>>,
103+
used_replacements: HashMap<PackageId, PackageId>,
103104
}
104105

105106
impl<'a> RegistryQueryer<'a> {
@@ -112,12 +113,17 @@ impl<'a> RegistryQueryer<'a> {
112113
RegistryQueryer {
113114
registry,
114115
replacements,
115-
cache: HashMap::new(),
116116
try_to_use,
117117
minimal_versions,
118+
cache: HashMap::new(),
119+
used_replacements: HashMap::new(),
118120
}
119121
}
120122

123+
pub fn used_replacement_for(&self, p: PackageId) -> Option<(PackageId, PackageId)> {
124+
self.used_replacements.get(&p).map(|&r| (p, r))
125+
}
126+
121127
/// Queries the `registry` to return a list of candidates for `dep`.
122128
///
123129
/// This method is the location where overrides are taken into account. If
@@ -212,6 +218,10 @@ impl<'a> RegistryQueryer<'a> {
212218
for dep in summary.dependencies() {
213219
debug!("\t{} => {}", dep.package_name(), dep.version_req());
214220
}
221+
if let Some(r) = &replace {
222+
self.used_replacements
223+
.insert(summary.package_id(), r.package_id());
224+
}
215225

216226
candidate.replace = replace;
217227
}

0 commit comments

Comments
 (0)