From 02e64206064d3c55fd9d18de8c2fc0eac9262320 Mon Sep 17 00:00:00 2001 From: Martin von Zweigbergk Date: Sun, 7 Mar 2021 23:49:52 -0800 Subject: [PATCH] repo: inline MutableRepo's {view,index,evolution}_mut() methods The methods are now only called from within the type. Inlining means that the borrow checker will let us borrow these separate fields concurrently. We'll take advantage of that soon. --- lib/src/repo.rs | 59 ++++++++++++++++++------------------------------- 1 file changed, 21 insertions(+), 38 deletions(-) diff --git a/lib/src/repo.rs b/lib/src/repo.rs index 38678ecf8..4a1b4a06b 100644 --- a/lib/src/repo.rs +++ b/lib/src/repo.rs @@ -493,10 +493,6 @@ impl<'r> MutableRepo<'r> { &self.index } - fn index_mut(&mut self) -> &mut MutableIndex { - &mut self.index - } - pub fn base_repo(&self) -> &'r ReadonlyRepo { self.repo } @@ -505,10 +501,6 @@ impl<'r> MutableRepo<'r> { &self.view } - fn view_mut(&mut self) -> &mut MutableView { - &mut self.view - } - pub fn consume(self) -> (MutableIndex, MutableView) { (self.index, self.view) } @@ -519,12 +511,6 @@ impl<'r> MutableRepo<'r> { evolution } - fn evolution_mut<'m>(&'m mut self) -> &'m mut MutableEvolution<'r, 'm> { - let evolution: &mut MutableEvolution<'static, 'static> = self.evolution.as_mut().unwrap(); - let evolution: &mut MutableEvolution<'r, 'm> = unsafe { std::mem::transmute(evolution) }; - evolution - } - pub fn write_commit(&mut self, commit: store::Commit) -> Commit { let commit = self.store().write_commit(commit); self.add_head(&commit); @@ -532,11 +518,11 @@ impl<'r> MutableRepo<'r> { } pub fn set_checkout(&mut self, id: CommitId) { - self.view_mut().set_checkout(id); + self.view.set_checkout(id); } pub fn check_out(&mut self, settings: &UserSettings, commit: &Commit) -> Commit { - let current_checkout_id = self.view().checkout().clone(); + let current_checkout_id = self.view.checkout().clone(); let current_checkout = self.store().get_commit(¤t_checkout_id).unwrap(); assert!(current_checkout.is_open(), "current checkout is closed"); if current_checkout.is_empty() @@ -575,13 +561,12 @@ impl<'r> MutableRepo<'r> { open_commit = commit.clone(); } let id = open_commit.id().clone(); - self.view_mut().set_checkout(id); + self.view.set_checkout(id); open_commit } pub fn add_head(&mut self, head: &Commit) { - let view = self.view(); - let current_heads = view.heads(); + let current_heads = self.view.heads(); // Use incremental update for common case of adding a single commit on top a // current head. TODO: Also use incremental update when adding a single // commit on top a non-head. @@ -590,11 +575,10 @@ impl<'r> MutableRepo<'r> { .iter() .all(|parent_id| current_heads.contains(parent_id)) { - self.index_mut().add_commit(head); - self.view_mut().add_head(head); - self.evolution_mut().add_commit(head); + self.index.add_commit(head); + self.view.add_head(head); + self.evolution.as_mut().unwrap().add_commit(head); } else { - let index = self.index(); let missing_commits = topo_order_reverse( vec![head.clone()], Box::new(|commit: &Commit| commit.id().clone()), @@ -602,44 +586,43 @@ impl<'r> MutableRepo<'r> { commit .parents() .into_iter() - .filter(|parent| !index.has_id(parent.id())) + .filter(|parent| !self.index.has_id(parent.id())) .collect() }), ); - let mut_index = self.index_mut(); for missing_commit in missing_commits.iter().rev() { - mut_index.add_commit(missing_commit); + self.index.add_commit(missing_commit); } - self.view_mut().add_head(head); - self.evolution_mut().invalidate(); + self.view.add_head(head); + self.evolution.as_mut().unwrap().invalidate(); } } pub fn remove_head(&mut self, head: &Commit) { - self.view_mut().remove_head(head); - self.evolution_mut().invalidate(); + self.view.remove_head(head); + self.evolution.as_mut().unwrap().invalidate(); } pub fn add_public_head(&mut self, head: &Commit) { - self.view_mut().add_public_head(head); - self.evolution_mut().add_commit(head); + self.view.add_public_head(head); + self.evolution.as_mut().unwrap().add_commit(head); } pub fn remove_public_head(&mut self, head: &Commit) { - self.view_mut().remove_public_head(head); - self.evolution_mut().invalidate(); + self.view.remove_public_head(head); + self.evolution.as_mut().unwrap().invalidate(); } pub fn insert_git_ref(&mut self, name: String, commit_id: CommitId) { - self.view_mut().insert_git_ref(name, commit_id); + self.view.insert_git_ref(name, commit_id); } pub fn remove_git_ref(&mut self, name: &str) { - self.view_mut().remove_git_ref(name); + self.view.remove_git_ref(name); } pub fn set_view(&mut self, data: op_store::View) { - self.view_mut().set_view(data); - self.evolution_mut().invalidate(); + self.view.set_view(data); + self.evolution.as_mut().unwrap().invalidate(); } }