Fix resolving yanked crates when using a local registry.

Fixes #6741.
This commit is contained in:
Hugo van der Wijst 2019-03-12 22:19:55 -07:00
parent dd761226d9
commit 915b49d969
3 changed files with 53 additions and 4 deletions

View file

@ -283,7 +283,12 @@ impl SourceId {
Ok(p) => p,
Err(()) => panic!("path sources cannot be remote"),
};
Ok(Box::new(RegistrySource::local(self, &path, config)))
Ok(Box::new(RegistrySource::local(
self,
&path,
yanked_whitelist,
config,
)))
}
Kind::Directory => {
let path = match self.inner.url.to_file_path() {

View file

@ -404,7 +404,12 @@ impl<'cfg> RegistrySource<'cfg> {
)
}
pub fn local(source_id: SourceId, path: &Path, config: &'cfg Config) -> RegistrySource<'cfg> {
pub fn local(
source_id: SourceId,
path: &Path,
yanked_whitelist: &HashSet<PackageId>,
config: &'cfg Config,
) -> RegistrySource<'cfg> {
let name = short_name(source_id);
let ops = local::LocalRegistry::new(path, config, &name);
RegistrySource::new(
@ -412,7 +417,7 @@ impl<'cfg> RegistrySource<'cfg> {
config,
&name,
Box::new(ops),
&HashSet::new(),
yanked_whitelist,
false,
)
}

View file

@ -2,7 +2,7 @@ use std::fs::{self, File};
use std::io::prelude::*;
use crate::support::paths::{self, CargoPathExt};
use crate::support::registry::Package;
use crate::support::registry::{registry_path, Package};
use crate::support::{basic_manifest, project};
fn setup() {
@ -61,6 +61,45 @@ fn simple() {
p.cargo("test").run();
}
#[test]
fn depend_on_yanked() {
setup();
Package::new("bar", "0.0.1").local(true).publish();
let p = project()
.file(
"Cargo.toml",
r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
[dependencies]
bar = "0.0.1"
"#,
)
.file("src/lib.rs", "")
.build();
// Run cargo to create lock file.
p.cargo("check").run();
registry_path().join("index").join("3").rm_rf();
Package::new("bar", "0.0.1")
.local(true)
.yanked(true)
.publish();
p.cargo("check")
.with_stderr(
"\
[FINISHED] [..]
",
)
.run();
}
#[test]
fn multiple_versions() {
setup();