From bf409c27d4952826361b6de567fd50a17e4b7e7f Mon Sep 17 00:00:00 2001 From: Jun Wu Date: Tue, 4 May 2021 16:57:31 -0700 Subject: [PATCH] edenapi: build EagerRepo on demand Summary: Now EdenApi trait is moved to a separate crate, we can inline the EdenApi backed by EagerRepo without using dynamic registration functions. Reviewed By: andll Differential Revision: D28006553 fbshipit-source-id: 427513da94db228745b1a7e90af0e62296056128 --- eden/scm/lib/eagerepo/Cargo.toml | 2 +- eden/scm/lib/eagerepo/src/api.rs | 1 + eden/scm/lib/edenapi/Cargo.toml | 1 + eden/scm/lib/edenapi/src/builder.rs | 10 ++++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/eden/scm/lib/eagerepo/Cargo.toml b/eden/scm/lib/eagerepo/Cargo.toml index 97f8f2c5df..2d98c79639 100644 --- a/eden/scm/lib/eagerepo/Cargo.toml +++ b/eden/scm/lib/eagerepo/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" anyhow = "1.0" async-trait = "0.1.45" dag = { path = "../dag" } -edenapi = { path = "../edenapi" } +edenapi_trait = { path = "../edenapi/trait" } futures = { version = "0.3.13", features = ["async-await", "compat"] } http = "0.2" metalog = { path = "../metalog" } diff --git a/eden/scm/lib/eagerepo/src/api.rs b/eden/scm/lib/eagerepo/src/api.rs index ebac4aa4ee..b648cf8919 100644 --- a/eden/scm/lib/eagerepo/src/api.rs +++ b/eden/scm/lib/eagerepo/src/api.rs @@ -33,6 +33,7 @@ use edenapi::EdenApiError; use edenapi::Fetch; use edenapi::ProgressCallback; use edenapi::ResponseMeta; +use edenapi_trait as edenapi; use futures::stream::BoxStream; use futures::stream::TryStreamExt; use futures::StreamExt; diff --git a/eden/scm/lib/edenapi/Cargo.toml b/eden/scm/lib/edenapi/Cargo.toml index aab7759219..1c6d7a39db 100644 --- a/eden/scm/lib/edenapi/Cargo.toml +++ b/eden/scm/lib/edenapi/Cargo.toml @@ -18,6 +18,7 @@ chrono = { version = "0.4", features = ["serde"] } configmodel = { path = "../configmodel" } configparser = { path = "../configparser" } dirs = "2.0" +eagerepo = { path = "../eagerepo" } edenapi_trait = { path = "trait" } edenapi_types = { path = "types" } env_logger = "0.7" diff --git a/eden/scm/lib/edenapi/src/builder.rs b/eden/scm/lib/edenapi/src/builder.rs index f58b437552..3f9a693ca1 100644 --- a/eden/scm/lib/edenapi/src/builder.rs +++ b/eden/scm/lib/edenapi/src/builder.rs @@ -16,6 +16,7 @@ use url::Url; use auth::AuthSection; use configmodel::ConfigExt; +use eagerepo::EagerRepo; use http_client::HttpVersion; use crate::client::Client; @@ -49,6 +50,15 @@ impl<'a> Builder<'a> { /// Build the client. pub fn build(self) -> Result, EdenApiError> { + for (section, name) in [("paths", "default"), ("edenapi", "url")].iter() { + if let Ok(value) = self.config.get_or_default::(section, name) { + if let Some(path) = EagerRepo::url_to_dir(&value) { + let repo = EagerRepo::open(&path).map_err(|e| EdenApiError::Other(e.into()))?; + return Ok(Arc::new(repo)); + } + } + } + let client = Arc::new( HttpClientBuilder::from_config(self.config)? .correlator(self.correlator)