mirror of
https://github.com/martinvonz/jj.git
synced 2024-12-28 23:55:54 +00:00
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::sync::Arc;
|
||||
|
||||
use crate::store::CommitId;
|
||||
use thiserror::Error;
|
||||
|
||||
/// Manages the very set of current heads of the operation log. The store is
|
||||
|
@ -40,8 +41,25 @@ pub enum OpHeadResolutionError {
|
|||
}
|
||||
|
||||
impl OpHeadsStore {
|
||||
pub fn init(dir: PathBuf) -> Self {
|
||||
OpHeadsStore { dir }
|
||||
pub fn init(
|
||||
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 {
|
||||
|
|
|
@ -219,27 +219,16 @@ impl ReadonlyView {
|
|||
path: PathBuf,
|
||||
checkout: CommitId,
|
||||
) -> 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");
|
||||
std::fs::create_dir(&op_heads_dir).unwrap();
|
||||
let op_heads_store = Arc::new(OpHeadsStore::init(op_heads_dir));
|
||||
op_heads_store.add_op_head(&init_operation_id);
|
||||
let (op_heads_store, init_op_id, root_view) =
|
||||
OpHeadsStore::init(op_heads_dir, &op_store, checkout);
|
||||
|
||||
ReadonlyView {
|
||||
store,
|
||||
op_store,
|
||||
op_heads_store,
|
||||
op_id: init_operation_id,
|
||||
op_heads_store: Arc::new(op_heads_store),
|
||||
op_id: init_op_id,
|
||||
index_store,
|
||||
data: root_view,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue