Skip to content

Commit bd25fcf

Browse files
committed
Expose AlternativeRegistry to API
1 parent f6d918a commit bd25fcf

File tree

4 files changed

+21
-13
lines changed

4 files changed

+21
-13
lines changed

src/crates/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ use failure::Error;
77
use log::info;
88
use std::path::Path;
99

10+
pub use registry::AlternativeRegistry;
11+
1012
trait CrateTrait: std::fmt::Display {
1113
fn fetch(&self, workspace: &Workspace) -> Result<(), Error>;
1214
fn purge_from_cache(&self, workspace: &Workspace) -> Result<(), Error>;
@@ -24,12 +26,11 @@ pub struct Crate(CrateType);
2426

2527
impl Crate {
2628
/// Load a crate from specified registry.
27-
pub fn registry(registry_index: &str, name: &str, version: &str, key: Option<String>) -> Self {
29+
pub fn registry(registry: AlternativeRegistry, name: &str, version: &str) -> Self {
2830
Crate(CrateType::Registry(registry::RegistryCrate::new(
29-
registry::Registry::Alternative(registry::AlternativeRegistry::new(registry_index)),
31+
registry::Registry::Alternative(registry),
3032
name,
3133
version,
32-
key,
3334
)))
3435
}
3536

@@ -39,7 +40,6 @@ impl Crate {
3940
registry::Registry::CratesIo,
4041
name,
4142
version,
42-
None,
4343
)))
4444
}
4545

src/crates/registry.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,26 @@ use tar::Archive;
1010

1111
static CRATES_ROOT: &str = "https://static.crates.io/crates";
1212

13-
pub(crate) struct AlternativeRegistry {
13+
/// A type for alternative registry as described in rust-lang/rfcs#2141
14+
pub struct AlternativeRegistry {
1415
registry_index: String,
16+
key: Option<String>,
1517
}
1618

1719
impl AlternativeRegistry {
18-
pub(crate) fn new(registry_index: impl Into<String>) -> AlternativeRegistry {
20+
/// Registry for specified registry index
21+
pub fn new(registry_index: impl Into<String>) -> AlternativeRegistry {
1922
AlternativeRegistry {
2023
registry_index: registry_index.into(),
24+
key: None,
2125
}
2226
}
2327

28+
/// Specify private ssh key for registry authentication.
29+
pub fn authenticate_with_ssh_key(&mut self, key: String) {
30+
self.key = Some(key);
31+
}
32+
2433
fn index(&self) -> &str {
2534
self.registry_index.as_str()
2635
}
@@ -55,7 +64,6 @@ pub(super) struct RegistryCrate {
5564
registry: Registry,
5665
name: String,
5766
version: String,
58-
key: Option<String>,
5967
}
6068

6169
#[derive(serde::Deserialize)]
@@ -64,12 +72,11 @@ struct IndexConfig {
6472
}
6573

6674
impl RegistryCrate {
67-
pub(super) fn new(registry: Registry, name: &str, version: &str, key: Option<String>) -> Self {
75+
pub(super) fn new(registry: Registry, name: &str, version: &str) -> Self {
6876
RegistryCrate {
6977
registry,
7078
name: name.into(),
7179
version: version.into(),
72-
key: key.map(Into::into),
7380
}
7481
}
7582

@@ -95,7 +102,7 @@ impl RegistryCrate {
95102
if !index_path.exists() {
96103
let url = alt.index();
97104
let mut fo = git2::FetchOptions::new();
98-
if let Some(key) = self.key.as_deref() {
105+
if let Some(key) = alt.key.as_deref() {
99106
fo.remote_callbacks({
100107
let mut callbacks = git2::RemoteCallbacks::new();
101108
callbacks.credentials(

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ mod utils;
3737
mod workspace;
3838

3939
pub use crate::build::{Build, BuildBuilder, BuildDirectory};
40-
pub use crate::crates::Crate;
40+
pub use crate::crates::{AlternativeRegistry, Crate};
4141
pub use crate::prepare::PrepareError;
4242
pub use crate::toolchain::Toolchain;
4343
pub use crate::workspace::{Workspace, WorkspaceBuilder};

tests/integration/crates_alt.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
use failure::Error;
2-
use rustwide::Crate;
2+
use rustwide::{AlternativeRegistry, Crate};
33

44
const INDEX_URL: &str = "https://github.com/rust-lang/staging.crates.io-index";
55

66
#[test]
77
fn test_fetch() -> Result<(), Error> {
88
let workspace = crate::utils::init_workspace()?;
99

10-
let krate = Crate::registry(INDEX_URL, "foo", "0.4.0");
10+
let alt = AlternativeRegistry::new(INDEX_URL);
11+
let krate = Crate::registry(alt, "foo", "0.4.0");
1112
krate.fetch(&workspace)?;
1213

1314
Ok(())

0 commit comments

Comments
 (0)