Skip to content

Commit

Permalink
Store OpHeadsStore in UnpublishedOperation instead of RepoLoader
Browse files Browse the repository at this point in the history
The only thing we need from the `RepoLoader` is the `OpHeadsStore`, so we can
extract it in UnpublishedOperation::new instead of keeping the entire
`RepoLoader` around.
  • Loading branch information
emesterhazy committed Mar 3, 2024
1 parent f5a3366 commit 7f0397b
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions lib/src/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ use itertools::Itertools as _;

use crate::backend::Timestamp;
use crate::index::ReadonlyIndex;
use crate::op_heads_store::OpHeadsStore;
use crate::op_store::OperationMetadata;
use crate::operation::Operation;
use crate::repo::{MutableRepo, ReadonlyRepo, Repo, RepoLoader, RepoLoaderError};
Expand Down Expand Up @@ -121,7 +122,7 @@ impl Transaction {
.index_store()
.write_index(mut_index, operation.id())
.unwrap();
UnpublishedOperation::new(base_repo.loader(), operation, view, index)
UnpublishedOperation::new(&base_repo.loader(), operation, view, index)
}
}

Expand Down Expand Up @@ -155,29 +156,30 @@ pub fn create_op_metadata(
/// finish the operation.
#[must_use = "Either publish() or leave_unpublished() must be called to finish the operation."]
pub struct UnpublishedOperation {
repo_loader: RepoLoader,
op_heads_store: Arc<dyn OpHeadsStore>,
repo: Arc<ReadonlyRepo>,
}

impl UnpublishedOperation {
fn new(
repo_loader: RepoLoader,
repo_loader: &RepoLoader,
operation: Operation,
view: View,
index: Box<dyn ReadonlyIndex>,
) -> Self {
let repo = repo_loader.create_from(operation, view, index);
UnpublishedOperation { repo_loader, repo }
UnpublishedOperation {
op_heads_store: repo_loader.op_heads_store().clone(),
repo: repo_loader.create_from(operation, view, index),
}
}

pub fn operation(&self) -> &Operation {
self.repo.operation()
}

pub fn publish(self) -> Arc<ReadonlyRepo> {
let _lock = self.repo_loader.op_heads_store().lock();
self.repo_loader
.op_heads_store()
let _lock = self.op_heads_store.lock();
self.op_heads_store
.update_op_heads(self.operation().parent_ids(), self.operation().id());
self.repo
}
Expand Down

0 comments on commit 7f0397b

Please sign in to comment.