@@ -126,16 +126,27 @@ impl History {
127 match revision.cmp(&self.current) {
127 match revision.cmp(&self.current) {
128 Equal => None,
128 Equal => None,
130+ let mut child = self.revisions[revision].last_child?.get();
131+ let mut transaction = self.revisions[child].transaction.clone();
132+ while child != self.current {
133+ child = self.revisions[child].last_child?.get();
134+ transaction = transaction.compose(self.revisions[child].transaction.clone());
129− Greater => self.revisions[self.current + 1..=revision]
139+ let mut inversion = self.revisions[revision].inversion.clone();
130− .iter()
140+ let mut parent = self.revisions[revision].parent;
131− .map(|revision| &revision.inversion)
141+ while parent != self.current {
132− .cloned()
142+ parent = self.revisions[parent].parent;
133− .reduce(|acc, inversion| acc.compose(inversion)),
143+ if parent == 0 {
134− Less => self.revisions[revision + 1..=self.current]
144+ return None;
136− .map(|revision| &revision.transaction)
146+ inversion = inversion.compose(self.revisions[parent].inversion.clone());
138− .reduce(|acc, transaction| acc.compose(transaction)),
148+ Some(inversion)