diff --git a/eden/scm/lib/revisionstore/Cargo.toml b/eden/scm/lib/revisionstore/Cargo.toml index dd99edfa87..c460140f18 100644 --- a/eden/scm/lib/revisionstore/Cargo.toml +++ b/eden/scm/lib/revisionstore/Cargo.toml @@ -26,6 +26,7 @@ http-client = { path = "../http-client" } indexedlog = { path = "../indexedlog" } lfs_protocol = { path = "../../../mononoke/lfs_protocol" } lz4-pyframe = { path = "../lz4-pyframe" } +manifest-tree = { path = "../manifest-tree" } memmap = "0.7" mincode = { path = "../mincode" } minibytes = { path = "../minibytes", features = ["frombytes"] } diff --git a/eden/scm/lib/revisionstore/src/scmstore/tree/types/lazy_tree.rs b/eden/scm/lib/revisionstore/src/scmstore/tree/types/lazy_tree.rs index cbbb46904b..d363177a31 100644 --- a/eden/scm/lib/revisionstore/src/scmstore/tree/types/lazy_tree.rs +++ b/eden/scm/lib/revisionstore/src/scmstore/tree/types/lazy_tree.rs @@ -9,7 +9,7 @@ use anyhow::Result; use tracing::instrument; use edenapi_types::TreeEntry; - +use manifest_tree::TreeEntry as ManifestTreeEntry; use minibytes::Bytes; use types::{HgId, Key}; @@ -72,4 +72,9 @@ impl LazyTree { ContentStore(_, _) => None, }) } + + pub fn manifest_tree_entry(&mut self) -> Result { + // TODO(meyer): Make manifest-tree crate use minibytes::Bytes + Ok(ManifestTreeEntry(self.hg_content()?.into_vec().into())) + } } diff --git a/eden/scm/lib/revisionstore/src/scmstore/tree/types/store_tree.rs b/eden/scm/lib/revisionstore/src/scmstore/tree/types/store_tree.rs index 984be2ab3e..56f914ef62 100644 --- a/eden/scm/lib/revisionstore/src/scmstore/tree/types/store_tree.rs +++ b/eden/scm/lib/revisionstore/src/scmstore/tree/types/store_tree.rs @@ -7,6 +7,10 @@ use std::ops::BitOr; +use anyhow::{anyhow, Result}; + +use manifest_tree::TreeEntry as ManifestTreeEntry; + use crate::scmstore::{ tree::types::{LazyTree, TreeAttributes}, value::StoreValue, @@ -17,6 +21,15 @@ pub struct StoreTree { pub(crate) content: Option, } +impl StoreTree { + pub fn manifest_tree_entry(&mut self) -> Result { + self.content + .as_mut() + .ok_or_else(|| anyhow!("no content available"))? + .manifest_tree_entry() + } +} + impl StoreValue for StoreTree { type Attrs = TreeAttributes; @@ -50,6 +63,7 @@ impl Default for StoreTree { StoreTree { content: None } } } + impl From for StoreTree { fn from(v: LazyTree) -> Self { StoreTree { content: Some(v) }