Use locked versions in resolution

This commit is contained in:
Louis Pilfold 2021-11-06 19:54:43 +00:00
parent 5e457a4ad4
commit fd668bfa3b
3 changed files with 8 additions and 7 deletions

2
Cargo.lock generated
View file

@ -791,7 +791,7 @@ dependencies = [
[[package]]
name = "hexpm"
version = "1.3.0"
source = "git+https://github.com/gleam-lang/hexpm-rust#17901620a18743f5be17bedb666fe7ffb4a7e9bc"
source = "git+https://github.com/gleam-lang/hexpm-rust#b44e16aa2ce4834de6eeb8f836170d79d8fe496b"
dependencies = [
"bytes",
"flate2",

View file

@ -265,7 +265,7 @@ fn get_manifest(
// If there's no manifest then resolve the versions anew
if !paths::manifest_path().exists() {
tracing::info!("manifest_not_present");
return resolve_versions(runtime, mode, config);
return resolve_versions(runtime, mode, config, &HashMap::new());
}
let manifest = Manifest::read_from_disc()?;
@ -277,8 +277,7 @@ fn get_manifest(
Ok(manifest)
} else {
tracing::info!("manifest_outdated");
// TODO: use the existing already locked versions
resolve_versions(runtime, mode, config)
resolve_versions(runtime, mode, config, &manifest.packages)
}
}
@ -286,10 +285,11 @@ fn resolve_versions(
runtime: tokio::runtime::Handle,
mode: Mode,
config: &PackageConfig,
locked: &HashMap<String, Version>,
) -> Result<Manifest, Error> {
cli::print_resolving_versions();
let manifest = Manifest {
packages: hex::resolve_versions(PackageFetcher::boxed(runtime), mode, config)?,
packages: hex::resolve_versions(PackageFetcher::boxed(runtime), mode, config, locked)?,
requirements: config.all_dependencies()?,
};
Ok(manifest)

View file

@ -2,7 +2,7 @@ use debug_ignore::DebugIgnore;
use flate2::read::GzDecoder;
use futures::future;
use hexpm::version::{PackageVersions, Version};
use std::path::PathBuf;
use std::{collections::HashMap, path::PathBuf};
use tar::Archive;
use crate::{
@ -27,13 +27,14 @@ pub fn resolve_versions(
package_fetcher: Box<dyn hexpm::version::PackageFetcher>,
mode: Mode,
config: &PackageConfig,
locked: &HashMap<String, Version>,
) -> Result<PackageVersions> {
let specified_dependencies = config.dependencies_for(mode)?.into_iter();
hexpm::version::resolve_versions(
package_fetcher,
config.name.clone(),
config.version.clone(),
specified_dependencies,
locked,
)
.map_err(Error::dependency_resolution_failed)
}