@ -126,16 +126,27 @@ impl History {
match revision . cmp ( & self . current ) {
match revision . cmp ( & self . current ) {
Equal = > None ,
Equal = > None ,
Greater = > self . revisions [ self . current + 1 ..= revision ]
Less = > {
. iter ( )
let mut child = self . revisions [ revision ] . last_child ? . get ( ) ;
. map ( | revision | & revision . inversion )
let mut transaction = self . revisions [ child ] . transaction . clone ( ) ;
. cloned ( )
while child ! = self . current {
. reduce ( | acc , inversion | acc . compose ( inversion ) ) ,
child = self . revisions [ child ] . last_child ? . get ( ) ;
Less = > self . revisions [ revision + 1 ..= self . current ]
transaction = transaction . compose ( self . revisions [ child ] . transaction . clone ( ) ) ;
. iter ( )
}
. map ( | revision | & revision . transaction )
Some ( transaction )
. cloned ( )
}
. reduce ( | acc , transaction | acc . compose ( transaction ) ) ,
Greater = > {
let mut inversion = self . revisions [ revision ] . inversion . clone ( ) ;
let mut parent = self . revisions [ revision ] . parent ;
while parent ! = self . current {
parent = self . revisions [ parent ] . parent ;
if parent = = 0 {
return None ;
}
inversion = inversion . compose ( self . revisions [ parent ] . inversion . clone ( ) ) ;
}
Some ( inversion )
}
}
}
}
}