mirror of
https://github.com/facebook/sapling.git
synced 2024-10-04 13:57:13 +03:00
commit cloud: initial update_references implementation
Summary: This simply call all the previously implemented update functions of every data structure Reviewed By: mitrandir77 Differential Revision: D56691652 fbshipit-source-id: 7c16b4bade415403dc09aa6ad582aeb9ab20d331
This commit is contained in:
parent
ff71169c35
commit
c344167c6d
@ -9,14 +9,23 @@
|
||||
pub mod references;
|
||||
pub mod sql;
|
||||
pub mod workspace;
|
||||
use std::collections::HashMap;
|
||||
use std::collections::HashSet;
|
||||
|
||||
use mononoke_types::Timestamp;
|
||||
|
||||
use crate::references::cast_references_data;
|
||||
use crate::references::fetch_references;
|
||||
use crate::references::ReferencesData;
|
||||
use crate::sql::heads::update_heads;
|
||||
use crate::sql::local_bookmarks::update_bookmarks;
|
||||
use crate::sql::ops::Get;
|
||||
use crate::sql::ops::Insert;
|
||||
use crate::sql::ops::SqlCommitCloud;
|
||||
use crate::sql::remote_bookmarks::update_remote_bookmarks;
|
||||
use crate::sql::remote_bookmarks::RefRemoteBookmark;
|
||||
use crate::sql::snapshots::update_snapshots;
|
||||
use crate::sql::versions::WorkspaceVersion;
|
||||
|
||||
#[facet::facet]
|
||||
pub struct CommitCloud {
|
||||
pub storage: SqlCommitCloud,
|
||||
@ -35,6 +44,19 @@ pub struct CommitCloudContext {
|
||||
pub workspace: String,
|
||||
}
|
||||
|
||||
pub struct UpdateReferencesParams {
|
||||
pub version: i64,
|
||||
pub removed_heads: HashSet<String>,
|
||||
pub new_heads: Vec<String>,
|
||||
pub updated_bookmarks: HashMap<String, String>,
|
||||
pub removed_bookmarks: HashSet<String>,
|
||||
pub updated_remote_bookmarks: Option<Vec<RefRemoteBookmark>>,
|
||||
pub removed_remote_bookmarks: Option<Vec<RefRemoteBookmark>>,
|
||||
pub new_snapshots: Vec<String>,
|
||||
pub removed_snapshots: HashSet<String>,
|
||||
pub client_info: Option<ClientInfo>,
|
||||
}
|
||||
|
||||
impl CommitCloud {
|
||||
pub async fn get_workspace(
|
||||
&self,
|
||||
@ -96,4 +118,63 @@ impl CommitCloud {
|
||||
|
||||
Ok(references_data)
|
||||
}
|
||||
|
||||
pub async fn update_references(
|
||||
&self,
|
||||
ctx: CommitCloudContext,
|
||||
params: UpdateReferencesParams,
|
||||
) -> anyhow::Result<ReferencesData> {
|
||||
let mut latest_version: u64 = 0;
|
||||
let mut version_timestamp: i64 = 0;
|
||||
|
||||
let maybeworkspace = self
|
||||
.get_workspace(&ctx.workspace.clone(), &ctx.reponame.clone())
|
||||
.await?;
|
||||
|
||||
if !maybeworkspace.is_empty() {
|
||||
latest_version = maybeworkspace[0].version;
|
||||
version_timestamp = maybeworkspace[0].timestamp.timestamp_nanos();
|
||||
}
|
||||
let new_version = latest_version + 1;
|
||||
|
||||
update_heads(
|
||||
&self.storage,
|
||||
ctx.clone(),
|
||||
params.removed_heads,
|
||||
params.new_heads,
|
||||
)
|
||||
.await?;
|
||||
update_bookmarks(
|
||||
&self.storage,
|
||||
ctx.clone(),
|
||||
params.updated_bookmarks,
|
||||
params.removed_bookmarks,
|
||||
)
|
||||
.await?;
|
||||
update_remote_bookmarks(
|
||||
&self.storage,
|
||||
ctx.clone(),
|
||||
params.updated_remote_bookmarks,
|
||||
params.removed_remote_bookmarks,
|
||||
)
|
||||
.await?;
|
||||
update_snapshots(
|
||||
&self.storage,
|
||||
ctx.clone(),
|
||||
params.new_snapshots,
|
||||
params.removed_snapshots,
|
||||
)
|
||||
.await?;
|
||||
let args = WorkspaceVersion {
|
||||
workspace: ctx.workspace.clone(),
|
||||
version: new_version,
|
||||
timestamp: Timestamp::from_timestamp_nanos(version_timestamp),
|
||||
archived: false,
|
||||
};
|
||||
let _ = &self
|
||||
.storage
|
||||
.insert(ctx.reponame.clone(), ctx.workspace.clone(), args.clone())
|
||||
.await?;
|
||||
self.get_references(ctx, new_version).await
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ use commit_cloud::references::ReferencesData;
|
||||
use commit_cloud::sql::versions::WorkspaceVersion;
|
||||
use commit_cloud::CommitCloudContext;
|
||||
use commit_cloud::CommitCloudRef;
|
||||
use commit_cloud::UpdateReferencesParams;
|
||||
use commit_graph::CommitGraphRef;
|
||||
use context::CoreContext;
|
||||
use edenapi_types::AnyId;
|
||||
@ -1074,6 +1075,18 @@ impl HgRepoContext {
|
||||
.get_references(ctx, base_version)
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn cloud_update_references(
|
||||
&self,
|
||||
ctx: CommitCloudContext,
|
||||
params: UpdateReferencesParams,
|
||||
) -> Result<ReferencesData, MononokeError> {
|
||||
Ok(self
|
||||
.blob_repo()
|
||||
.commit_cloud()
|
||||
.update_references(ctx, params)
|
||||
.await?)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
Loading…
Reference in New Issue
Block a user