Show More
@@ -57,6 +57,28 b' access control. Keys in these sections a' | |||||
57 | a glob syntax by default). The corresponding values follow the same |
|
57 | a glob syntax by default). The corresponding values follow the same | |
58 | syntax as the other sections above. |
|
58 | syntax as the other sections above. | |
59 |
|
59 | |||
|
60 | Bookmark-based Access Control | |||
|
61 | ----------------------------- | |||
|
62 | Use the ``acl.deny.bookmarks`` and ``acl.allow.bookmarks`` sections to | |||
|
63 | have bookmark-based access control. Keys in these sections can be | |||
|
64 | either: | |||
|
65 | ||||
|
66 | - a bookmark name, or | |||
|
67 | - an asterisk, to match any bookmark; | |||
|
68 | ||||
|
69 | The corresponding values can be either: | |||
|
70 | ||||
|
71 | - a comma-separated list containing users and groups, or | |||
|
72 | - an asterisk, to match anyone; | |||
|
73 | ||||
|
74 | You can add the "!" prefix to a user or group name to invert the sense | |||
|
75 | of the match. | |||
|
76 | ||||
|
77 | Note: for interactions between clients and servers using Mercurial 3.6+ | |||
|
78 | a rejection will generally reject the entire push, for interactions | |||
|
79 | involving older clients, the commit transactions will already be accepted, | |||
|
80 | and only the bookmark movement will be rejected. | |||
|
81 | ||||
60 | Groups |
|
82 | Groups | |
61 | ------ |
|
83 | ------ | |
62 |
|
84 | |||
@@ -326,9 +348,10 b' def hook(ui, repo, hooktype, node=None, ' | |||||
326 |
|
348 | |||
327 | ensureenabled(ui) |
|
349 | ensureenabled(ui) | |
328 |
|
350 | |||
329 | if hooktype not in ['pretxnchangegroup', 'pretxncommit']: |
|
351 | if hooktype not in ['pretxnchangegroup', 'pretxncommit', 'prepushkey']: | |
330 | raise error.Abort(_('config error - hook type "%s" cannot stop ' |
|
352 | raise error.Abort( | |
331 | 'incoming changesets nor commits') % hooktype) |
|
353 | _('config error - hook type "%s" cannot stop ' | |
|
354 | 'incoming changesets, commits, nor bookmarks') % hooktype) | |||
332 | if (hooktype == 'pretxnchangegroup' and |
|
355 | if (hooktype == 'pretxnchangegroup' and | |
333 | source not in ui.configlist('acl', 'sources')): |
|
356 | source not in ui.configlist('acl', 'sources')): | |
334 | ui.debug('acl: changes have source "%s" - skipping\n' % source) |
|
357 | ui.debug('acl: changes have source "%s" - skipping\n' % source) | |
@@ -345,6 +368,30 b' def hook(ui, repo, hooktype, node=None, ' | |||||
345 |
|
368 | |||
346 | ui.debug('acl: checking access for user "%s"\n' % user) |
|
369 | ui.debug('acl: checking access for user "%s"\n' % user) | |
347 |
|
370 | |||
|
371 | if hooktype == 'prepushkey': | |||
|
372 | _pkhook(ui, repo, hooktype, node, source, user, **kwargs) | |||
|
373 | else: | |||
|
374 | _txnhook(ui, repo, hooktype, node, source, user, **kwargs) | |||
|
375 | ||||
|
376 | def _pkhook(ui, repo, hooktype, node, source, user, **kwargs): | |||
|
377 | if kwargs['namespace'] == 'bookmarks': | |||
|
378 | bookmark = kwargs['key'] | |||
|
379 | ctx = kwargs['new'] | |||
|
380 | allowbookmarks = buildmatch(ui, None, user, 'acl.allow.bookmarks') | |||
|
381 | denybookmarks = buildmatch(ui, None, user, 'acl.deny.bookmarks') | |||
|
382 | ||||
|
383 | if denybookmarks and denybookmarks(bookmark): | |||
|
384 | raise error.Abort(_('acl: user "%s" denied on bookmark "%s"' | |||
|
385 | ' (changeset "%s")') | |||
|
386 | % (user, bookmark, ctx)) | |||
|
387 | if allowbookmarks and not allowbookmarks(bookmark): | |||
|
388 | raise error.Abort(_('acl: user "%s" not allowed on bookmark "%s"' | |||
|
389 | ' (changeset "%s")') | |||
|
390 | % (user, bookmark, ctx)) | |||
|
391 | ui.debug('acl: bookmark access granted: "%s" on bookmark "%s"\n' | |||
|
392 | % (ctx, bookmark)) | |||
|
393 | ||||
|
394 | def _txnhook(ui, repo, hooktype, node, source, user, **kwargs): | |||
348 | # deprecated config: acl.config |
|
395 | # deprecated config: acl.config | |
349 | cfg = ui.config('acl', 'config') |
|
396 | cfg = ui.config('acl', 'config') | |
350 | if cfg: |
|
397 | if cfg: |
@@ -15,7 +15,7 b'' | |||||
15 | > # LOGNAME=$user hg --cws a --debug push ../b |
|
15 | > # LOGNAME=$user hg --cws a --debug push ../b | |
16 | > # fails with "This variable is read only." |
|
16 | > # fails with "This variable is read only." | |
17 | > # Use env to work around this. |
|
17 | > # Use env to work around this. | |
18 | > env LOGNAME=$user hg --cwd a --debug push ../b |
|
18 | > env LOGNAME=$user hg --cwd a --debug push ../b $* | |
19 | > hg --cwd b rollback |
|
19 | > hg --cwd b rollback | |
20 | > hg --cwd b --quiet tip |
|
20 | > hg --cwd b --quiet tip | |
21 | > echo |
|
21 | > echo | |
@@ -47,6 +47,7 b'' | |||||
47 | > cat > $config <<EOF |
|
47 | > cat > $config <<EOF | |
48 | > [hooks] |
|
48 | > [hooks] | |
49 | > pretxnchangegroup.acl = python:hgext.acl.hook |
|
49 | > pretxnchangegroup.acl = python:hgext.acl.hook | |
|
50 | > prepushkey.acl = python:hgext.acl.hook | |||
50 | > [acl] |
|
51 | > [acl] | |
51 | > sources = push |
|
52 | > sources = push | |
52 | > [extensions] |
|
53 | > [extensions] | |
@@ -148,6 +149,7 b' Extension disabled for lack of a hook' | |||||
148 |
|
149 | |||
149 | $ echo '[hooks]' >> $config |
|
150 | $ echo '[hooks]' >> $config | |
150 | $ echo 'pretxnchangegroup.acl = python:hgext.acl.hook' >> $config |
|
151 | $ echo 'pretxnchangegroup.acl = python:hgext.acl.hook' >> $config | |
|
152 | $ echo 'prepushkey.acl = python:hgext.acl.hook' >> $config | |||
151 |
|
153 | |||
152 | Extension disabled for lack of acl.sources |
|
154 | Extension disabled for lack of acl.sources | |
153 |
|
155 | |||
@@ -156,6 +158,7 b' Extension disabled for lack of acl.sourc' | |||||
156 | hgrc = """ |
|
158 | hgrc = """ | |
157 | [hooks] |
|
159 | [hooks] | |
158 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
160 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
161 | prepushkey.acl = python:hgext.acl.hook | |||
159 | """ |
|
162 | """ | |
160 | pushing to ../b |
|
163 | pushing to ../b | |
161 | query 1; heads |
|
164 | query 1; heads | |
@@ -220,6 +223,7 b' No [acl.allow]/[acl.deny]' | |||||
220 | hgrc = """ |
|
223 | hgrc = """ | |
221 | [hooks] |
|
224 | [hooks] | |
222 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
225 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
226 | prepushkey.acl = python:hgext.acl.hook | |||
223 | [acl] |
|
227 | [acl] | |
224 | sources = push |
|
228 | sources = push | |
225 | """ |
|
229 | """ | |
@@ -295,6 +299,7 b' Empty [acl.allow]' | |||||
295 | hgrc = """ |
|
299 | hgrc = """ | |
296 | [hooks] |
|
300 | [hooks] | |
297 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
301 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
302 | prepushkey.acl = python:hgext.acl.hook | |||
298 | [acl] |
|
303 | [acl] | |
299 | sources = push |
|
304 | sources = push | |
300 | [acl.allow] |
|
305 | [acl.allow] | |
@@ -362,6 +367,7 b' fred is allowed inside foo/' | |||||
362 | hgrc = """ |
|
367 | hgrc = """ | |
363 | [hooks] |
|
368 | [hooks] | |
364 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
369 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
370 | prepushkey.acl = python:hgext.acl.hook | |||
365 | [acl] |
|
371 | [acl] | |
366 | sources = push |
|
372 | sources = push | |
367 | [acl.allow] |
|
373 | [acl.allow] | |
@@ -434,6 +440,7 b' Empty [acl.deny]' | |||||
434 | hgrc = """ |
|
440 | hgrc = """ | |
435 | [hooks] |
|
441 | [hooks] | |
436 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
442 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
443 | prepushkey.acl = python:hgext.acl.hook | |||
437 | [acl] |
|
444 | [acl] | |
438 | sources = push |
|
445 | sources = push | |
439 | [acl.allow] |
|
446 | [acl.allow] | |
@@ -503,6 +510,7 b' fred is allowed inside foo/, but not foo' | |||||
503 | hgrc = """ |
|
510 | hgrc = """ | |
504 | [hooks] |
|
511 | [hooks] | |
505 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
512 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
513 | prepushkey.acl = python:hgext.acl.hook | |||
506 | [acl] |
|
514 | [acl] | |
507 | sources = push |
|
515 | sources = push | |
508 | [acl.allow] |
|
516 | [acl.allow] | |
@@ -577,6 +585,7 b' fred is allowed inside foo/, but not foo' | |||||
577 | hgrc = """ |
|
585 | hgrc = """ | |
578 | [hooks] |
|
586 | [hooks] | |
579 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
587 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
588 | prepushkey.acl = python:hgext.acl.hook | |||
580 | [acl] |
|
589 | [acl] | |
581 | sources = push |
|
590 | sources = push | |
582 | [acl.allow] |
|
591 | [acl.allow] | |
@@ -649,6 +658,7 b' fred is allowed inside foo/, but not foo' | |||||
649 | hgrc = """ |
|
658 | hgrc = """ | |
650 | [hooks] |
|
659 | [hooks] | |
651 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
660 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
661 | prepushkey.acl = python:hgext.acl.hook | |||
652 | [acl] |
|
662 | [acl] | |
653 | sources = push |
|
663 | sources = push | |
654 | [acl.allow] |
|
664 | [acl.allow] | |
@@ -712,6 +722,178 b' fred is allowed inside foo/, but not foo' | |||||
712 | 0:6675d58eff77 |
|
722 | 0:6675d58eff77 | |
713 |
|
723 | |||
714 |
|
724 | |||
|
725 | fred is not blocked from moving bookmarks | |||
|
726 | ||||
|
727 | $ hg -R a book -q moving-bookmark -r 1 | |||
|
728 | $ hg -R b book -q moving-bookmark -r 0 | |||
|
729 | $ cp $config normalconfig | |||
|
730 | $ do_push fred -r 1 | |||
|
731 | Pushing as user fred | |||
|
732 | hgrc = """ | |||
|
733 | [hooks] | |||
|
734 | pretxnchangegroup.acl = python:hgext.acl.hook | |||
|
735 | prepushkey.acl = python:hgext.acl.hook | |||
|
736 | [acl] | |||
|
737 | sources = push | |||
|
738 | [acl.allow] | |||
|
739 | foo/** = fred | |||
|
740 | [acl.deny] | |||
|
741 | foo/bar/** = fred | |||
|
742 | foo/Bar/** = fred | |||
|
743 | """ | |||
|
744 | pushing to ../b | |||
|
745 | query 1; heads | |||
|
746 | searching for changes | |||
|
747 | all remote heads known locally | |||
|
748 | listing keys for "phases" | |||
|
749 | checking for updated bookmarks | |||
|
750 | listing keys for "bookmarks" | |||
|
751 | listing keys for "bookmarks" | |||
|
752 | 1 changesets found | |||
|
753 | list of changesets: | |||
|
754 | ef1ea85a6374b77d6da9dcda9541f498f2d17df7 | |||
|
755 | bundle2-output-bundle: "HG20", 7 parts total | |||
|
756 | bundle2-output-part: "replycaps" 205 bytes payload | |||
|
757 | bundle2-output-part: "check:bookmarks" 37 bytes payload | |||
|
758 | bundle2-output-part: "check:phases" 24 bytes payload | |||
|
759 | bundle2-output-part: "check:heads" streamed payload | |||
|
760 | bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload | |||
|
761 | bundle2-output-part: "phase-heads" 24 bytes payload | |||
|
762 | bundle2-output-part: "bookmarks" 37 bytes payload | |||
|
763 | bundle2-input-bundle: with-transaction | |||
|
764 | bundle2-input-part: "replycaps" supported | |||
|
765 | bundle2-input-part: total payload size 205 | |||
|
766 | bundle2-input-part: "check:bookmarks" supported | |||
|
767 | bundle2-input-part: total payload size 37 | |||
|
768 | bundle2-input-part: "check:phases" supported | |||
|
769 | bundle2-input-part: total payload size 24 | |||
|
770 | bundle2-input-part: "check:heads" supported | |||
|
771 | bundle2-input-part: total payload size 20 | |||
|
772 | bundle2-input-part: "changegroup" (params: 1 mandatory) supported | |||
|
773 | adding changesets | |||
|
774 | add changeset ef1ea85a6374 | |||
|
775 | adding manifests | |||
|
776 | adding file changes | |||
|
777 | adding foo/file.txt revisions | |||
|
778 | added 1 changesets with 1 changes to 1 files | |||
|
779 | calling hook pretxnchangegroup.acl: hgext.acl.hook | |||
|
780 | acl: checking access for user "fred" | |||
|
781 | acl: acl.allow.branches not enabled | |||
|
782 | acl: acl.deny.branches not enabled | |||
|
783 | acl: acl.allow enabled, 1 entries for user fred | |||
|
784 | acl: acl.deny enabled, 2 entries for user fred | |||
|
785 | acl: branch access granted: "ef1ea85a6374" on branch "default" | |||
|
786 | acl: path access granted: "ef1ea85a6374" | |||
|
787 | bundle2-input-part: total payload size 520 | |||
|
788 | bundle2-input-part: "phase-heads" supported | |||
|
789 | bundle2-input-part: total payload size 24 | |||
|
790 | bundle2-input-part: "bookmarks" supported | |||
|
791 | bundle2-input-part: total payload size 37 | |||
|
792 | calling hook prepushkey.acl: hgext.acl.hook | |||
|
793 | acl: checking access for user "fred" | |||
|
794 | acl: acl.allow.bookmarks not enabled | |||
|
795 | acl: acl.deny.bookmarks not enabled | |||
|
796 | acl: bookmark access granted: "ef1ea85a6374b77d6da9dcda9541f498f2d17df7" on bookmark "moving-bookmark" | |||
|
797 | bundle2-input-bundle: 6 parts total | |||
|
798 | updating the branch cache | |||
|
799 | bundle2-output-bundle: "HG20", 1 parts total | |||
|
800 | bundle2-output-part: "reply:changegroup" (advisory) (params: 0 advisory) empty payload | |||
|
801 | bundle2-input-bundle: no-transaction | |||
|
802 | bundle2-input-part: "reply:changegroup" (advisory) (params: 0 advisory) supported | |||
|
803 | bundle2-input-bundle: 0 parts total | |||
|
804 | updating bookmark moving-bookmark | |||
|
805 | listing keys for "phases" | |||
|
806 | repository tip rolled back to revision 0 (undo push) | |||
|
807 | 0:6675d58eff77 | |||
|
808 | ||||
|
809 | ||||
|
810 | fred is not allowed to move bookmarks | |||
|
811 | ||||
|
812 | $ echo '[acl.deny.bookmarks]' >> $config | |||
|
813 | $ echo '* = fred' >> $config | |||
|
814 | $ do_push fred -r 1 | |||
|
815 | Pushing as user fred | |||
|
816 | hgrc = """ | |||
|
817 | [hooks] | |||
|
818 | pretxnchangegroup.acl = python:hgext.acl.hook | |||
|
819 | prepushkey.acl = python:hgext.acl.hook | |||
|
820 | [acl] | |||
|
821 | sources = push | |||
|
822 | [acl.allow] | |||
|
823 | foo/** = fred | |||
|
824 | [acl.deny] | |||
|
825 | foo/bar/** = fred | |||
|
826 | foo/Bar/** = fred | |||
|
827 | [acl.deny.bookmarks] | |||
|
828 | * = fred | |||
|
829 | """ | |||
|
830 | pushing to ../b | |||
|
831 | query 1; heads | |||
|
832 | searching for changes | |||
|
833 | all remote heads known locally | |||
|
834 | listing keys for "phases" | |||
|
835 | checking for updated bookmarks | |||
|
836 | listing keys for "bookmarks" | |||
|
837 | listing keys for "bookmarks" | |||
|
838 | 1 changesets found | |||
|
839 | list of changesets: | |||
|
840 | ef1ea85a6374b77d6da9dcda9541f498f2d17df7 | |||
|
841 | bundle2-output-bundle: "HG20", 7 parts total | |||
|
842 | bundle2-output-part: "replycaps" 205 bytes payload | |||
|
843 | bundle2-output-part: "check:bookmarks" 37 bytes payload | |||
|
844 | bundle2-output-part: "check:phases" 24 bytes payload | |||
|
845 | bundle2-output-part: "check:heads" streamed payload | |||
|
846 | bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload | |||
|
847 | bundle2-output-part: "phase-heads" 24 bytes payload | |||
|
848 | bundle2-output-part: "bookmarks" 37 bytes payload | |||
|
849 | bundle2-input-bundle: with-transaction | |||
|
850 | bundle2-input-part: "replycaps" supported | |||
|
851 | bundle2-input-part: total payload size 205 | |||
|
852 | bundle2-input-part: "check:bookmarks" supported | |||
|
853 | bundle2-input-part: total payload size 37 | |||
|
854 | bundle2-input-part: "check:phases" supported | |||
|
855 | bundle2-input-part: total payload size 24 | |||
|
856 | bundle2-input-part: "check:heads" supported | |||
|
857 | bundle2-input-part: total payload size 20 | |||
|
858 | bundle2-input-part: "changegroup" (params: 1 mandatory) supported | |||
|
859 | adding changesets | |||
|
860 | add changeset ef1ea85a6374 | |||
|
861 | adding manifests | |||
|
862 | adding file changes | |||
|
863 | adding foo/file.txt revisions | |||
|
864 | added 1 changesets with 1 changes to 1 files | |||
|
865 | calling hook pretxnchangegroup.acl: hgext.acl.hook | |||
|
866 | acl: checking access for user "fred" | |||
|
867 | acl: acl.allow.branches not enabled | |||
|
868 | acl: acl.deny.branches not enabled | |||
|
869 | acl: acl.allow enabled, 1 entries for user fred | |||
|
870 | acl: acl.deny enabled, 2 entries for user fred | |||
|
871 | acl: branch access granted: "ef1ea85a6374" on branch "default" | |||
|
872 | acl: path access granted: "ef1ea85a6374" | |||
|
873 | bundle2-input-part: total payload size 520 | |||
|
874 | bundle2-input-part: "phase-heads" supported | |||
|
875 | bundle2-input-part: total payload size 24 | |||
|
876 | bundle2-input-part: "bookmarks" supported | |||
|
877 | bundle2-input-part: total payload size 37 | |||
|
878 | calling hook prepushkey.acl: hgext.acl.hook | |||
|
879 | acl: checking access for user "fred" | |||
|
880 | acl: acl.allow.bookmarks not enabled | |||
|
881 | acl: acl.deny.bookmarks enabled, 1 entries for user fred | |||
|
882 | error: prepushkey.acl hook failed: acl: user "fred" denied on bookmark "moving-bookmark" (changeset "ef1ea85a6374b77d6da9dcda9541f498f2d17df7") | |||
|
883 | bundle2-input-bundle: 6 parts total | |||
|
884 | transaction abort! | |||
|
885 | rollback completed | |||
|
886 | abort: acl: user "fred" denied on bookmark "moving-bookmark" (changeset "ef1ea85a6374b77d6da9dcda9541f498f2d17df7") | |||
|
887 | no rollback information available | |||
|
888 | 0:6675d58eff77 | |||
|
889 | ||||
|
890 | ||||
|
891 | cleanup bookmark stuff | |||
|
892 | ||||
|
893 | $ hg book -R a -d moving-bookmark | |||
|
894 | $ hg book -R b -d moving-bookmark | |||
|
895 | $ cp normalconfig $config | |||
|
896 | ||||
715 | barney is allowed everywhere |
|
897 | barney is allowed everywhere | |
716 |
|
898 | |||
717 | $ echo '[acl.allow]' >> $config |
|
899 | $ echo '[acl.allow]' >> $config | |
@@ -721,6 +903,7 b' barney is allowed everywhere' | |||||
721 | hgrc = """ |
|
903 | hgrc = """ | |
722 | [hooks] |
|
904 | [hooks] | |
723 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
905 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
906 | prepushkey.acl = python:hgext.acl.hook | |||
724 | [acl] |
|
907 | [acl] | |
725 | sources = push |
|
908 | sources = push | |
726 | [acl.allow] |
|
909 | [acl.allow] | |
@@ -803,6 +986,7 b' wilma can change files with a .txt exten' | |||||
803 | hgrc = """ |
|
986 | hgrc = """ | |
804 | [hooks] |
|
987 | [hooks] | |
805 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
988 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
989 | prepushkey.acl = python:hgext.acl.hook | |||
806 | [acl] |
|
990 | [acl] | |
807 | sources = push |
|
991 | sources = push | |
808 | [acl.allow] |
|
992 | [acl.allow] | |
@@ -882,6 +1066,7 b' file specified by acl.config does not ex' | |||||
882 | hgrc = """ |
|
1066 | hgrc = """ | |
883 | [hooks] |
|
1067 | [hooks] | |
884 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1068 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1069 | prepushkey.acl = python:hgext.acl.hook | |||
885 | [acl] |
|
1070 | [acl] | |
886 | sources = push |
|
1071 | sources = push | |
887 | [acl.allow] |
|
1072 | [acl.allow] | |
@@ -954,6 +1139,7 b' betty is allowed inside foo/ by a acl.co' | |||||
954 | hgrc = """ |
|
1139 | hgrc = """ | |
955 | [hooks] |
|
1140 | [hooks] | |
956 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1141 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1142 | prepushkey.acl = python:hgext.acl.hook | |||
957 | [acl] |
|
1143 | [acl] | |
958 | sources = push |
|
1144 | sources = push | |
959 | [acl.allow] |
|
1145 | [acl.allow] | |
@@ -1039,6 +1225,7 b' acl.config can set only [acl.allow]/[acl' | |||||
1039 | hgrc = """ |
|
1225 | hgrc = """ | |
1040 | [hooks] |
|
1226 | [hooks] | |
1041 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1227 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1228 | prepushkey.acl = python:hgext.acl.hook | |||
1042 | [acl] |
|
1229 | [acl] | |
1043 | sources = push |
|
1230 | sources = push | |
1044 | [acl.allow] |
|
1231 | [acl.allow] | |
@@ -1138,6 +1325,7 b' fred is always allowed' | |||||
1138 | hgrc = """ |
|
1325 | hgrc = """ | |
1139 | [hooks] |
|
1326 | [hooks] | |
1140 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1327 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1328 | prepushkey.acl = python:hgext.acl.hook | |||
1141 | [acl] |
|
1329 | [acl] | |
1142 | sources = push |
|
1330 | sources = push | |
1143 | [extensions] |
|
1331 | [extensions] | |
@@ -1219,6 +1407,7 b' no one is allowed inside foo/Bar/' | |||||
1219 | hgrc = """ |
|
1407 | hgrc = """ | |
1220 | [hooks] |
|
1408 | [hooks] | |
1221 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1409 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1410 | prepushkey.acl = python:hgext.acl.hook | |||
1222 | [acl] |
|
1411 | [acl] | |
1223 | sources = push |
|
1412 | sources = push | |
1224 | [extensions] |
|
1413 | [extensions] | |
@@ -1301,6 +1490,7 b' OS-level groups' | |||||
1301 | hgrc = """ |
|
1490 | hgrc = """ | |
1302 | [hooks] |
|
1491 | [hooks] | |
1303 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1492 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1493 | prepushkey.acl = python:hgext.acl.hook | |||
1304 | [acl] |
|
1494 | [acl] | |
1305 | sources = push |
|
1495 | sources = push | |
1306 | [extensions] |
|
1496 | [extensions] | |
@@ -1383,6 +1573,7 b' OS-level groups' | |||||
1383 | hgrc = """ |
|
1573 | hgrc = """ | |
1384 | [hooks] |
|
1574 | [hooks] | |
1385 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1575 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1576 | prepushkey.acl = python:hgext.acl.hook | |||
1386 | [acl] |
|
1577 | [acl] | |
1387 | sources = push |
|
1578 | sources = push | |
1388 | [extensions] |
|
1579 | [extensions] | |
@@ -1507,6 +1698,7 b' No branch acls specified' | |||||
1507 | hgrc = """ |
|
1698 | hgrc = """ | |
1508 | [hooks] |
|
1699 | [hooks] | |
1509 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1700 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1701 | prepushkey.acl = python:hgext.acl.hook | |||
1510 | [acl] |
|
1702 | [acl] | |
1511 | sources = push |
|
1703 | sources = push | |
1512 | [extensions] |
|
1704 | [extensions] | |
@@ -1590,6 +1782,7 b' Branch acl deny test' | |||||
1590 | hgrc = """ |
|
1782 | hgrc = """ | |
1591 | [hooks] |
|
1783 | [hooks] | |
1592 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1784 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1785 | prepushkey.acl = python:hgext.acl.hook | |||
1593 | [acl] |
|
1786 | [acl] | |
1594 | sources = push |
|
1787 | sources = push | |
1595 | [extensions] |
|
1788 | [extensions] | |
@@ -1669,6 +1862,7 b' Branch acl empty allow test' | |||||
1669 | hgrc = """ |
|
1862 | hgrc = """ | |
1670 | [hooks] |
|
1863 | [hooks] | |
1671 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1864 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1865 | prepushkey.acl = python:hgext.acl.hook | |||
1672 | [acl] |
|
1866 | [acl] | |
1673 | sources = push |
|
1867 | sources = push | |
1674 | [extensions] |
|
1868 | [extensions] | |
@@ -1742,6 +1936,7 b' Branch acl allow other' | |||||
1742 | hgrc = """ |
|
1936 | hgrc = """ | |
1743 | [hooks] |
|
1937 | [hooks] | |
1744 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
1938 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
1939 | prepushkey.acl = python:hgext.acl.hook | |||
1745 | [acl] |
|
1940 | [acl] | |
1746 | sources = push |
|
1941 | sources = push | |
1747 | [extensions] |
|
1942 | [extensions] | |
@@ -1810,6 +2005,7 b' Branch acl allow other' | |||||
1810 | hgrc = """ |
|
2005 | hgrc = """ | |
1811 | [hooks] |
|
2006 | [hooks] | |
1812 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
2007 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
2008 | prepushkey.acl = python:hgext.acl.hook | |||
1813 | [acl] |
|
2009 | [acl] | |
1814 | sources = push |
|
2010 | sources = push | |
1815 | [extensions] |
|
2011 | [extensions] | |
@@ -1899,6 +2095,7 b' push foobar into the remote' | |||||
1899 | hgrc = """ |
|
2095 | hgrc = """ | |
1900 | [hooks] |
|
2096 | [hooks] | |
1901 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
2097 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
2098 | prepushkey.acl = python:hgext.acl.hook | |||
1902 | [acl] |
|
2099 | [acl] | |
1903 | sources = push |
|
2100 | sources = push | |
1904 | [extensions] |
|
2101 | [extensions] | |
@@ -1987,6 +2184,7 b' Branch acl conflicting deny' | |||||
1987 | hgrc = """ |
|
2184 | hgrc = """ | |
1988 | [hooks] |
|
2185 | [hooks] | |
1989 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
2186 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
2187 | prepushkey.acl = python:hgext.acl.hook | |||
1990 | [acl] |
|
2188 | [acl] | |
1991 | sources = push |
|
2189 | sources = push | |
1992 | [extensions] |
|
2190 | [extensions] | |
@@ -2062,6 +2260,7 b" User 'astro' must not be denied" | |||||
2062 | hgrc = """ |
|
2260 | hgrc = """ | |
2063 | [hooks] |
|
2261 | [hooks] | |
2064 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
2262 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
2263 | prepushkey.acl = python:hgext.acl.hook | |||
2065 | [acl] |
|
2264 | [acl] | |
2066 | sources = push |
|
2265 | sources = push | |
2067 | [extensions] |
|
2266 | [extensions] | |
@@ -2145,6 +2344,7 b' Non-astro users must be denied' | |||||
2145 | hgrc = """ |
|
2344 | hgrc = """ | |
2146 | [hooks] |
|
2345 | [hooks] | |
2147 | pretxnchangegroup.acl = python:hgext.acl.hook |
|
2346 | pretxnchangegroup.acl = python:hgext.acl.hook | |
|
2347 | prepushkey.acl = python:hgext.acl.hook | |||
2148 | [acl] |
|
2348 | [acl] | |
2149 | sources = push |
|
2349 | sources = push | |
2150 | [extensions] |
|
2350 | [extensions] |
General Comments 0
You need to be logged in to leave comments.
Login now