@@ -126,16 +126,27 @@ impl History {
126126
127127 match revision.cmp(&self.current) {
128128 Equal => None,
129− Greater => self.revisions[self.current + 1..=revision]
130− .iter()
131− .map(|revision| &revision.inversion)
132− .cloned()
133− .reduce(|acc, inversion| acc.compose(inversion)),
134− Less => self.revisions[revision + 1..=self.current]
135− .iter()
136− .map(|revision| &revision.transaction)
137− .cloned()
138− .reduce(|acc, transaction| acc.compose(transaction)),
129+ Less => {
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());
135+ }
136+ Some(transaction)
137+ }
138+ Greater => {
139+ let mut inversion = self.revisions[revision].inversion.clone();
140+ let mut parent = self.revisions[revision].parent;
141+ while parent != self.current {
142+ parent = self.revisions[parent].parent;
143+ if parent == 0 {
144+ return None;
145+ }
146+ inversion = inversion.compose(self.revisions[parent].inversion.clone());
147+ }
148+ Some(inversion)
149+ }
139150 }
140151 }
141152