Show More
@@ -668,42 +668,60 b' class transaction(util.transactional):' | |||
|
668 | 668 | self._file.close() |
|
669 | 669 | self._backupsfile.close() |
|
670 | 670 | |
|
671 | quick = self._can_quick_abort(entries) | |
|
671 | 672 | try: |
|
672 | if not entries and not self._backupentries: | |
|
673 |
|
|
|
674 | self._opener.unlink(self._backupjournal) | |
|
675 |
|
|
|
676 | self._opener.unlink(self._journal) | |
|
677 | return | |
|
678 | ||
|
679 | self._report(_(b"transaction abort!\n")) | |
|
680 | ||
|
681 | try: | |
|
682 | for cat in sorted(self._abortcallback): | |
|
683 | self._abortcallback[cat](self) | |
|
684 | # Prevent double usage and help clear cycles. | |
|
685 | self._abortcallback = None | |
|
686 | _playback( | |
|
687 | self._journal, | |
|
688 | self._report, | |
|
689 | self._opener, | |
|
690 | self._vfsmap, | |
|
691 | entries, | |
|
692 | self._backupentries, | |
|
693 | False, | |
|
694 | checkambigfiles=self._checkambigfiles, | |
|
695 | ) | |
|
696 | self._report(_(b"rollback completed\n")) | |
|
697 | except BaseException as exc: | |
|
698 | self._report(_(b"rollback failed - please run hg recover\n")) | |
|
699 | self._report( | |
|
700 | _(b"(failure reason: %s)\n") % stringutil.forcebytestr(exc) | |
|
701 | ) | |
|
673 | if quick: | |
|
674 | self._do_quick_abort(entries) | |
|
675 | else: | |
|
676 | self._do_full_abort(entries) | |
|
702 | 677 | finally: |
|
703 | 678 | self._journal = None |
|
704 | 679 | self._releasefn(self, False) # notify failure of transaction |
|
705 | 680 | self._releasefn = None # Help prevent cycles. |
|
706 | 681 | |
|
682 | def _can_quick_abort(self, entries): | |
|
683 | """False if any semantic content have been written on disk | |
|
684 | ||
|
685 | True if nothing, except temporary files has been writen on disk.""" | |
|
686 | if entries: | |
|
687 | return False | |
|
688 | if self._backupentries: | |
|
689 | return False | |
|
690 | return True | |
|
691 | ||
|
692 | def _do_quick_abort(self, entries): | |
|
693 | """(Silently) do a quick cleanup (see _can_quick_abort)""" | |
|
694 | assert self._can_quick_abort(entries) | |
|
695 | if self._backupjournal: | |
|
696 | self._opener.unlink(self._backupjournal) | |
|
697 | if self._journal: | |
|
698 | self._opener.unlink(self._journal) | |
|
699 | ||
|
700 | def _do_full_abort(self, entries): | |
|
701 | """(Noisily) rollback all the change introduced by the transaction""" | |
|
702 | self._report(_(b"transaction abort!\n")) | |
|
703 | try: | |
|
704 | for cat in sorted(self._abortcallback): | |
|
705 | self._abortcallback[cat](self) | |
|
706 | # Prevent double usage and help clear cycles. | |
|
707 | self._abortcallback = None | |
|
708 | _playback( | |
|
709 | self._journal, | |
|
710 | self._report, | |
|
711 | self._opener, | |
|
712 | self._vfsmap, | |
|
713 | entries, | |
|
714 | self._backupentries, | |
|
715 | False, | |
|
716 | checkambigfiles=self._checkambigfiles, | |
|
717 | ) | |
|
718 | self._report(_(b"rollback completed\n")) | |
|
719 | except BaseException as exc: | |
|
720 | self._report(_(b"rollback failed - please run hg recover\n")) | |
|
721 | self._report( | |
|
722 | _(b"(failure reason: %s)\n") % stringutil.forcebytestr(exc) | |
|
723 | ) | |
|
724 | ||
|
707 | 725 | |
|
708 | 726 | BAD_VERSION_MSG = _( |
|
709 | 727 | b"journal was created by a different version of Mercurial\n" |
General Comments 0
You need to be logged in to leave comments.
Login now