use util::{CargoResult, Config, internal, FileLock, Filesystem};
use util::errors::CargoResultExt;
use util::hex;
+use util::to_url::ToUrl;
const INDEX_LOCK: &'static str = ".cargo-index-lock";
pub static CRATES_IO: &'static str = "https://github.com/rust-lang/crates.io-index";
default_features: bool,
target: Option<Cow<'a, str>>,
kind: Option<Cow<'a, str>>,
+ index: Option<String>,
}
pub trait RegistryData {
fn parse_registry_dependency(dep: RegistryDependency)
-> CargoResult<Dependency> {
let RegistryDependency {
- name, req, features, optional, default_features, target, kind
+ name, req, features, optional, default_features, target, kind, index
} = dep;
- let mut dep = DEFAULT_ID.with(|id| {
- Dependency::parse_no_deprecated(&name, Some(&req), id)
- })?;
+ let id = if let Some(index) = index {
+ SourceId::for_registry(&index.to_url()?)?
+ } else {
+ DEFAULT_ID.with(|id| {
+ id.clone()
+ })
+ };
+
+ let mut dep = Dependency::parse_no_deprecated(&name, Some(&req), &id)?;
let kind = match kind.as_ref().map(|s| &s[..]).unwrap_or("") {
"dev" => Kind::Development,
"build" => Kind::Build,
.set_features(features)
.set_platform(platform)
.set_kind(kind);
+
Ok(dep)
}
.file("src/main.rs", "fn main() {}");
p.build();
- Package::new("alt_reg_dep", "0.1.1").alternative(true).dep("crates_io_dep", "0.0.2").publish();
+ Package::new("crates_io_dep", "0.0.2").publish();
+ Package::new("alt_reg_dep", "0.1.1").alternative(true).registry_dep("crates_io_dep", "0.0.2", registry::registry().as_str()).publish();
assert_that(p.cargo("build").masquerade_as_nightly_cargo(),
execs().with_status(0).with_stderr(&format!("\
[UPDATING] registry `{crates_io_reg}`
[DOWNLOADING] alt_reg_dep v0.1.1 (registry `file://[..]`)
[DOWNLOADING] crates_io_dep v0.0.2 (registry `file://[..]`)
+[COMPILING] crates_io_dep v0.0.2 (registry `file://[..]`)
[COMPILING] alt_reg_dep v0.1.1 (registry `file://[..]`)
-[COMPILING] crates_io_dep v0.0.2
[COMPILING] foo v0.0.1 ({dir})
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..] secs
",
kind: String,
target: Option<String>,
features: Vec<String>,
+ index: Option<String>,
}
pub fn init() {
}
pub fn dep(&mut self, name: &str, vers: &str) -> &mut Package {
- self.full_dep(name, vers, None, "normal", &[])
+ self.full_dep(name, vers, None, "normal", &[], None)
}
pub fn feature_dep(&mut self,
name: &str,
vers: &str,
features: &[&str]) -> &mut Package {
- self.full_dep(name, vers, None, "normal", features)
+ self.full_dep(name, vers, None, "normal", features, None)
}
pub fn target_dep(&mut self,
name: &str,
vers: &str,
target: &str) -> &mut Package {
- self.full_dep(name, vers, Some(target), "normal", &[])
+ self.full_dep(name, vers, Some(target), "normal", &[], None)
+ }
+
+ pub fn registry_dep(&mut self,
+ name: &str,
+ vers: &str,
+ index: &str) -> &mut Package {
+ self.full_dep(name, vers, None, "normal", &[], Some(index))
}
pub fn dev_dep(&mut self, name: &str, vers: &str) -> &mut Package {
- self.full_dep(name, vers, None, "dev", &[])
+ self.full_dep(name, vers, None, "dev", &[], None)
}
fn full_dep(&mut self,
vers: &str,
target: Option<&str>,
kind: &str,
- features: &[&str]) -> &mut Package {
+ features: &[&str],
+ index: Option<&str>) -> &mut Package {
self.deps.push(Dependency {
name: name.to_string(),
vers: vers.to_string(),
kind: kind.to_string(),
target: target.map(|s| s.to_string()),
features: features.iter().map(|s| s.to_string()).collect(),
+ index: index.map(|s| s.to_string()),
});
self
}
"target": dep.target,
"optional": false,
"kind": dep.kind,
+ "index": dep.index,
})
}).collect::<Vec<_>>();
let cksum = {