diff --git a/Cargo.lock b/Cargo.lock index f4880af81d..ee16a83267 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4606,6 +4606,7 @@ dependencies = [ "pin-project-lite", "rattler_cache", "rattler_conda_types", + "rattler_config", "rattler_digest", "rattler_networking", "rattler_redaction", diff --git a/crates/rattler_repodata_gateway/Cargo.toml b/crates/rattler_repodata_gateway/Cargo.toml index 03fc6d844a..5ce485ba06 100644 --- a/crates/rattler_repodata_gateway/Cargo.toml +++ b/crates/rattler_repodata_gateway/Cargo.toml @@ -56,6 +56,7 @@ zstd = { workspace = true } retry-policies = { workspace = true } rattler_cache = { workspace = true } rattler_redaction = { workspace = true, features = ["reqwest", "reqwest-middleware"] } +rattler_config = { workspace = true, optional = true, default-features = false } [target.'cfg(unix)'.dependencies] libc = { workspace = true } diff --git a/crates/rattler_repodata_gateway/src/gateway/channel_config.rs b/crates/rattler_repodata_gateway/src/gateway/channel_config.rs index 6b20179218..a7ba7fea1d 100644 --- a/crates/rattler_repodata_gateway/src/gateway/channel_config.rs +++ b/crates/rattler_repodata_gateway/src/gateway/channel_config.rs @@ -41,6 +41,19 @@ impl Default for SourceConfig { } } +#[cfg(feature = "rattler_config")] +impl From for SourceConfig { + fn from(value: rattler_config::config::repodata_config::RepodataChannelConfig) -> Self { + SourceConfig { + jlap_enabled: !value.disable_jlap.unwrap_or(false), + zstd_enabled: !value.disable_zstd.unwrap_or(false), + bz2_enabled: !value.disable_bzip2.unwrap_or(false), + sharded_enabled: !value.disable_sharded.unwrap_or(false), + cache_action: Default::default(), + } + } +} + /// Describes additional information for fetching channels. #[derive(Debug, Default)] pub struct ChannelConfig { @@ -72,3 +85,30 @@ impl ChannelConfig { .map_or(&self.default, |(_, config)| config) } } + +#[cfg(feature = "rattler_config")] +impl From<&rattler_config::config::ConfigBase> for ChannelConfig +where + T: rattler_config::config::Config + Default, +{ + fn from(config: &rattler_config::config::ConfigBase) -> Self { + let repodata_config = &config.repodata_config; + let default = repodata_config.default.clone().into(); + + let per_channel = repodata_config + .per_channel + .iter() + .map(|(url, config)| { + ( + url.clone(), + config.merge(repodata_config.default.clone()).into(), + ) + }) + .collect(); + + ChannelConfig { + default, + per_channel, + } + } +}