Auto merge of #6637 - dwijnand:introduce-Source.download_now, r=@Eh2406

Introduce Source::download_now

Fixes #6518
This commit is contained in:
bors 2019-02-09 03:12:44 +00:00
commit 9118c7fa3e
2 changed files with 18 additions and 15 deletions

View File

@ -2,7 +2,8 @@ use std::collections::hash_map::HashMap;
use std::fmt;
use crate::core::{Dependency, Package, PackageId, Summary};
use crate::util::CargoResult;
use crate::core::package::PackageSet;
use crate::util::{CargoResult, Config};
mod source_id;
@ -51,6 +52,16 @@ pub trait Source {
/// version specified.
fn download(&mut self, package: PackageId) -> CargoResult<MaybePackage>;
fn download_now(self: Box<Self>, package: PackageId, config: &Config) -> CargoResult<Package>
where
Self: std::marker::Sized,
{
let mut sources = SourceMap::new();
sources.insert(self);
let pkg_set = PackageSet::new(&[package], sources, config)?;
Ok(pkg_set.get_one(package)?.clone())
}
fn finish_download(&mut self, package: PackageId, contents: Vec<u8>) -> CargoResult<Package>;
/// Generates a unique string which represents the fingerprint of the

View File

@ -7,8 +7,6 @@ use std::path::{Path, PathBuf};
use semver::VersionReq;
use serde::{Deserialize, Serialize};
use crate::core::package::PackageSet;
use crate::core::source::SourceMap;
use crate::core::PackageId;
use crate::core::{Dependency, Package, Source, SourceId};
use crate::sources::PathSource;
@ -139,8 +137,11 @@ where
};
let dep = Dependency::parse_no_deprecated(name, vers_spec, source.source_id())?;
let deps = source.query_vec(&dep)?;
let pkgid = match deps.iter().map(|p| p.package_id()).max() {
Some(pkgid) => pkgid,
match deps.iter().map(|p| p.package_id()).max() {
Some(pkgid) => {
let pkg = Box::new(&mut source).download_now(pkgid, config)?;
Ok((pkg, Box::new(source)))
},
None => {
let vers_info = vers
.map(|v| format!(" with version `{}`", v))
@ -152,16 +153,7 @@ where
vers_info
)
}
};
let pkg = {
let mut map = SourceMap::new();
map.insert(Box::new(&mut source));
PackageSet::new(&[pkgid], map, config)?
.get_one(pkgid)?
.clone()
};
Ok((pkg, Box::new(source)))
}
}
None => {
let candidates = list_all(&mut source)?;