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 references;
|
||||||
pub mod sql;
|
pub mod sql;
|
||||||
pub mod workspace;
|
pub mod workspace;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
use mononoke_types::Timestamp;
|
||||||
|
|
||||||
use crate::references::cast_references_data;
|
use crate::references::cast_references_data;
|
||||||
use crate::references::fetch_references;
|
use crate::references::fetch_references;
|
||||||
use crate::references::ReferencesData;
|
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::Get;
|
||||||
|
use crate::sql::ops::Insert;
|
||||||
use crate::sql::ops::SqlCommitCloud;
|
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;
|
use crate::sql::versions::WorkspaceVersion;
|
||||||
|
|
||||||
#[facet::facet]
|
#[facet::facet]
|
||||||
pub struct CommitCloud {
|
pub struct CommitCloud {
|
||||||
pub storage: SqlCommitCloud,
|
pub storage: SqlCommitCloud,
|
||||||
@ -35,6 +44,19 @@ pub struct CommitCloudContext {
|
|||||||
pub workspace: String,
|
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 {
|
impl CommitCloud {
|
||||||
pub async fn get_workspace(
|
pub async fn get_workspace(
|
||||||
&self,
|
&self,
|
||||||
@ -96,4 +118,63 @@ impl CommitCloud {
|
|||||||
|
|
||||||
Ok(references_data)
|
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::sql::versions::WorkspaceVersion;
|
||||||
use commit_cloud::CommitCloudContext;
|
use commit_cloud::CommitCloudContext;
|
||||||
use commit_cloud::CommitCloudRef;
|
use commit_cloud::CommitCloudRef;
|
||||||
|
use commit_cloud::UpdateReferencesParams;
|
||||||
use commit_graph::CommitGraphRef;
|
use commit_graph::CommitGraphRef;
|
||||||
use context::CoreContext;
|
use context::CoreContext;
|
||||||
use edenapi_types::AnyId;
|
use edenapi_types::AnyId;
|
||||||
@ -1074,6 +1075,18 @@ impl HgRepoContext {
|
|||||||
.get_references(ctx, base_version)
|
.get_references(ctx, base_version)
|
||||||
.await?)
|
.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)]
|
#[cfg(test)]
|
||||||
|
Loading…
Reference in New Issue
Block a user