##// END OF EJS Templates
repoview: discard filtered changelog if index isn't shared with unfiltered...
FUJIWARA Katsunori -
r28265:33292621 default
parent child Browse files
Show More
@@ -315,7 +315,10 b' class repoview(object):'
315 revs = filterrevs(unfi, self.filtername)
315 revs = filterrevs(unfi, self.filtername)
316 cl = self._clcache
316 cl = self._clcache
317 newkey = (unfilen, unfinode, hash(revs), unfichangelog._delayed)
317 newkey = (unfilen, unfinode, hash(revs), unfichangelog._delayed)
318 if cl is not None and newkey != self._clcachekey:
318 # if cl.index is not unfiindex, unfi.changelog would be
319 # recreated, and our clcache refers to garbage object
320 if (cl is not None and
321 (cl.index is not unfiindex or newkey != self._clcachekey)):
319 cl = None
322 cl = None
320 # could have been made None by the previous if
323 # could have been made None by the previous if
321 if cl is None:
324 if cl is None:
@@ -725,3 +725,133 b' unix domain socket:'
725 [255]
725 [255]
726
726
727 #endif
727 #endif
728
729 $ cd ..
730
731 Test that accessing to invalid changelog cache is avoided at
732 subsequent operations even if repo object is reused even after failure
733 of transaction (see 0a7610758c42 also)
734
735 "hg log" after failure of transaction is needed to detect invalid
736 cache in repoview: this can't detect by "hg verify" only.
737
738 Combination of "finalization" and "empty-ness of changelog" (2 x 2 =
739 4) are tested, because '00changelog.i' are differently changed in each
740 cases.
741
742 $ cat > $TESTTMP/failafterfinalize.py <<EOF
743 > # extension to abort transaction after finalization forcibly
744 > from mercurial import commands, error, extensions, lock as lockmod
745 > def fail(tr):
746 > raise error.Abort('fail after finalization')
747 > def reposetup(ui, repo):
748 > class failrepo(repo.__class__):
749 > def commitctx(self, ctx, error=False):
750 > if self.ui.configbool('failafterfinalize', 'fail'):
751 > # 'sorted()' by ASCII code on category names causes
752 > # invoking 'fail' after finalization of changelog
753 > # using "'cl-%i' % id(self)" as category name
754 > self.currenttransaction().addfinalize('zzzzzzzz', fail)
755 > return super(failrepo, self).commitctx(ctx, error)
756 > repo.__class__ = failrepo
757 > EOF
758
759 $ hg init repo3
760 $ cd repo3
761
762 $ cat <<EOF >> $HGRCPATH
763 > [ui]
764 > logtemplate = {rev} {desc|firstline} ({files})\n
765 >
766 > [extensions]
767 > failafterfinalize = $TESTTMP/failafterfinalize.py
768 > EOF
769
770 - test failure with "empty changelog"
771
772 $ echo foo > foo
773 $ hg add foo
774
775 (failuer before finalization)
776
777 >>> from hgclient import readchannel, runcommand, check
778 >>> @check
779 ... def abort(server):
780 ... readchannel(server)
781 ... runcommand(server, ['commit',
782 ... '--config', 'hooks.pretxncommit=false',
783 ... '-mfoo'])
784 ... runcommand(server, ['log'])
785 ... runcommand(server, ['verify', '-q'])
786 *** runcommand commit --config hooks.pretxncommit=false -mfoo
787 transaction abort!
788 rollback completed
789 abort: pretxncommit hook exited with status 1
790 [255]
791 *** runcommand log
792 *** runcommand verify -q
793
794 (failuer after finalization)
795
796 >>> from hgclient import readchannel, runcommand, check
797 >>> @check
798 ... def abort(server):
799 ... readchannel(server)
800 ... runcommand(server, ['commit',
801 ... '--config', 'failafterfinalize.fail=true',
802 ... '-mfoo'])
803 ... runcommand(server, ['log'])
804 ... runcommand(server, ['verify', '-q'])
805 *** runcommand commit --config failafterfinalize.fail=true -mfoo
806 transaction abort!
807 rollback completed
808 abort: fail after finalization
809 [255]
810 *** runcommand log
811 *** runcommand verify -q
812
813 - test failure with "not-empty changelog"
814
815 $ echo bar > bar
816 $ hg add bar
817 $ hg commit -mbar bar
818
819 (failure before finalization)
820
821 >>> from hgclient import readchannel, runcommand, check
822 >>> @check
823 ... def abort(server):
824 ... readchannel(server)
825 ... runcommand(server, ['commit',
826 ... '--config', 'hooks.pretxncommit=false',
827 ... '-mfoo', 'foo'])
828 ... runcommand(server, ['log'])
829 ... runcommand(server, ['verify', '-q'])
830 *** runcommand commit --config hooks.pretxncommit=false -mfoo foo
831 transaction abort!
832 rollback completed
833 abort: pretxncommit hook exited with status 1
834 [255]
835 *** runcommand log
836 0 bar (bar)
837 *** runcommand verify -q
838
839 (failure after finalization)
840
841 >>> from hgclient import readchannel, runcommand, check
842 >>> @check
843 ... def abort(server):
844 ... readchannel(server)
845 ... runcommand(server, ['commit',
846 ... '--config', 'failafterfinalize.fail=true',
847 ... '-mfoo', 'foo'])
848 ... runcommand(server, ['log'])
849 ... runcommand(server, ['verify', '-q'])
850 *** runcommand commit --config failafterfinalize.fail=true -mfoo foo
851 transaction abort!
852 rollback completed
853 abort: fail after finalization
854 [255]
855 *** runcommand log
856 0 bar (bar)
857 *** runcommand verify -q
General Comments 0
You need to be logged in to leave comments. Login now