transaction: keep whole operation objects, not just IDs, of parents (#111)

We already have the operation objects, and keeping them will allow
some cleanup (see next change).
This commit is contained in:
Martin von Zweigbergk 2022-03-26 10:10:28 -07:00 committed by Martin von Zweigbergk
parent 04ad9a3628
commit 4d64687bc3
2 changed files with 9 additions and 9 deletions

View file

@ -407,8 +407,7 @@ impl RepoLoader {
merged_repo.merge(&base_repo, &other_repo); merged_repo.merge(&base_repo, &other_repo);
merged_repo.rebase_descendants(user_settings); merged_repo.rebase_descendants(user_settings);
} }
let op_parent_ids = op_heads.iter().map(|op| op.id().clone()).collect(); tx.set_parent_ops(op_heads);
tx.set_parents(op_parent_ids);
tx.write() tx.write()
} }

View file

@ -18,14 +18,14 @@ use std::sync::Arc;
use crate::backend::Timestamp; use crate::backend::Timestamp;
use crate::index::ReadonlyIndex; use crate::index::ReadonlyIndex;
use crate::op_store; use crate::op_store;
use crate::op_store::{OperationId, OperationMetadata}; use crate::op_store::OperationMetadata;
use crate::operation::Operation; use crate::operation::Operation;
use crate::repo::{MutableRepo, ReadonlyRepo, RepoLoader}; use crate::repo::{MutableRepo, ReadonlyRepo, RepoLoader};
use crate::view::View; use crate::view::View;
pub struct Transaction { pub struct Transaction {
repo: Option<MutableRepo>, repo: Option<MutableRepo>,
parents: Vec<OperationId>, parent_ops: Vec<Operation>,
description: String, description: String,
start_time: Timestamp, start_time: Timestamp,
tags: HashMap<String, String>, tags: HashMap<String, String>,
@ -33,10 +33,10 @@ pub struct Transaction {
impl Transaction { impl Transaction {
pub fn new(mut_repo: MutableRepo, description: &str) -> Transaction { pub fn new(mut_repo: MutableRepo, description: &str) -> Transaction {
let parents = vec![mut_repo.base_repo().op_id().clone()]; let parent_ops = vec![mut_repo.base_repo().operation().clone()];
Transaction { Transaction {
repo: Some(mut_repo), repo: Some(mut_repo),
parents, parent_ops,
description: description.to_owned(), description: description.to_owned(),
start_time: Timestamp::now(), start_time: Timestamp::now(),
tags: Default::default(), tags: Default::default(),
@ -47,8 +47,8 @@ impl Transaction {
self.repo.as_ref().unwrap().base_repo() self.repo.as_ref().unwrap().base_repo()
} }
pub fn set_parents(&mut self, parents: Vec<OperationId>) { pub fn set_parent_ops(&mut self, parent_ops: Vec<Operation>) {
self.parents = parents; self.parent_ops = parent_ops;
} }
pub fn set_tag(&mut self, key: String, value: String) { pub fn set_tag(&mut self, key: String, value: String) {
@ -82,9 +82,10 @@ impl Transaction {
let mut operation_metadata = let mut operation_metadata =
OperationMetadata::new(self.description.clone(), self.start_time.clone()); OperationMetadata::new(self.description.clone(), self.start_time.clone());
operation_metadata.tags = self.tags.clone(); operation_metadata.tags = self.tags.clone();
let parents = self.parent_ops.iter().map(|op| op.id().clone()).collect();
let store_operation = op_store::Operation { let store_operation = op_store::Operation {
view_id, view_id,
parents: self.parents.clone(), parents,
metadata: operation_metadata, metadata: operation_metadata,
}; };
let new_op_id = base_repo let new_op_id = base_repo