Skip to content

Commit dd0a20d

Browse files
epageelchukc
authored andcommitted
download transitive deps of artifact deps on target platform
1 parent f01f062 commit dd0a20d

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

src/cargo/core/package.rs

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -499,17 +499,18 @@ impl<'gctx> PackageSet<'gctx> {
499499
force_all_targets: ForceAllTargets,
500500
) -> CargoResult<()> {
501501
fn collect_used_deps(
502-
used: &mut BTreeSet<PackageId>,
502+
used: &mut BTreeSet<(PackageId, CompileKind)>,
503503
resolve: &Resolve,
504504
pkg_id: PackageId,
505505
has_dev_units: HasDevUnits,
506-
requested_kinds: &[CompileKind],
506+
requested_kind: CompileKind,
507507
target_data: &RustcTargetData<'_>,
508508
force_all_targets: ForceAllTargets,
509509
) -> CargoResult<()> {
510-
if !used.insert(pkg_id) {
510+
if !used.insert((pkg_id, requested_kind)) {
511511
return Ok(());
512512
}
513+
let requested_kinds = &[requested_kind];
513514
let filtered_deps = PackageSet::filter_deps(
514515
pkg_id,
515516
resolve,
@@ -518,16 +519,34 @@ impl<'gctx> PackageSet<'gctx> {
518519
target_data,
519520
force_all_targets,
520521
);
521-
for (pkg_id, _dep) in filtered_deps {
522+
for (pkg_id, deps) in filtered_deps {
522523
collect_used_deps(
523524
used,
524525
resolve,
525526
pkg_id,
526527
has_dev_units,
527-
requested_kinds,
528+
requested_kind,
528529
target_data,
529530
force_all_targets,
530531
)?;
532+
let artifact_kinds = deps.iter().filter_map(|dep| {
533+
Some(
534+
dep.artifact()?
535+
.target()?
536+
.to_resolved_compile_kind(*requested_kinds.iter().next().unwrap()),
537+
)
538+
});
539+
for artifact_kind in artifact_kinds {
540+
collect_used_deps(
541+
used,
542+
resolve,
543+
pkg_id,
544+
has_dev_units,
545+
artifact_kind,
546+
target_data,
547+
force_all_targets,
548+
)?;
549+
}
531550
}
532551
Ok(())
533552
}
@@ -538,16 +557,22 @@ impl<'gctx> PackageSet<'gctx> {
538557
let mut to_download = BTreeSet::new();
539558

540559
for id in root_ids {
541-
collect_used_deps(
542-
&mut to_download,
543-
resolve,
544-
*id,
545-
has_dev_units,
546-
requested_kinds,
547-
target_data,
548-
force_all_targets,
549-
)?;
560+
for requested_kind in requested_kinds {
561+
collect_used_deps(
562+
&mut to_download,
563+
resolve,
564+
*id,
565+
has_dev_units,
566+
*requested_kind,
567+
target_data,
568+
force_all_targets,
569+
)?;
570+
}
550571
}
572+
let to_download = to_download
573+
.into_iter()
574+
.map(|(p, _)| p)
575+
.collect::<BTreeSet<_>>();
551576
self.get_many(to_download.into_iter())?;
552577
Ok(())
553578
}

0 commit comments

Comments
 (0)