comparison tests/test-extension.t @ 19777:6f72e7d28b35

extensions: list up only enabled extensions, if "ui" is specified Before this patch, "extensions.extensions()" always lists up all loaded extensions. So, commands handling multiple repositories at a time like below enable extensions unexpectedly. - clone from or push to localhost: extensions enabled only in the source are enabled also in the destination - pull from localhost: extensions enabled only in the destination are enabled also in the source - recursive execution in subrepo tree: extensions enabled only in the parent or some of siblings in the tree are enabled also in others In addition to it, extensions disabled locally may be enabled unexpectedly. This patch checks whether each of extensions should be listed up or not, if "ui" is specified to "extensions.extensions()", and invokes "reposetup()" of each extensions only for repositories enabling it.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Sat, 21 Sep 2013 21:33:29 +0900
parents 6e676fb6ea44
children a194a33f8cb2
comparison
equal deleted inserted replaced
19776:a9e92b11a3f2 19777:6f72e7d28b35
415 debugissue811 415 debugissue811
416 mq 416 mq
417 417
418 Disabled extension commands: 418 Disabled extension commands:
419 419
420 $ ORGHGRCPATH=$HGRCPATH
420 $ HGRCPATH= 421 $ HGRCPATH=
421 $ export HGRCPATH 422 $ export HGRCPATH
422 $ hg help email 423 $ hg help email
423 'email' is provided by the following extension: 424 'email' is provided by the following extension:
424 425
571 ** unknown exception encountered, please report by visiting 572 ** unknown exception encountered, please report by visiting
572 ** http://mercurial.selenic.com/wiki/BugTracker 573 ** http://mercurial.selenic.com/wiki/BugTracker
573 ** Python * (glob) 574 ** Python * (glob)
574 ** Mercurial Distributed SCM (*) (glob) 575 ** Mercurial Distributed SCM (*) (glob)
575 ** Extensions loaded: throw 576 ** Extensions loaded: throw
577
578 Restore HGRCPATH
579
580 $ HGRCPATH=$ORGHGRCPATH
581 $ export HGRCPATH
582
583 Commands handling multiple repositories at a time should invoke only
584 "reposetup()" of extensions enabling in the target repository.
585
586 $ mkdir reposetup-test
587 $ cd reposetup-test
588
589 $ cat > $TESTTMP/reposetuptest.py <<EOF
590 > from mercurial import extensions
591 > def reposetup(ui, repo):
592 > ui.write('reposetup() for %s\n' % (repo.root))
593 > EOF
594 $ hg init src
595 $ echo a > src/a
596 $ hg -R src commit -Am '#0 at src/a'
597 adding a
598 $ echo '[extensions]' >> src/.hg/hgrc
599 $ echo '# enable extension locally' >> src/.hg/hgrc
600 $ echo "reposetuptest = $TESTTMP/reposetuptest.py" >> src/.hg/hgrc
601 $ hg -R src status
602 reposetup() for $TESTTMP/reposetup-test/src
603
604 $ hg clone -U src clone-dst1
605 reposetup() for $TESTTMP/reposetup-test/src
606 $ hg init push-dst1
607 $ hg -q -R src push push-dst1
608 reposetup() for $TESTTMP/reposetup-test/src
609 $ hg init pull-src1
610 $ hg -q -R pull-src1 pull src
611 reposetup() for $TESTTMP/reposetup-test/src
612
613 $ echo '[extensions]' >> $HGRCPATH
614 $ echo '# disable extension globally and explicitly' >> $HGRCPATH
615 $ echo 'reposetuptest = !' >> $HGRCPATH
616 $ hg clone -U src clone-dst2
617 reposetup() for $TESTTMP/reposetup-test/src
618 $ hg init push-dst2
619 $ hg -q -R src push push-dst2
620 reposetup() for $TESTTMP/reposetup-test/src
621 $ hg init pull-src2
622 $ hg -q -R pull-src2 pull src
623 reposetup() for $TESTTMP/reposetup-test/src
624
625 $ echo '[extensions]' >> $HGRCPATH
626 $ echo '# enable extension globally' >> $HGRCPATH
627 $ echo "reposetuptest = $TESTTMP/reposetuptest.py" >> $HGRCPATH
628 $ hg clone -U src clone-dst3
629 reposetup() for $TESTTMP/reposetup-test/src
630 reposetup() for $TESTTMP/reposetup-test/clone-dst3
631 $ hg init push-dst3
632 reposetup() for $TESTTMP/reposetup-test/push-dst3
633 $ hg -q -R src push push-dst3
634 reposetup() for $TESTTMP/reposetup-test/src
635 reposetup() for $TESTTMP/reposetup-test/push-dst3
636 $ hg init pull-src3
637 reposetup() for $TESTTMP/reposetup-test/pull-src3
638 $ hg -q -R pull-src3 pull src
639 reposetup() for $TESTTMP/reposetup-test/pull-src3
640 reposetup() for $TESTTMP/reposetup-test/src
641
642 $ echo '[extensions]' >> src/.hg/hgrc
643 $ echo '# disable extension locally' >> src/.hg/hgrc
644 $ echo 'reposetuptest = !' >> src/.hg/hgrc
645 $ hg clone -U src clone-dst4
646 reposetup() for $TESTTMP/reposetup-test/clone-dst4
647 $ hg init push-dst4
648 reposetup() for $TESTTMP/reposetup-test/push-dst4
649 $ hg -q -R src push push-dst4
650 reposetup() for $TESTTMP/reposetup-test/push-dst4
651 $ hg init pull-src4
652 reposetup() for $TESTTMP/reposetup-test/pull-src4
653 $ hg -q -R pull-src4 pull src
654 reposetup() for $TESTTMP/reposetup-test/pull-src4
655
656 disabling in command line overlays with all configuration
657 $ hg --config extensions.reposetuptest=! clone -U src clone-dst5
658 $ hg --config extensions.reposetuptest=! init push-dst5
659 $ hg --config extensions.reposetuptest=! -q -R src push push-dst5
660 $ hg --config extensions.reposetuptest=! init pull-src5
661 $ hg --config extensions.reposetuptest=! -q -R pull-src5 pull src
662
663 $ echo '[extensions]' >> $HGRCPATH
664 $ echo '# disable extension globally and explicitly' >> $HGRCPATH
665 $ echo 'reposetuptest = !' >> $HGRCPATH
666 $ hg init parent
667 $ hg init parent/sub1
668 $ echo 1 > parent/sub1/1
669 $ hg -R parent/sub1 commit -Am '#0 at parent/sub1'
670 adding 1
671 $ hg init parent/sub2
672 $ hg init parent/sub2/sub21
673 $ echo 21 > parent/sub2/sub21/21
674 $ hg -R parent/sub2/sub21 commit -Am '#0 at parent/sub2/sub21'
675 adding 21
676 $ cat > parent/sub2/.hgsub <<EOF
677 > sub21 = sub21
678 > EOF
679 $ hg -R parent/sub2 commit -Am '#0 at parent/sub2'
680 adding .hgsub
681 $ hg init parent/sub3
682 $ echo 3 > parent/sub3/3
683 $ hg -R parent/sub3 commit -Am '#0 at parent/sub3'
684 adding 3
685 $ cat > parent/.hgsub <<EOF
686 > sub1 = sub1
687 > sub2 = sub2
688 > sub3 = sub3
689 > EOF
690 $ hg -R parent commit -Am '#0 at parent'
691 adding .hgsub
692 $ echo '[extensions]' >> parent/.hg/hgrc
693 $ echo '# enable extension locally' >> parent/.hg/hgrc
694 $ echo "reposetuptest = $TESTTMP/reposetuptest.py" >> parent/.hg/hgrc
695 $ cp parent/.hg/hgrc parent/sub2/.hg/hgrc
696 $ hg -R parent status -S -A
697 reposetup() for $TESTTMP/reposetup-test/parent
698 reposetup() for $TESTTMP/reposetup-test/parent/sub2
699 C .hgsub
700 C .hgsubstate
701 C sub1/1
702 C sub2/.hgsub
703 C sub2/.hgsubstate
704 C sub2/sub21/21
705 C sub3/3
706
707 $ cd ..