mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 16:31:02 +03:00
Add ephemeral prepare call to EdenApi trait
Summary: Add ephemeral_prepare to EdenApi, which allows calling the `/ephemeral/prepare` endpoint. This will be used when creating snapshots. Reviewed By: liubov-dmitrieva Differential Revision: D29987593 fbshipit-source-id: 2af2d9e051a8b4c124adf023ea4fd1bf2ec69e7c
This commit is contained in:
parent
d578bd9000
commit
32b8d7fe07
@ -24,6 +24,7 @@ use edenapi::types::CommitKnownResponse;
|
||||
use edenapi::types::CommitLocationToHashRequest;
|
||||
use edenapi::types::CommitLocationToHashResponse;
|
||||
use edenapi::types::CommitRevlogData;
|
||||
use edenapi::types::EphemeralPrepareResponse;
|
||||
use edenapi::types::FileContent;
|
||||
use edenapi::types::FileEntry;
|
||||
use edenapi::types::FileSpec;
|
||||
@ -512,6 +513,15 @@ impl EdenApi for EagerRepo {
|
||||
"EagerRepo does not support upload_changesets endpoint".to_string(),
|
||||
))
|
||||
}
|
||||
|
||||
async fn ephemeral_prepare(
|
||||
&self,
|
||||
_repo: String,
|
||||
) -> Result<Fetch<EphemeralPrepareResponse>, EdenApiError> {
|
||||
Err(not_implemented_error(
|
||||
"EagerRepo does not support ephemeral_prepare endpoint".to_string(),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
impl EagerRepo {
|
||||
|
@ -28,20 +28,20 @@ use edenapi_types::{
|
||||
json::ToJson,
|
||||
wire::{
|
||||
WireBookmarkEntry, WireCloneData, WireCommitHashToLocationResponse,
|
||||
WireCommitLocationToHashResponse, WireFileEntry, WireHistoryResponseChunk, WireIdMapEntry,
|
||||
WireLookupResponse, WireToApiConversionError, WireTreeEntry, WireUploadToken,
|
||||
WireUploadTokensResponse, WireUploadTreeResponse,
|
||||
WireCommitLocationToHashResponse, WireEphemeralPrepareResponse, WireFileEntry,
|
||||
WireHistoryResponseChunk, WireIdMapEntry, WireLookupResponse, WireToApiConversionError,
|
||||
WireTreeEntry, WireUploadToken, WireUploadTokensResponse, WireUploadTreeResponse,
|
||||
},
|
||||
AnyFileContentId, AnyId, Batch, BookmarkEntry, BookmarkRequest, CloneData,
|
||||
CommitHashToLocationRequestBatch, CommitHashToLocationResponse, CommitLocationToHashRequest,
|
||||
CommitLocationToHashRequestBatch, CommitLocationToHashResponse, CommitRevlogData,
|
||||
CommitRevlogDataRequest, CompleteTreeRequest, EdenApiServerError, FileContentTokenMetadata,
|
||||
FileEntry, FileRequest, FileSpec, HgFilenodeData, HgMutationEntryContent, HistoryEntry,
|
||||
HistoryRequest, LookupRequest, LookupResponse, ServerError, ToApi, ToWire, TreeAttributes,
|
||||
TreeEntry, TreeRequest, UploadBonsaiChangeset, UploadBonsaiChangesetsRequest,
|
||||
UploadHgChangeset, UploadHgChangesetsRequest, UploadHgFilenodeRequest, UploadToken,
|
||||
UploadTokenMetadata, UploadTokensResponse, UploadTreeEntry, UploadTreeRequest,
|
||||
UploadTreeResponse,
|
||||
CommitRevlogDataRequest, CompleteTreeRequest, EdenApiServerError, EphemeralPrepareRequest,
|
||||
EphemeralPrepareResponse, FileContentTokenMetadata, FileEntry, FileRequest, FileSpec,
|
||||
HgFilenodeData, HgMutationEntryContent, HistoryEntry, HistoryRequest, LookupRequest,
|
||||
LookupResponse, ServerError, ToApi, ToWire, TreeAttributes, TreeEntry, TreeRequest,
|
||||
UploadBonsaiChangeset, UploadBonsaiChangesetsRequest, UploadHgChangeset,
|
||||
UploadHgChangesetsRequest, UploadHgFilenodeRequest, UploadToken, UploadTokenMetadata,
|
||||
UploadTokensResponse, UploadTreeEntry, UploadTreeRequest, UploadTreeResponse,
|
||||
};
|
||||
use hg_http::http_client;
|
||||
use http_client::{AsyncResponse, HttpClient, HttpClientError, Progress, Request};
|
||||
@ -81,6 +81,7 @@ mod paths {
|
||||
pub const UPLOAD_TREES: &str = "upload/trees";
|
||||
pub const UPLOAD_CHANGESETS: &str = "upload/changesets";
|
||||
pub const UPLOAD_BONSAI_CHANGESETS: &str = "upload/changesets/bonsai";
|
||||
pub const EPHEMERAL_PREPARE: &str = "ephemeral/prepare";
|
||||
}
|
||||
|
||||
pub struct Client {
|
||||
@ -1054,6 +1055,33 @@ impl EdenApi for Client {
|
||||
.fetch::<WireUploadTokensResponse>(vec![request], None)
|
||||
.await?)
|
||||
}
|
||||
|
||||
async fn ephemeral_prepare(
|
||||
&self,
|
||||
repo: String,
|
||||
) -> Result<Fetch<EphemeralPrepareResponse>, EdenApiError> {
|
||||
let msg = "Preparing ephemeral bubble";
|
||||
tracing::info!("{}", &msg);
|
||||
if self.config.debug {
|
||||
eprintln!("{}", &msg);
|
||||
}
|
||||
let url = self.url(paths::EPHEMERAL_PREPARE, Some(&repo))?;
|
||||
let req = EphemeralPrepareRequest {}.to_wire();
|
||||
let request = self
|
||||
.configure(Request::post(url.clone()))?
|
||||
.cbor(&req)
|
||||
.map_err(EdenApiError::RequestSerializationFailed)?;
|
||||
|
||||
let mut fetch = self
|
||||
.fetch::<WireEphemeralPrepareResponse>(vec![request], None)
|
||||
.await?;
|
||||
fetch.entries = fetch
|
||||
.entries
|
||||
.inspect_ok(|r| tracing::info!("Created bubble {}", r.bubble_id))
|
||||
.boxed();
|
||||
|
||||
Ok(fetch)
|
||||
}
|
||||
}
|
||||
|
||||
/// Split up a collection of keys into batches of at most `batch_size`.
|
||||
|
@ -15,9 +15,10 @@ use edenapi_types::CommitKnownResponse;
|
||||
use edenapi_types::{
|
||||
AnyFileContentId, AnyId, BookmarkEntry, CloneData, CommitHashToLocationResponse,
|
||||
CommitLocationToHashRequest, CommitLocationToHashResponse, CommitRevlogData,
|
||||
EdenApiServerError, FileEntry, FileSpec, HgFilenodeData, HgMutationEntryContent, HistoryEntry,
|
||||
LookupResponse, TreeAttributes, TreeEntry, UploadBonsaiChangeset, UploadHgChangeset,
|
||||
UploadToken, UploadTokensResponse, UploadTreeEntry, UploadTreeResponse,
|
||||
EdenApiServerError, EphemeralPrepareResponse, FileEntry, FileSpec, HgFilenodeData,
|
||||
HgMutationEntryContent, HistoryEntry, LookupResponse, TreeAttributes, TreeEntry,
|
||||
UploadBonsaiChangeset, UploadHgChangeset, UploadToken, UploadTokensResponse, UploadTreeEntry,
|
||||
UploadTreeResponse,
|
||||
};
|
||||
use http_client::Progress;
|
||||
use minibytes::Bytes;
|
||||
@ -186,6 +187,11 @@ pub trait EdenApi: Send + Sync + 'static {
|
||||
changesets: Vec<UploadBonsaiChangeset>,
|
||||
mutations: Vec<HgMutationEntryContent>,
|
||||
) -> Result<Fetch<UploadTokensResponse>, EdenApiError>;
|
||||
|
||||
async fn ephemeral_prepare(
|
||||
&self,
|
||||
repo: String,
|
||||
) -> Result<Fetch<EphemeralPrepareResponse>, EdenApiError>;
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
@ -415,4 +421,13 @@ impl EdenApi for Arc<dyn EdenApi> {
|
||||
.upload_bonsai_changesets(repo, changesets, mutations)
|
||||
.await
|
||||
}
|
||||
|
||||
async fn ephemeral_prepare(
|
||||
&self,
|
||||
repo: String,
|
||||
) -> Result<Fetch<EphemeralPrepareResponse>, EdenApiError> {
|
||||
<Arc<dyn EdenApi> as Borrow<dyn EdenApi>>::borrow(self)
|
||||
.ephemeral_prepare(repo)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
@ -14,10 +14,10 @@ use edenapi::{EdenApi, EdenApiError, Fetch, ProgressCallback, ResponseMeta, Stat
|
||||
use edenapi_types::{
|
||||
AnyFileContentId, AnyId, BookmarkEntry, CloneData, CommitHashToLocationResponse,
|
||||
CommitLocationToHashRequest, CommitLocationToHashResponse, CommitRevlogData,
|
||||
EdenApiServerError, FileAttributes, FileContent, FileEntry, FileSpec, HgFilenodeData,
|
||||
HgMutationEntryContent, HistoryEntry, LookupResponse, TreeAttributes, TreeEntry,
|
||||
UploadBonsaiChangeset, UploadHgChangeset, UploadToken, UploadTokensResponse, UploadTreeEntry,
|
||||
UploadTreeResponse,
|
||||
EdenApiServerError, EphemeralPrepareResponse, FileAttributes, FileContent, FileEntry, FileSpec,
|
||||
HgFilenodeData, HgMutationEntryContent, HistoryEntry, LookupResponse, TreeAttributes,
|
||||
TreeEntry, UploadBonsaiChangeset, UploadHgChangeset, UploadToken, UploadTokensResponse,
|
||||
UploadTreeEntry, UploadTreeResponse,
|
||||
};
|
||||
use futures::prelude::*;
|
||||
use minibytes::Bytes;
|
||||
@ -501,6 +501,13 @@ impl EdenApi for FakeEdenApi {
|
||||
) -> Result<Fetch<UploadTokensResponse>, EdenApiError> {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
async fn ephemeral_prepare(
|
||||
&self,
|
||||
_repo: String,
|
||||
) -> Result<Fetch<EphemeralPrepareResponse>, EdenApiError> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn make_config(dir: impl AsRef<Path>) -> ConfigSet {
|
||||
|
Loading…
Reference in New Issue
Block a user