hgext/obsolete.py
changeset 387 0e87a890d84b
parent 386 a3797de26544
child 388 97b75bbfacc5
equal deleted inserted replaced
386:a3797de26544 387:0e87a890d84b
   672         return
   672         return
   673 
   673 
   674     if not util.safehasattr(repo.opener, 'tryread'):
   674     if not util.safehasattr(repo.opener, 'tryread'):
   675         raise util.Abort('Obsolete extension require Mercurial 2.2 (or later)')
   675         raise util.Abort('Obsolete extension require Mercurial 2.2 (or later)')
   676     opush = repo.push
   676     opush = repo.push
   677     o_rollback = repo._rollback
       
   678     o_updatebranchcache = repo.updatebranchcache
   677     o_updatebranchcache = repo.updatebranchcache
   679 
   678 
   680     # /!\ api change in  Hg 2.2 (97efd26eb9576f39590812ea9) /!\
   679     # /!\ api change in  Hg 2.2 (97efd26eb9576f39590812ea9) /!\
   681     if util.safehasattr(repo, '_journalfiles'): # Hg 2.2
   680     if util.safehasattr(repo, '_journalfiles'): # Hg 2.2
   682         o_journalfiles = repo._journalfiles
   681         o_journalfiles = repo._journalfiles
   823                     ex.hint = hint
   822                     ex.hint = hint
   824                 raise
   823                 raise
   825             return result
   824             return result
   826 
   825 
   827 
   826 
   828         ### rollback support
       
   829 
       
   830         # /!\ api change in  Hg 2.2 (97efd26eb9576f39590812ea9) /!\
       
   831         def _journalfiles(self):
       
   832             return o_journalfiles() + (self.sjoin('journal.obsstore'),) 
       
   833 
       
   834         def _writejournal(self, desc):
       
   835             """wrapped version of _writejournal that save obsolete data"""
       
   836             o_writejournal(desc)
       
   837             filename = 'obsstore'
       
   838             filepath = self.sjoin(filename)
       
   839             if os.path.exists(filepath):
       
   840                 journalname = 'journal.' + filename
       
   841                 journalpath = self.sjoin(journalname)
       
   842                 util.copyfile(filepath, journalpath)
       
   843 
       
   844 
       
   845         def _rollback(self, dryrun, force):
       
   846             """wrapped version of _rollback that restore obsolete data"""
       
   847             ret = o_rollback(dryrun, force)
       
   848             if not (ret or dryrun): #rollback did not failed
       
   849                 src = self.sjoin('undo.obsstore')
       
   850                 dst = self.sjoin('obsstore')
       
   851                 if os.path.exists(src):
       
   852                     util.rename(src, dst)
       
   853                 elif os.path.exists(dst):
       
   854                     # If no state was saved because the file did not existed before.
       
   855                     os.unlink(dst)
       
   856                 # invalidate cache
       
   857                 self.__dict__.pop('obsstore', None)
       
   858             return ret
       
   859 
       
   860     repo.__class__ = obsoletingrepo
   827     repo.__class__ = obsoletingrepo
   861     for arg in sys.argv:
   828     for arg in sys.argv:
   862         if 'debugc' in arg:
   829         if 'debugc' in arg:
   863             break
   830             break
   864     else:
   831     else: