forked from mirrors/jj
view: move creation of initial operation to OpHeadsStore
This is a step towards getting rid of `MutableView::update_op_heads()`.
This commit is contained in:
parent
2590e127f7
commit
ec07104126
2 changed files with 24 additions and 17 deletions
|
@ -24,6 +24,7 @@ use crate::view;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use crate::store::CommitId;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
/// Manages the very set of current heads of the operation log. The store is
|
/// Manages the very set of current heads of the operation log. The store is
|
||||||
|
@ -40,8 +41,25 @@ pub enum OpHeadResolutionError {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl OpHeadsStore {
|
impl OpHeadsStore {
|
||||||
pub fn init(dir: PathBuf) -> Self {
|
pub fn init(
|
||||||
OpHeadsStore { dir }
|
dir: PathBuf,
|
||||||
|
op_store: &Arc<dyn OpStore>,
|
||||||
|
checkout: CommitId,
|
||||||
|
) -> (Self, OperationId, op_store::View) {
|
||||||
|
let mut root_view = op_store::View::new(checkout.clone());
|
||||||
|
root_view.head_ids.insert(checkout);
|
||||||
|
let root_view_id = op_store.write_view(&root_view).unwrap();
|
||||||
|
let operation_metadata = OperationMetadata::new("initialize repo".to_string());
|
||||||
|
let init_operation = op_store::Operation {
|
||||||
|
view_id: root_view_id,
|
||||||
|
parents: vec![],
|
||||||
|
metadata: operation_metadata,
|
||||||
|
};
|
||||||
|
let init_operation_id = op_store.write_operation(&init_operation).unwrap();
|
||||||
|
|
||||||
|
let op_heads_store = OpHeadsStore { dir };
|
||||||
|
op_heads_store.add_op_head(&init_operation_id);
|
||||||
|
(op_heads_store, init_operation_id, root_view)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load(dir: PathBuf) -> OpHeadsStore {
|
pub fn load(dir: PathBuf) -> OpHeadsStore {
|
||||||
|
|
|
@ -219,27 +219,16 @@ impl ReadonlyView {
|
||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
checkout: CommitId,
|
checkout: CommitId,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let mut root_view = op_store::View::new(checkout.clone());
|
|
||||||
root_view.head_ids.insert(checkout);
|
|
||||||
let root_view_id = op_store.write_view(&root_view).unwrap();
|
|
||||||
let operation_metadata = OperationMetadata::new("initialize repo".to_string());
|
|
||||||
let init_operation = op_store::Operation {
|
|
||||||
view_id: root_view_id,
|
|
||||||
parents: vec![],
|
|
||||||
metadata: operation_metadata,
|
|
||||||
};
|
|
||||||
let init_operation_id = op_store.write_operation(&init_operation).unwrap();
|
|
||||||
|
|
||||||
let op_heads_dir = path.join("op_heads");
|
let op_heads_dir = path.join("op_heads");
|
||||||
std::fs::create_dir(&op_heads_dir).unwrap();
|
std::fs::create_dir(&op_heads_dir).unwrap();
|
||||||
let op_heads_store = Arc::new(OpHeadsStore::init(op_heads_dir));
|
let (op_heads_store, init_op_id, root_view) =
|
||||||
op_heads_store.add_op_head(&init_operation_id);
|
OpHeadsStore::init(op_heads_dir, &op_store, checkout);
|
||||||
|
|
||||||
ReadonlyView {
|
ReadonlyView {
|
||||||
store,
|
store,
|
||||||
op_store,
|
op_store,
|
||||||
op_heads_store,
|
op_heads_store: Arc::new(op_heads_store),
|
||||||
op_id: init_operation_id,
|
op_id: init_op_id,
|
||||||
index_store,
|
index_store,
|
||||||
data: root_view,
|
data: root_view,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue