# File lib/gibbler/history.rb, line 106 def gibbler_revert!(g=nil) raise NoRevert unless self.respond_to? :__gibbler_revert! raise NoHistory, self.class unless gibbler_history? raise BadDigest, g if !g.nil? && !gibbler_valid?(g) g = self.gibbler_history.last if g.nil? g = gibbler_find_long g # Do nothing if the given digest matches the current gibble. # NOTE: We use __gibbler b/c it doesn't update self.gibbler_cache. unless self.__gibbler == g @@mutex.synchronize { # Always make sure self.gibbler_digest is a Gibbler::Digest self.gibbler_cache = g.is_a?(Gibbler::Digest) ? g : Gibbler::Digest.new(g) self.__gibbler_revert! } end self.gibbler_cache end