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: |