Skip to content

Commit 9118c7f

Browse files
committed
Auto merge of #6637 - dwijnand:introduce-Source.download_now, r=@Eh2406
Introduce Source::download_now Fixes #6518
2 parents 1b17388 + 643d258 commit 9118c7f

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

src/cargo/core/source/mod.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ use std::collections::hash_map::HashMap;
22
use std::fmt;
33

44
use crate::core::{Dependency, Package, PackageId, Summary};
5-
use crate::util::CargoResult;
5+
use crate::core::package::PackageSet;
6+
use crate::util::{CargoResult, Config};
67

78
mod source_id;
89

@@ -51,6 +52,16 @@ pub trait Source {
5152
/// version specified.
5253
fn download(&mut self, package: PackageId) -> CargoResult<MaybePackage>;
5354

55+
fn download_now(self: Box<Self>, package: PackageId, config: &Config) -> CargoResult<Package>
56+
where
57+
Self: std::marker::Sized,
58+
{
59+
let mut sources = SourceMap::new();
60+
sources.insert(self);
61+
let pkg_set = PackageSet::new(&[package], sources, config)?;
62+
Ok(pkg_set.get_one(package)?.clone())
63+
}
64+
5465
fn finish_download(&mut self, package: PackageId, contents: Vec<u8>) -> CargoResult<Package>;
5566

5667
/// Generates a unique string which represents the fingerprint of the

src/cargo/ops/common_for_install_and_uninstall.rs

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ use std::path::{Path, PathBuf};
77
use semver::VersionReq;
88
use serde::{Deserialize, Serialize};
99

10-
use crate::core::package::PackageSet;
11-
use crate::core::source::SourceMap;
1210
use crate::core::PackageId;
1311
use crate::core::{Dependency, Package, Source, SourceId};
1412
use crate::sources::PathSource;
@@ -139,8 +137,11 @@ where
139137
};
140138
let dep = Dependency::parse_no_deprecated(name, vers_spec, source.source_id())?;
141139
let deps = source.query_vec(&dep)?;
142-
let pkgid = match deps.iter().map(|p| p.package_id()).max() {
143-
Some(pkgid) => pkgid,
140+
match deps.iter().map(|p| p.package_id()).max() {
141+
Some(pkgid) => {
142+
let pkg = Box::new(&mut source).download_now(pkgid, config)?;
143+
Ok((pkg, Box::new(source)))
144+
},
144145
None => {
145146
let vers_info = vers
146147
.map(|v| format!(" with version `{}`", v))
@@ -152,16 +153,7 @@ where
152153
vers_info
153154
)
154155
}
155-
};
156-
157-
let pkg = {
158-
let mut map = SourceMap::new();
159-
map.insert(Box::new(&mut source));
160-
PackageSet::new(&[pkgid], map, config)?
161-
.get_one(pkgid)?
162-
.clone()
163-
};
164-
Ok((pkg, Box::new(source)))
156+
}
165157
}
166158
None => {
167159
let candidates = list_all(&mut source)?;

0 commit comments

Comments
 (0)