From d408fab73940d880c316e85c22be2997f6f583dc Mon Sep 17 00:00:00 2001 From: Stanislau Hlebik Date: Wed, 18 Oct 2017 01:34:40 -0700 Subject: [PATCH] mononoke: add ManifoldBlobState Summary: Blobrepo state with file-based bookmarks and heads and manifold blobstore. It will be used for eden server testing. Reviewed By: sid0 Differential Revision: D6063728 fbshipit-source-id: f0542265af015d5c20db225ed6bf85cae954a3ab --- blobrepo/src/lib.rs | 5 ++++- blobrepo/src/state.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/blobrepo/src/lib.rs b/blobrepo/src/lib.rs index 81dadb3e6d..2d43101fb5 100644 --- a/blobrepo/src/lib.rs +++ b/blobrepo/src/lib.rs @@ -12,6 +12,7 @@ extern crate error_chain; extern crate futures; extern crate bincode; +extern crate bytes; extern crate serde; #[macro_use] extern crate serde_derive; @@ -27,12 +28,14 @@ extern crate filebookmarks; extern crate fileheads; extern crate futures_ext; extern crate heads; +extern crate manifoldblob; extern crate memblob; extern crate membookmarks; extern crate memheads; extern crate mercurial; extern crate mercurial_types; extern crate rocksblob; +extern crate tokio_core; mod repo; mod changeset; @@ -47,7 +50,7 @@ pub use errors::*; pub use changeset::BlobChangeset; pub use manifest::BlobManifest; pub use repo::BlobRepo; -pub use state::{BlobState, FilesBlobState, MemBlobState, RocksBlobState}; +pub use state::{BlobState, FilesBlobState, ManifoldBlobState, MemBlobState, RocksBlobState}; // // TODO: (jsgf) T21597565 This is exposed here for blobimport -- don't use it for anything else. diff --git a/blobrepo/src/state.rs b/blobrepo/src/state.rs index bca1ce81dd..7c784e811b 100644 --- a/blobrepo/src/state.rs +++ b/blobrepo/src/state.rs @@ -9,15 +9,18 @@ use std::sync::Arc; use blobstore::Blobstore; use bookmarks::Bookmarks; +use bytes::Bytes; use fileblob::Fileblob; use filebookmarks::FileBookmarks; use fileheads::FileHeads; use heads::Heads; +use manifoldblob::ManifoldBlob; use memblob::Memblob; use membookmarks::MemBookmarks; use memheads::MemHeads; use mercurial_types::NodeHash; use rocksblob::Rocksblob; +use tokio_core::reactor::Remote; use errors::*; @@ -144,3 +147,29 @@ impl MemBlobState { } } } + +impl_blob_state! { + ManifoldBlobState { + heads: FileHeads, + bookmarks: Arc>, + blobstore: ManifoldBlob, + } +} + +impl ManifoldBlobState { + pub fn new(path: &Path, remote: &Remote) -> Result { + let heads = FileHeads::open(path.join("heads")) + .chain_err(|| ErrorKind::StateOpen(StateOpenError::Heads))?; + let bookmarks = Arc::new( + FileBookmarks::open(path.join("books")) + .chain_err(|| ErrorKind::StateOpen(StateOpenError::Bookmarks))?, + ); + // TODO(stash): is new_may_panic is the best option? + let blobstore = ManifoldBlob::new_may_panic("mononoke", remote); + Ok(ManifoldBlobState { + heads, + bookmarks, + blobstore, + }) + } +}