mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
Auto merge of #6637 - dwijnand:introduce-Source.download_now, r=@Eh2406
Introduce Source::download_now Fixes #6518
This commit is contained in:
commit
9118c7fa3e
@ -2,7 +2,8 @@ use std::collections::hash_map::HashMap;
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use crate::core::{Dependency, Package, PackageId, Summary};
|
use crate::core::{Dependency, Package, PackageId, Summary};
|
||||||
use crate::util::CargoResult;
|
use crate::core::package::PackageSet;
|
||||||
|
use crate::util::{CargoResult, Config};
|
||||||
|
|
||||||
mod source_id;
|
mod source_id;
|
||||||
|
|
||||||
@ -51,6 +52,16 @@ pub trait Source {
|
|||||||
/// version specified.
|
/// version specified.
|
||||||
fn download(&mut self, package: PackageId) -> CargoResult<MaybePackage>;
|
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>;
|
fn finish_download(&mut self, package: PackageId, contents: Vec<u8>) -> CargoResult<Package>;
|
||||||
|
|
||||||
/// Generates a unique string which represents the fingerprint of the
|
/// Generates a unique string which represents the fingerprint of the
|
||||||
|
@ -7,8 +7,6 @@ use std::path::{Path, PathBuf};
|
|||||||
use semver::VersionReq;
|
use semver::VersionReq;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::core::package::PackageSet;
|
|
||||||
use crate::core::source::SourceMap;
|
|
||||||
use crate::core::PackageId;
|
use crate::core::PackageId;
|
||||||
use crate::core::{Dependency, Package, Source, SourceId};
|
use crate::core::{Dependency, Package, Source, SourceId};
|
||||||
use crate::sources::PathSource;
|
use crate::sources::PathSource;
|
||||||
@ -139,8 +137,11 @@ where
|
|||||||
};
|
};
|
||||||
let dep = Dependency::parse_no_deprecated(name, vers_spec, source.source_id())?;
|
let dep = Dependency::parse_no_deprecated(name, vers_spec, source.source_id())?;
|
||||||
let deps = source.query_vec(&dep)?;
|
let deps = source.query_vec(&dep)?;
|
||||||
let pkgid = match deps.iter().map(|p| p.package_id()).max() {
|
match deps.iter().map(|p| p.package_id()).max() {
|
||||||
Some(pkgid) => pkgid,
|
Some(pkgid) => {
|
||||||
|
let pkg = Box::new(&mut source).download_now(pkgid, config)?;
|
||||||
|
Ok((pkg, Box::new(source)))
|
||||||
|
},
|
||||||
None => {
|
None => {
|
||||||
let vers_info = vers
|
let vers_info = vers
|
||||||
.map(|v| format!(" with version `{}`", v))
|
.map(|v| format!(" with version `{}`", v))
|
||||||
@ -152,16 +153,7 @@ where
|
|||||||
vers_info
|
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 => {
|
None => {
|
||||||
let candidates = list_all(&mut source)?;
|
let candidates = list_all(&mut source)?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user