comparison mercurial/localrepo.py @ 15097:cda7a87c1871

rollback: improve readability; clarify that the return value is an int.
author Greg Ward <greg-hg@gerg.ca>
date Sun, 11 Sep 2011 21:21:58 -0400
parents 774da7121fc9
children a21ccf4412d5
comparison
equal deleted inserted replaced
15096:868282fa29d8 15097:cda7a87c1871
758 wlock = lock = None 758 wlock = lock = None
759 try: 759 try:
760 wlock = self.wlock() 760 wlock = self.wlock()
761 lock = self.lock() 761 lock = self.lock()
762 if os.path.exists(self.sjoin("undo")): 762 if os.path.exists(self.sjoin("undo")):
763 try: 763 return self._rollback(dryrun)
764 args = self.opener.read("undo.desc").splitlines()
765 if len(args) >= 3 and self.ui.verbose:
766 desc = _("repository tip rolled back to revision %s"
767 " (undo %s: %s)\n") % (
768 int(args[0]) - 1, args[1], args[2])
769 elif len(args) >= 2:
770 desc = _("repository tip rolled back to revision %s"
771 " (undo %s)\n") % (
772 int(args[0]) - 1, args[1])
773 except IOError:
774 desc = _("rolling back unknown transaction\n")
775 self.ui.status(desc)
776 if dryrun:
777 return
778 transaction.rollback(self.sopener, self.sjoin("undo"),
779 self.ui.warn)
780 util.rename(self.join("undo.dirstate"), self.join("dirstate"))
781 if os.path.exists(self.join('undo.bookmarks')):
782 util.rename(self.join('undo.bookmarks'),
783 self.join('bookmarks'))
784 try:
785 branch = self.opener.read("undo.branch")
786 self.dirstate.setbranch(branch)
787 except IOError:
788 self.ui.warn(_("named branch could not be reset, "
789 "current branch is still: %s\n")
790 % self.dirstate.branch())
791 self.invalidate()
792 self.dirstate.invalidate()
793 self.destroyed()
794 parents = tuple([p.rev() for p in self.parents()])
795 if len(parents) > 1:
796 self.ui.status(_("working directory now based on "
797 "revisions %d and %d\n") % parents)
798 else:
799 self.ui.status(_("working directory now based on "
800 "revision %d\n") % parents)
801 else: 764 else:
802 self.ui.warn(_("no rollback information available\n")) 765 self.ui.warn(_("no rollback information available\n"))
803 return 1 766 return 1
804 finally: 767 finally:
805 release(lock, wlock) 768 release(lock, wlock)
769
770 def _rollback(self, dryrun):
771 try:
772 args = self.opener.read("undo.desc").splitlines()
773 if len(args) >= 3 and self.ui.verbose:
774 desc = _("repository tip rolled back to revision %s"
775 " (undo %s: %s)\n") % (
776 int(args[0]) - 1, args[1], args[2])
777 elif len(args) >= 2:
778 desc = _("repository tip rolled back to revision %s"
779 " (undo %s)\n") % (
780 int(args[0]) - 1, args[1])
781 except IOError:
782 desc = _("rolling back unknown transaction\n")
783 self.ui.status(desc)
784 if dryrun:
785 return 0
786 transaction.rollback(self.sopener, self.sjoin("undo"),
787 self.ui.warn)
788 util.rename(self.join("undo.dirstate"), self.join("dirstate"))
789 if os.path.exists(self.join('undo.bookmarks')):
790 util.rename(self.join('undo.bookmarks'),
791 self.join('bookmarks'))
792 try:
793 branch = self.opener.read("undo.branch")
794 self.dirstate.setbranch(branch)
795 except IOError:
796 self.ui.warn(_("named branch could not be reset, "
797 "current branch is still: %s\n")
798 % self.dirstate.branch())
799 self.invalidate()
800 self.dirstate.invalidate()
801 self.destroyed()
802 parents = tuple([p.rev() for p in self.parents()])
803 if len(parents) > 1:
804 self.ui.status(_("working directory now based on "
805 "revisions %d and %d\n") % parents)
806 else:
807 self.ui.status(_("working directory now based on "
808 "revision %d\n") % parents)
809 return 0
806 810
807 def invalidatecaches(self): 811 def invalidatecaches(self):
808 try: 812 try:
809 delattr(self, '_tagscache') 813 delattr(self, '_tagscache')
810 except AttributeError: 814 except AttributeError: