##// END OF EJS Templates
acl: improve undefined group error handling
Patrick Mezard -
r11140:1f26cf0a default
parent child Browse files
Show More
@@ -1,247 +1,250
1 1 # acl.py - changeset access control for mercurial
2 2 #
3 3 # Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 '''hooks for controlling repository access
9 9
10 10 This hook makes it possible to allow or deny write access to given
11 11 branches and paths of a repository when receiving incoming changesets
12 12 via pretxnchangegroup and pretxncommit.
13 13
14 14 The authorization is matched based on the local user name on the
15 15 system where the hook runs, and not the committer of the original
16 16 changeset (since the latter is merely informative).
17 17
18 18 The acl hook is best used along with a restricted shell like hgsh,
19 19 preventing authenticating users from doing anything other than pushing
20 20 or pulling. The hook is not safe to use if users have interactive
21 21 shell access, as they can then disable the hook. Nor is it safe if
22 22 remote users share an account, because then there is no way to
23 23 distinguish them.
24 24
25 25 The order in which access checks are performed is:
26 26
27 27 1) Deny list for branches (section ``acl.deny.branches``)
28 28 2) Allow list for branches (section ``acl.allow.branches``)
29 29 3) Deny list for paths (section ``acl.deny``)
30 30 4) Allow list for paths (section ``acl.allow``)
31 31
32 32 The allow and deny sections take key-value pairs.
33 33
34 34 Branch-based Access Control
35 35 ---------------------------
36 36
37 37 Use the ``acl.deny.branches`` and ``acl.allow.branches`` sections to
38 38 have branch-based access control. Keys in these sections can be
39 39 either:
40 40
41 41 - a branch name, or
42 42 - an asterisk, to match any branch;
43 43
44 44 The corresponding values can be either:
45 45
46 46 - a comma-separated list containing users and groups, or
47 47 - an asterisk, to match anyone;
48 48
49 49 Path-based Access Control
50 50 -------------------------
51 51
52 52 Use the ``acl.deny`` and ``acl.allow`` sections to have path-based
53 53 access control. Keys in these sections accept a subtree pattern (with
54 54 a glob syntax by default). The corresponding values follow the same
55 55 syntax as the other sections above.
56 56
57 57 Groups
58 58 ------
59 59
60 60 Group names must be prefixed with an ``@`` symbol. Specifying a group
61 61 name has the same effect as specifying all the users in that group.
62 62
63 63 You can define group members in the ``acl.groups`` section.
64 64 If a group name is not defined there, and Mercurial is running under
65 65 a Unix-like system, the list of users will be taken from the OS.
66 66 Otherwise, an exception will be raised.
67 67
68 68 Example Configuration
69 69 ---------------------
70 70
71 71 ::
72 72
73 73 [hooks]
74 74
75 75 # Use this if you want to check access restrictions at commit time
76 76 pretxncommit.acl = python:hgext.acl.hook
77 77
78 78 # Use this if you want to check access restrictions for pull, push,
79 79 # bundle and serve.
80 80 pretxnchangegroup.acl = python:hgext.acl.hook
81 81
82 82 [acl]
83 83 # Allow or deny access for incoming changes only if their source is
84 84 # listed here, let them pass otherwise. Source is "serve" for all
85 85 # remote access (http or ssh), "push", "pull" or "bundle" when the
86 86 # related commands are run locally.
87 87 # Default: serve
88 88 sources = serve
89 89
90 90 [acl.deny.branches]
91 91
92 92 # Everyone is denied to the frozen branch:
93 93 frozen-branch = *
94 94
95 95 # A bad user is denied on all branches:
96 96 * = bad-user
97 97
98 98 [acl.allow.branches]
99 99
100 100 # A few users are allowed on branch-a:
101 101 branch-a = user-1, user-2, user-3
102 102
103 103 # Only one user is allowed on branch-b:
104 104 branch-b = user-1
105 105
106 106 # The super user is allowed on any branch:
107 107 * = super-user
108 108
109 109 # Everyone is allowed on branch-for-tests:
110 110 branch-for-tests = *
111 111
112 112 [acl.deny]
113 113 # This list is checked first. If a match is found, acl.allow is not
114 114 # checked. All users are granted access if acl.deny is not present.
115 115 # Format for both lists: glob pattern = user, ..., @group, ...
116 116
117 117 # To match everyone, use an asterisk for the user:
118 118 # my/glob/pattern = *
119 119
120 120 # user6 will not have write access to any file:
121 121 ** = user6
122 122
123 123 # Group "hg-denied" will not have write access to any file:
124 124 ** = @hg-denied
125 125
126 126 # Nobody will be able to change "DONT-TOUCH-THIS.txt", despite
127 127 # everyone being able to change all other files. See below.
128 128 src/main/resources/DONT-TOUCH-THIS.txt = *
129 129
130 130 [acl.allow]
131 131 # if acl.allow is not present, all users are allowed by default
132 132 # empty acl.allow = no users allowed
133 133
134 134 # User "doc_writer" has write access to any file under the "docs"
135 135 # folder:
136 136 docs/** = doc_writer
137 137
138 138 # User "jack" and group "designers" have write access to any file
139 139 # under the "images" folder:
140 140 images/** = jack, @designers
141 141
142 142 # Everyone (except for "user6" - see acl.deny above) will have write
143 143 # access to any file under the "resources" folder (except for 1
144 144 # file. See acl.deny):
145 145 src/main/resources/** = *
146 146
147 147 .hgtags = release_engineer
148 148
149 149 '''
150 150
151 151 from mercurial.i18n import _
152 152 from mercurial import util, match
153 153 import getpass, urllib
154 154
155 155 def _getusers(ui, group):
156 156
157 157 # First, try to use group definition from section [acl.groups]
158 158 hgrcusers = ui.configlist('acl.groups', group)
159 159 if hgrcusers:
160 160 return hgrcusers
161 161
162 162 ui.debug('acl: "%s" not defined in [acl.groups]\n' % group)
163 163 # If no users found in group definition, get users from OS-level group
164 try:
164 165 return util.groupmembers(group)
166 except KeyError:
167 raise util.Abort(_("group '%s' is undefined") % group)
165 168
166 169 def _usermatch(ui, user, usersorgroups):
167 170
168 171 if usersorgroups == '*':
169 172 return True
170 173
171 174 for ug in usersorgroups.replace(',', ' ').split():
172 175 if user == ug or ug.find('@') == 0 and user in _getusers(ui, ug[1:]):
173 176 return True
174 177
175 178 return False
176 179
177 180 def buildmatch(ui, repo, user, key):
178 181 '''return tuple of (match function, list enabled).'''
179 182 if not ui.has_section(key):
180 183 ui.debug('acl: %s not enabled\n' % key)
181 184 return None
182 185
183 186 pats = [pat for pat, users in ui.configitems(key)
184 187 if _usermatch(ui, user, users)]
185 188 ui.debug('acl: %s enabled, %d entries for user %s\n' %
186 189 (key, len(pats), user))
187 190
188 191 if not repo:
189 192 if pats:
190 193 return lambda b: '*' in pats or b in pats
191 194 return lambda b: False
192 195
193 196 if pats:
194 197 return match.match(repo.root, '', pats)
195 198 return match.exact(repo.root, '', [])
196 199
197 200
198 201 def hook(ui, repo, hooktype, node=None, source=None, **kwargs):
199 202 if hooktype not in ['pretxnchangegroup', 'pretxncommit']:
200 203 raise util.Abort(_('config error - hook type "%s" cannot stop '
201 204 'incoming changesets nor commits') % hooktype)
202 205 if (hooktype == 'pretxnchangegroup' and
203 206 source not in ui.config('acl', 'sources', 'serve').split()):
204 207 ui.debug('acl: changes have source "%s" - skipping\n' % source)
205 208 return
206 209
207 210 user = None
208 211 if source == 'serve' and 'url' in kwargs:
209 212 url = kwargs['url'].split(':')
210 213 if url[0] == 'remote' and url[1].startswith('http'):
211 214 user = urllib.unquote(url[3])
212 215
213 216 if user is None:
214 217 user = getpass.getuser()
215 218
216 219 cfg = ui.config('acl', 'config')
217 220 if cfg:
218 221 ui.readconfig(cfg, sections = ['acl.groups', 'acl.allow.branches',
219 222 'acl.deny.branches', 'acl.allow', 'acl.deny'])
220 223
221 224 allowbranches = buildmatch(ui, None, user, 'acl.allow.branches')
222 225 denybranches = buildmatch(ui, None, user, 'acl.deny.branches')
223 226 allow = buildmatch(ui, repo, user, 'acl.allow')
224 227 deny = buildmatch(ui, repo, user, 'acl.deny')
225 228
226 229 for rev in xrange(repo[node], len(repo)):
227 230 ctx = repo[rev]
228 231 branch = ctx.branch()
229 232 if denybranches and denybranches(branch):
230 233 raise util.Abort(_('acl: user "%s" denied on branch "%s"'
231 234 ' (changeset "%s")')
232 235 % (user, branch, ctx))
233 236 if allowbranches and not allowbranches(branch):
234 237 raise util.Abort(_('acl: user "%s" not allowed on branch "%s"'
235 238 ' (changeset "%s")')
236 239 % (user, branch, ctx))
237 240 ui.debug('acl: branch access granted: "%s" on branch "%s"\n'
238 241 % (ctx, branch))
239 242
240 243 for f in ctx.files():
241 244 if deny and deny(f):
242 245 ui.debug('acl: user %s denied on %s\n' % (user, f))
243 246 raise util.Abort(_('acl: access denied for changeset %s') % ctx)
244 247 if allow and not allow(f):
245 248 ui.debug('acl: user %s not allowed on %s\n' % (user, f))
246 249 raise util.Abort(_('acl: access denied for changeset %s') % ctx)
247 250 ui.debug('acl: allowing changeset %s\n' % ctx)
@@ -1,168 +1,176
1 1 #!/bin/sh
2 2
3 3 do_push()
4 4 {
5 5 user=$1
6 6 shift
7 7
8 8 echo "Pushing as user $user"
9 9 echo 'hgrc = """'
10 10 sed -e 1,2d b/.hg/hgrc | grep -v fakegroups.py
11 11 echo '"""'
12 12 if test -f acl.config; then
13 13 echo 'acl.config = """'
14 14 cat acl.config
15 15 echo '"""'
16 16 fi
17 17 # On AIX /etc/profile sets LOGNAME read-only. So
18 18 # LOGNAME=$user hg --cws a --debug push ../b
19 19 # fails with "This variable is read only."
20 20 # Use env to work around this.
21 21 env LOGNAME=$user hg --cwd a --debug push ../b
22 22 hg --cwd b rollback
23 23 hg --cwd b --quiet tip
24 24 echo
25 25 }
26 26
27 27 init_config()
28 28 {
29 29 cat > fakegroups.py <<EOF
30 30 from hgext import acl
31 31 def fakegetusers(ui, group):
32 32 try:
33 33 return acl._getusersorig(ui, group)
34 34 except:
35 35 return ["fred", "betty"]
36 36 acl._getusersorig = acl._getusers
37 37 acl._getusers = fakegetusers
38 38 EOF
39 39
40 40 rm -f acl.config
41 41 cat > $config <<EOF
42 42 [hooks]
43 43 pretxnchangegroup.acl = python:hgext.acl.hook
44 44 [acl]
45 45 sources = push
46 46 [extensions]
47 47 f=$PWD/fakegroups.py
48 48 EOF
49 49 }
50 50
51 51 hg init a
52 52 cd a
53 53 mkdir foo foo/Bar quux
54 54 echo 'in foo' > foo/file.txt
55 55 echo 'in foo/Bar' > foo/Bar/file.txt
56 56 echo 'in quux' > quux/file.py
57 57 hg add -q
58 58 hg ci -m 'add files' -d '1000000 0'
59 59 echo >> foo/file.txt
60 60 hg ci -m 'change foo/file' -d '1000001 0'
61 61 echo >> foo/Bar/file.txt
62 62 hg ci -m 'change foo/Bar/file' -d '1000002 0'
63 63 echo >> quux/file.py
64 64 hg ci -m 'change quux/file' -d '1000003 0'
65 65 hg tip --quiet
66 66
67 67 cd ..
68 68 hg clone -r 0 a b
69 69
70 70 echo '[extensions]' >> $HGRCPATH
71 71 echo 'acl =' >> $HGRCPATH
72 72
73 73 config=b/.hg/hgrc
74 74
75 75 echo
76 76
77 77 echo 'Extension disabled for lack of a hook'
78 78 do_push fred
79 79
80 80 echo '[hooks]' >> $config
81 81 echo 'pretxnchangegroup.acl = python:hgext.acl.hook' >> $config
82 82
83 83 echo 'Extension disabled for lack of acl.sources'
84 84 do_push fred
85 85
86 86 echo 'No [acl.allow]/[acl.deny]'
87 87 echo '[acl]' >> $config
88 88 echo 'sources = push' >> $config
89 89 do_push fred
90 90
91 91 echo 'Empty [acl.allow]'
92 92 echo '[acl.allow]' >> $config
93 93 do_push fred
94 94
95 95 echo 'fred is allowed inside foo/'
96 96 echo 'foo/** = fred' >> $config
97 97 do_push fred
98 98
99 99 echo 'Empty [acl.deny]'
100 100 echo '[acl.deny]' >> $config
101 101 do_push barney
102 102
103 103 echo 'fred is allowed inside foo/, but not foo/bar/ (case matters)'
104 104 echo 'foo/bar/** = fred' >> $config
105 105 do_push fred
106 106
107 107 echo 'fred is allowed inside foo/, but not foo/Bar/'
108 108 echo 'foo/Bar/** = fred' >> $config
109 109 do_push fred
110 110
111 111 echo 'barney is not mentioned => not allowed anywhere'
112 112 do_push barney
113 113
114 114 echo 'barney is allowed everywhere'
115 115 echo '[acl.allow]' >> $config
116 116 echo '** = barney' >> $config
117 117 do_push barney
118 118
119 119 echo 'wilma can change files with a .txt extension'
120 120 echo '**/*.txt = wilma' >> $config
121 121 do_push wilma
122 122
123 123 echo 'file specified by acl.config does not exist'
124 124 echo '[acl]' >> $config
125 125 echo 'config = ../acl.config' >> $config
126 126 do_push barney
127 127
128 128 echo 'betty is allowed inside foo/ by a acl.config file'
129 129 echo '[acl.allow]' >> acl.config
130 130 echo 'foo/** = betty' >> acl.config
131 131 do_push betty
132 132
133 133 echo 'acl.config can set only [acl.allow]/[acl.deny]'
134 134 echo '[hooks]' >> acl.config
135 135 echo 'changegroup.acl = false' >> acl.config
136 136 do_push barney
137 137
138 138 # asterisk
139 139
140 140 init_config
141 141
142 142 echo 'asterisk test'
143 143 echo '[acl.allow]' >> $config
144 144 echo "** = fred" >> $config
145 145 echo "fred is always allowed"
146 146 do_push fred
147 147
148 148 echo '[acl.deny]' >> $config
149 149 echo "foo/Bar/** = *" >> $config
150 150 echo "no one is allowed inside foo/Bar/"
151 151 do_push fred
152 152
153 153 # Groups
154 154
155 155 init_config
156 156
157 157 echo 'OS-level groups'
158 158 echo '[acl.allow]' >> $config
159 159 echo "** = @group1" >> $config
160 160 echo "@group1 is always allowed"
161 161 do_push fred
162 162
163 163 echo '[acl.deny]' >> $config
164 164 echo "foo/Bar/** = @group1" >> $config
165 165 echo "@group is allowed inside anything but foo/Bar/"
166 166 do_push fred
167 167
168 echo 'Invalid group'
169 # Disable the fakegroups trick to get real failures
170 grep -v fakegroups $config > config.tmp
171 mv config.tmp $config
172 echo '[acl.allow]' >> $config
173 echo "** = @unlikelytoexist" >> $config
174 do_push fred 2>&1 | grep unlikelytoexist
168 175
176 true
@@ -1,1559 +1,1564
1 1 3:911600dab2ae
2 2 requesting all changes
3 3 adding changesets
4 4 adding manifests
5 5 adding file changes
6 6 added 1 changesets with 3 changes to 3 files
7 7 updating to branch default
8 8 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
9 9
10 10 Extension disabled for lack of a hook
11 11 Pushing as user fred
12 12 hgrc = """
13 13 """
14 14 pushing to ../b
15 15 searching for changes
16 16 common changesets up to 6675d58eff77
17 17 3 changesets found
18 18 list of changesets:
19 19 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
20 20 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
21 21 911600dab2ae7a9baff75958b84fe606851ce955
22 22 adding changesets
23 23 bundling changes: 0 chunks
24 24 bundling changes: 1 chunks
25 25 bundling changes: 2 chunks
26 26 bundling changes: 3 chunks
27 27 bundling changes: 4 chunks
28 28 bundling changes: 5 chunks
29 29 bundling changes: 6 chunks
30 30 bundling changes: 7 chunks
31 31 bundling changes: 8 chunks
32 32 bundling changes: 9 chunks
33 33 bundling manifests: 0 chunks
34 34 bundling manifests: 1 chunks
35 35 bundling manifests: 2 chunks
36 36 bundling manifests: 3 chunks
37 37 bundling manifests: 4 chunks
38 38 bundling manifests: 5 chunks
39 39 bundling manifests: 6 chunks
40 40 bundling manifests: 7 chunks
41 41 bundling manifests: 8 chunks
42 42 bundling manifests: 9 chunks
43 43 bundling files: foo/Bar/file.txt 0 chunks
44 44 bundling files: foo/Bar/file.txt 1 chunks
45 45 bundling files: foo/Bar/file.txt 2 chunks
46 46 bundling files: foo/Bar/file.txt 3 chunks
47 47 bundling files: foo/file.txt 4 chunks
48 48 bundling files: foo/file.txt 5 chunks
49 49 bundling files: foo/file.txt 6 chunks
50 50 bundling files: foo/file.txt 7 chunks
51 51 bundling files: quux/file.py 8 chunks
52 52 bundling files: quux/file.py 9 chunks
53 53 bundling files: quux/file.py 10 chunks
54 54 bundling files: quux/file.py 11 chunks
55 55 changesets: 1 chunks
56 56 add changeset ef1ea85a6374
57 57 changesets: 2 chunks
58 58 add changeset f9cafe1212c8
59 59 changesets: 3 chunks
60 60 add changeset 911600dab2ae
61 61 adding manifests
62 62 manifests: 1/3 chunks (33.33%)
63 63 manifests: 2/3 chunks (66.67%)
64 64 manifests: 3/3 chunks (100.00%)
65 65 adding file changes
66 66 adding foo/Bar/file.txt revisions
67 67 files: 1/3 chunks (33.33%)
68 68 adding foo/file.txt revisions
69 69 files: 2/3 chunks (66.67%)
70 70 adding quux/file.py revisions
71 71 files: 3/3 chunks (100.00%)
72 72 added 3 changesets with 3 changes to 3 files
73 73 updating the branch cache
74 74 rolling back to revision 1 (undo push)
75 75 0:6675d58eff77
76 76
77 77 Extension disabled for lack of acl.sources
78 78 Pushing as user fred
79 79 hgrc = """
80 80 [hooks]
81 81 pretxnchangegroup.acl = python:hgext.acl.hook
82 82 """
83 83 pushing to ../b
84 84 searching for changes
85 85 common changesets up to 6675d58eff77
86 86 invalidating branch cache (tip differs)
87 87 3 changesets found
88 88 list of changesets:
89 89 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
90 90 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
91 91 911600dab2ae7a9baff75958b84fe606851ce955
92 92 adding changesets
93 93 bundling changes: 0 chunks
94 94 bundling changes: 1 chunks
95 95 bundling changes: 2 chunks
96 96 bundling changes: 3 chunks
97 97 bundling changes: 4 chunks
98 98 bundling changes: 5 chunks
99 99 bundling changes: 6 chunks
100 100 bundling changes: 7 chunks
101 101 bundling changes: 8 chunks
102 102 bundling changes: 9 chunks
103 103 bundling manifests: 0 chunks
104 104 bundling manifests: 1 chunks
105 105 bundling manifests: 2 chunks
106 106 bundling manifests: 3 chunks
107 107 bundling manifests: 4 chunks
108 108 bundling manifests: 5 chunks
109 109 bundling manifests: 6 chunks
110 110 bundling manifests: 7 chunks
111 111 bundling manifests: 8 chunks
112 112 bundling manifests: 9 chunks
113 113 bundling files: foo/Bar/file.txt 0 chunks
114 114 bundling files: foo/Bar/file.txt 1 chunks
115 115 bundling files: foo/Bar/file.txt 2 chunks
116 116 bundling files: foo/Bar/file.txt 3 chunks
117 117 bundling files: foo/file.txt 4 chunks
118 118 bundling files: foo/file.txt 5 chunks
119 119 bundling files: foo/file.txt 6 chunks
120 120 bundling files: foo/file.txt 7 chunks
121 121 bundling files: quux/file.py 8 chunks
122 122 bundling files: quux/file.py 9 chunks
123 123 bundling files: quux/file.py 10 chunks
124 124 bundling files: quux/file.py 11 chunks
125 125 changesets: 1 chunks
126 126 add changeset ef1ea85a6374
127 127 changesets: 2 chunks
128 128 add changeset f9cafe1212c8
129 129 changesets: 3 chunks
130 130 add changeset 911600dab2ae
131 131 adding manifests
132 132 manifests: 1/3 chunks (33.33%)
133 133 manifests: 2/3 chunks (66.67%)
134 134 manifests: 3/3 chunks (100.00%)
135 135 adding file changes
136 136 adding foo/Bar/file.txt revisions
137 137 files: 1/3 chunks (33.33%)
138 138 adding foo/file.txt revisions
139 139 files: 2/3 chunks (66.67%)
140 140 adding quux/file.py revisions
141 141 files: 3/3 chunks (100.00%)
142 142 added 3 changesets with 3 changes to 3 files
143 143 calling hook pretxnchangegroup.acl: hgext.acl.hook
144 144 acl: changes have source "push" - skipping
145 145 updating the branch cache
146 146 rolling back to revision 1 (undo push)
147 147 0:6675d58eff77
148 148
149 149 No [acl.allow]/[acl.deny]
150 150 Pushing as user fred
151 151 hgrc = """
152 152 [hooks]
153 153 pretxnchangegroup.acl = python:hgext.acl.hook
154 154 [acl]
155 155 sources = push
156 156 """
157 157 pushing to ../b
158 158 searching for changes
159 159 common changesets up to 6675d58eff77
160 160 invalidating branch cache (tip differs)
161 161 3 changesets found
162 162 list of changesets:
163 163 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
164 164 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
165 165 911600dab2ae7a9baff75958b84fe606851ce955
166 166 adding changesets
167 167 bundling changes: 0 chunks
168 168 bundling changes: 1 chunks
169 169 bundling changes: 2 chunks
170 170 bundling changes: 3 chunks
171 171 bundling changes: 4 chunks
172 172 bundling changes: 5 chunks
173 173 bundling changes: 6 chunks
174 174 bundling changes: 7 chunks
175 175 bundling changes: 8 chunks
176 176 bundling changes: 9 chunks
177 177 bundling manifests: 0 chunks
178 178 bundling manifests: 1 chunks
179 179 bundling manifests: 2 chunks
180 180 bundling manifests: 3 chunks
181 181 bundling manifests: 4 chunks
182 182 bundling manifests: 5 chunks
183 183 bundling manifests: 6 chunks
184 184 bundling manifests: 7 chunks
185 185 bundling manifests: 8 chunks
186 186 bundling manifests: 9 chunks
187 187 bundling files: foo/Bar/file.txt 0 chunks
188 188 bundling files: foo/Bar/file.txt 1 chunks
189 189 bundling files: foo/Bar/file.txt 2 chunks
190 190 bundling files: foo/Bar/file.txt 3 chunks
191 191 bundling files: foo/file.txt 4 chunks
192 192 bundling files: foo/file.txt 5 chunks
193 193 bundling files: foo/file.txt 6 chunks
194 194 bundling files: foo/file.txt 7 chunks
195 195 bundling files: quux/file.py 8 chunks
196 196 bundling files: quux/file.py 9 chunks
197 197 bundling files: quux/file.py 10 chunks
198 198 bundling files: quux/file.py 11 chunks
199 199 changesets: 1 chunks
200 200 add changeset ef1ea85a6374
201 201 changesets: 2 chunks
202 202 add changeset f9cafe1212c8
203 203 changesets: 3 chunks
204 204 add changeset 911600dab2ae
205 205 adding manifests
206 206 manifests: 1/3 chunks (33.33%)
207 207 manifests: 2/3 chunks (66.67%)
208 208 manifests: 3/3 chunks (100.00%)
209 209 adding file changes
210 210 adding foo/Bar/file.txt revisions
211 211 files: 1/3 chunks (33.33%)
212 212 adding foo/file.txt revisions
213 213 files: 2/3 chunks (66.67%)
214 214 adding quux/file.py revisions
215 215 files: 3/3 chunks (100.00%)
216 216 added 3 changesets with 3 changes to 3 files
217 217 calling hook pretxnchangegroup.acl: hgext.acl.hook
218 218 acl: acl.allow.branches not enabled
219 219 acl: acl.deny.branches not enabled
220 220 acl: acl.allow not enabled
221 221 acl: acl.deny not enabled
222 222 acl: branch access granted: "ef1ea85a6374" on branch "default"
223 223 acl: allowing changeset ef1ea85a6374
224 224 acl: branch access granted: "f9cafe1212c8" on branch "default"
225 225 acl: allowing changeset f9cafe1212c8
226 226 acl: branch access granted: "911600dab2ae" on branch "default"
227 227 acl: allowing changeset 911600dab2ae
228 228 updating the branch cache
229 229 rolling back to revision 1 (undo push)
230 230 0:6675d58eff77
231 231
232 232 Empty [acl.allow]
233 233 Pushing as user fred
234 234 hgrc = """
235 235 [hooks]
236 236 pretxnchangegroup.acl = python:hgext.acl.hook
237 237 [acl]
238 238 sources = push
239 239 [acl.allow]
240 240 """
241 241 pushing to ../b
242 242 searching for changes
243 243 common changesets up to 6675d58eff77
244 244 invalidating branch cache (tip differs)
245 245 3 changesets found
246 246 list of changesets:
247 247 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
248 248 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
249 249 911600dab2ae7a9baff75958b84fe606851ce955
250 250 adding changesets
251 251 bundling changes: 0 chunks
252 252 bundling changes: 1 chunks
253 253 bundling changes: 2 chunks
254 254 bundling changes: 3 chunks
255 255 bundling changes: 4 chunks
256 256 bundling changes: 5 chunks
257 257 bundling changes: 6 chunks
258 258 bundling changes: 7 chunks
259 259 bundling changes: 8 chunks
260 260 bundling changes: 9 chunks
261 261 bundling manifests: 0 chunks
262 262 bundling manifests: 1 chunks
263 263 bundling manifests: 2 chunks
264 264 bundling manifests: 3 chunks
265 265 bundling manifests: 4 chunks
266 266 bundling manifests: 5 chunks
267 267 bundling manifests: 6 chunks
268 268 bundling manifests: 7 chunks
269 269 bundling manifests: 8 chunks
270 270 bundling manifests: 9 chunks
271 271 bundling files: foo/Bar/file.txt 0 chunks
272 272 bundling files: foo/Bar/file.txt 1 chunks
273 273 bundling files: foo/Bar/file.txt 2 chunks
274 274 bundling files: foo/Bar/file.txt 3 chunks
275 275 bundling files: foo/file.txt 4 chunks
276 276 bundling files: foo/file.txt 5 chunks
277 277 bundling files: foo/file.txt 6 chunks
278 278 bundling files: foo/file.txt 7 chunks
279 279 bundling files: quux/file.py 8 chunks
280 280 bundling files: quux/file.py 9 chunks
281 281 bundling files: quux/file.py 10 chunks
282 282 bundling files: quux/file.py 11 chunks
283 283 changesets: 1 chunks
284 284 add changeset ef1ea85a6374
285 285 changesets: 2 chunks
286 286 add changeset f9cafe1212c8
287 287 changesets: 3 chunks
288 288 add changeset 911600dab2ae
289 289 adding manifests
290 290 manifests: 1/3 chunks (33.33%)
291 291 manifests: 2/3 chunks (66.67%)
292 292 manifests: 3/3 chunks (100.00%)
293 293 adding file changes
294 294 adding foo/Bar/file.txt revisions
295 295 files: 1/3 chunks (33.33%)
296 296 adding foo/file.txt revisions
297 297 files: 2/3 chunks (66.67%)
298 298 adding quux/file.py revisions
299 299 files: 3/3 chunks (100.00%)
300 300 added 3 changesets with 3 changes to 3 files
301 301 calling hook pretxnchangegroup.acl: hgext.acl.hook
302 302 acl: acl.allow.branches not enabled
303 303 acl: acl.deny.branches not enabled
304 304 acl: acl.allow enabled, 0 entries for user fred
305 305 acl: acl.deny not enabled
306 306 acl: branch access granted: "ef1ea85a6374" on branch "default"
307 307 acl: user fred not allowed on foo/file.txt
308 308 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
309 309 transaction abort!
310 310 rollback completed
311 311 abort: acl: access denied for changeset ef1ea85a6374
312 312 no rollback information available
313 313 0:6675d58eff77
314 314
315 315 fred is allowed inside foo/
316 316 Pushing as user fred
317 317 hgrc = """
318 318 [hooks]
319 319 pretxnchangegroup.acl = python:hgext.acl.hook
320 320 [acl]
321 321 sources = push
322 322 [acl.allow]
323 323 foo/** = fred
324 324 """
325 325 pushing to ../b
326 326 searching for changes
327 327 common changesets up to 6675d58eff77
328 328 3 changesets found
329 329 list of changesets:
330 330 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
331 331 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
332 332 911600dab2ae7a9baff75958b84fe606851ce955
333 333 adding changesets
334 334 bundling changes: 0 chunks
335 335 bundling changes: 1 chunks
336 336 bundling changes: 2 chunks
337 337 bundling changes: 3 chunks
338 338 bundling changes: 4 chunks
339 339 bundling changes: 5 chunks
340 340 bundling changes: 6 chunks
341 341 bundling changes: 7 chunks
342 342 bundling changes: 8 chunks
343 343 bundling changes: 9 chunks
344 344 bundling manifests: 0 chunks
345 345 bundling manifests: 1 chunks
346 346 bundling manifests: 2 chunks
347 347 bundling manifests: 3 chunks
348 348 bundling manifests: 4 chunks
349 349 bundling manifests: 5 chunks
350 350 bundling manifests: 6 chunks
351 351 bundling manifests: 7 chunks
352 352 bundling manifests: 8 chunks
353 353 bundling manifests: 9 chunks
354 354 bundling files: foo/Bar/file.txt 0 chunks
355 355 bundling files: foo/Bar/file.txt 1 chunks
356 356 bundling files: foo/Bar/file.txt 2 chunks
357 357 bundling files: foo/Bar/file.txt 3 chunks
358 358 bundling files: foo/file.txt 4 chunks
359 359 bundling files: foo/file.txt 5 chunks
360 360 bundling files: foo/file.txt 6 chunks
361 361 bundling files: foo/file.txt 7 chunks
362 362 bundling files: quux/file.py 8 chunks
363 363 bundling files: quux/file.py 9 chunks
364 364 bundling files: quux/file.py 10 chunks
365 365 bundling files: quux/file.py 11 chunks
366 366 changesets: 1 chunks
367 367 add changeset ef1ea85a6374
368 368 changesets: 2 chunks
369 369 add changeset f9cafe1212c8
370 370 changesets: 3 chunks
371 371 add changeset 911600dab2ae
372 372 adding manifests
373 373 manifests: 1/3 chunks (33.33%)
374 374 manifests: 2/3 chunks (66.67%)
375 375 manifests: 3/3 chunks (100.00%)
376 376 adding file changes
377 377 adding foo/Bar/file.txt revisions
378 378 files: 1/3 chunks (33.33%)
379 379 adding foo/file.txt revisions
380 380 files: 2/3 chunks (66.67%)
381 381 adding quux/file.py revisions
382 382 files: 3/3 chunks (100.00%)
383 383 added 3 changesets with 3 changes to 3 files
384 384 calling hook pretxnchangegroup.acl: hgext.acl.hook
385 385 acl: acl.allow.branches not enabled
386 386 acl: acl.deny.branches not enabled
387 387 acl: acl.allow enabled, 1 entries for user fred
388 388 acl: acl.deny not enabled
389 389 acl: branch access granted: "ef1ea85a6374" on branch "default"
390 390 acl: allowing changeset ef1ea85a6374
391 391 acl: branch access granted: "f9cafe1212c8" on branch "default"
392 392 acl: allowing changeset f9cafe1212c8
393 393 acl: branch access granted: "911600dab2ae" on branch "default"
394 394 acl: user fred not allowed on quux/file.py
395 395 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
396 396 transaction abort!
397 397 rollback completed
398 398 abort: acl: access denied for changeset 911600dab2ae
399 399 no rollback information available
400 400 0:6675d58eff77
401 401
402 402 Empty [acl.deny]
403 403 Pushing as user barney
404 404 hgrc = """
405 405 [hooks]
406 406 pretxnchangegroup.acl = python:hgext.acl.hook
407 407 [acl]
408 408 sources = push
409 409 [acl.allow]
410 410 foo/** = fred
411 411 [acl.deny]
412 412 """
413 413 pushing to ../b
414 414 searching for changes
415 415 common changesets up to 6675d58eff77
416 416 3 changesets found
417 417 list of changesets:
418 418 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
419 419 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
420 420 911600dab2ae7a9baff75958b84fe606851ce955
421 421 adding changesets
422 422 bundling changes: 0 chunks
423 423 bundling changes: 1 chunks
424 424 bundling changes: 2 chunks
425 425 bundling changes: 3 chunks
426 426 bundling changes: 4 chunks
427 427 bundling changes: 5 chunks
428 428 bundling changes: 6 chunks
429 429 bundling changes: 7 chunks
430 430 bundling changes: 8 chunks
431 431 bundling changes: 9 chunks
432 432 bundling manifests: 0 chunks
433 433 bundling manifests: 1 chunks
434 434 bundling manifests: 2 chunks
435 435 bundling manifests: 3 chunks
436 436 bundling manifests: 4 chunks
437 437 bundling manifests: 5 chunks
438 438 bundling manifests: 6 chunks
439 439 bundling manifests: 7 chunks
440 440 bundling manifests: 8 chunks
441 441 bundling manifests: 9 chunks
442 442 bundling files: foo/Bar/file.txt 0 chunks
443 443 bundling files: foo/Bar/file.txt 1 chunks
444 444 bundling files: foo/Bar/file.txt 2 chunks
445 445 bundling files: foo/Bar/file.txt 3 chunks
446 446 bundling files: foo/file.txt 4 chunks
447 447 bundling files: foo/file.txt 5 chunks
448 448 bundling files: foo/file.txt 6 chunks
449 449 bundling files: foo/file.txt 7 chunks
450 450 bundling files: quux/file.py 8 chunks
451 451 bundling files: quux/file.py 9 chunks
452 452 bundling files: quux/file.py 10 chunks
453 453 bundling files: quux/file.py 11 chunks
454 454 changesets: 1 chunks
455 455 add changeset ef1ea85a6374
456 456 changesets: 2 chunks
457 457 add changeset f9cafe1212c8
458 458 changesets: 3 chunks
459 459 add changeset 911600dab2ae
460 460 adding manifests
461 461 manifests: 1/3 chunks (33.33%)
462 462 manifests: 2/3 chunks (66.67%)
463 463 manifests: 3/3 chunks (100.00%)
464 464 adding file changes
465 465 adding foo/Bar/file.txt revisions
466 466 files: 1/3 chunks (33.33%)
467 467 adding foo/file.txt revisions
468 468 files: 2/3 chunks (66.67%)
469 469 adding quux/file.py revisions
470 470 files: 3/3 chunks (100.00%)
471 471 added 3 changesets with 3 changes to 3 files
472 472 calling hook pretxnchangegroup.acl: hgext.acl.hook
473 473 acl: acl.allow.branches not enabled
474 474 acl: acl.deny.branches not enabled
475 475 acl: acl.allow enabled, 0 entries for user barney
476 476 acl: acl.deny enabled, 0 entries for user barney
477 477 acl: branch access granted: "ef1ea85a6374" on branch "default"
478 478 acl: user barney not allowed on foo/file.txt
479 479 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
480 480 transaction abort!
481 481 rollback completed
482 482 abort: acl: access denied for changeset ef1ea85a6374
483 483 no rollback information available
484 484 0:6675d58eff77
485 485
486 486 fred is allowed inside foo/, but not foo/bar/ (case matters)
487 487 Pushing as user fred
488 488 hgrc = """
489 489 [hooks]
490 490 pretxnchangegroup.acl = python:hgext.acl.hook
491 491 [acl]
492 492 sources = push
493 493 [acl.allow]
494 494 foo/** = fred
495 495 [acl.deny]
496 496 foo/bar/** = fred
497 497 """
498 498 pushing to ../b
499 499 searching for changes
500 500 common changesets up to 6675d58eff77
501 501 3 changesets found
502 502 list of changesets:
503 503 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
504 504 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
505 505 911600dab2ae7a9baff75958b84fe606851ce955
506 506 adding changesets
507 507 bundling changes: 0 chunks
508 508 bundling changes: 1 chunks
509 509 bundling changes: 2 chunks
510 510 bundling changes: 3 chunks
511 511 bundling changes: 4 chunks
512 512 bundling changes: 5 chunks
513 513 bundling changes: 6 chunks
514 514 bundling changes: 7 chunks
515 515 bundling changes: 8 chunks
516 516 bundling changes: 9 chunks
517 517 bundling manifests: 0 chunks
518 518 bundling manifests: 1 chunks
519 519 bundling manifests: 2 chunks
520 520 bundling manifests: 3 chunks
521 521 bundling manifests: 4 chunks
522 522 bundling manifests: 5 chunks
523 523 bundling manifests: 6 chunks
524 524 bundling manifests: 7 chunks
525 525 bundling manifests: 8 chunks
526 526 bundling manifests: 9 chunks
527 527 bundling files: foo/Bar/file.txt 0 chunks
528 528 bundling files: foo/Bar/file.txt 1 chunks
529 529 bundling files: foo/Bar/file.txt 2 chunks
530 530 bundling files: foo/Bar/file.txt 3 chunks
531 531 bundling files: foo/file.txt 4 chunks
532 532 bundling files: foo/file.txt 5 chunks
533 533 bundling files: foo/file.txt 6 chunks
534 534 bundling files: foo/file.txt 7 chunks
535 535 bundling files: quux/file.py 8 chunks
536 536 bundling files: quux/file.py 9 chunks
537 537 bundling files: quux/file.py 10 chunks
538 538 bundling files: quux/file.py 11 chunks
539 539 changesets: 1 chunks
540 540 add changeset ef1ea85a6374
541 541 changesets: 2 chunks
542 542 add changeset f9cafe1212c8
543 543 changesets: 3 chunks
544 544 add changeset 911600dab2ae
545 545 adding manifests
546 546 manifests: 1/3 chunks (33.33%)
547 547 manifests: 2/3 chunks (66.67%)
548 548 manifests: 3/3 chunks (100.00%)
549 549 adding file changes
550 550 adding foo/Bar/file.txt revisions
551 551 files: 1/3 chunks (33.33%)
552 552 adding foo/file.txt revisions
553 553 files: 2/3 chunks (66.67%)
554 554 adding quux/file.py revisions
555 555 files: 3/3 chunks (100.00%)
556 556 added 3 changesets with 3 changes to 3 files
557 557 calling hook pretxnchangegroup.acl: hgext.acl.hook
558 558 acl: acl.allow.branches not enabled
559 559 acl: acl.deny.branches not enabled
560 560 acl: acl.allow enabled, 1 entries for user fred
561 561 acl: acl.deny enabled, 1 entries for user fred
562 562 acl: branch access granted: "ef1ea85a6374" on branch "default"
563 563 acl: allowing changeset ef1ea85a6374
564 564 acl: branch access granted: "f9cafe1212c8" on branch "default"
565 565 acl: allowing changeset f9cafe1212c8
566 566 acl: branch access granted: "911600dab2ae" on branch "default"
567 567 acl: user fred not allowed on quux/file.py
568 568 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
569 569 transaction abort!
570 570 rollback completed
571 571 abort: acl: access denied for changeset 911600dab2ae
572 572 no rollback information available
573 573 0:6675d58eff77
574 574
575 575 fred is allowed inside foo/, but not foo/Bar/
576 576 Pushing as user fred
577 577 hgrc = """
578 578 [hooks]
579 579 pretxnchangegroup.acl = python:hgext.acl.hook
580 580 [acl]
581 581 sources = push
582 582 [acl.allow]
583 583 foo/** = fred
584 584 [acl.deny]
585 585 foo/bar/** = fred
586 586 foo/Bar/** = fred
587 587 """
588 588 pushing to ../b
589 589 searching for changes
590 590 common changesets up to 6675d58eff77
591 591 3 changesets found
592 592 list of changesets:
593 593 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
594 594 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
595 595 911600dab2ae7a9baff75958b84fe606851ce955
596 596 adding changesets
597 597 bundling changes: 0 chunks
598 598 bundling changes: 1 chunks
599 599 bundling changes: 2 chunks
600 600 bundling changes: 3 chunks
601 601 bundling changes: 4 chunks
602 602 bundling changes: 5 chunks
603 603 bundling changes: 6 chunks
604 604 bundling changes: 7 chunks
605 605 bundling changes: 8 chunks
606 606 bundling changes: 9 chunks
607 607 bundling manifests: 0 chunks
608 608 bundling manifests: 1 chunks
609 609 bundling manifests: 2 chunks
610 610 bundling manifests: 3 chunks
611 611 bundling manifests: 4 chunks
612 612 bundling manifests: 5 chunks
613 613 bundling manifests: 6 chunks
614 614 bundling manifests: 7 chunks
615 615 bundling manifests: 8 chunks
616 616 bundling manifests: 9 chunks
617 617 bundling files: foo/Bar/file.txt 0 chunks
618 618 bundling files: foo/Bar/file.txt 1 chunks
619 619 bundling files: foo/Bar/file.txt 2 chunks
620 620 bundling files: foo/Bar/file.txt 3 chunks
621 621 bundling files: foo/file.txt 4 chunks
622 622 bundling files: foo/file.txt 5 chunks
623 623 bundling files: foo/file.txt 6 chunks
624 624 bundling files: foo/file.txt 7 chunks
625 625 bundling files: quux/file.py 8 chunks
626 626 bundling files: quux/file.py 9 chunks
627 627 bundling files: quux/file.py 10 chunks
628 628 bundling files: quux/file.py 11 chunks
629 629 changesets: 1 chunks
630 630 add changeset ef1ea85a6374
631 631 changesets: 2 chunks
632 632 add changeset f9cafe1212c8
633 633 changesets: 3 chunks
634 634 add changeset 911600dab2ae
635 635 adding manifests
636 636 manifests: 1/3 chunks (33.33%)
637 637 manifests: 2/3 chunks (66.67%)
638 638 manifests: 3/3 chunks (100.00%)
639 639 adding file changes
640 640 adding foo/Bar/file.txt revisions
641 641 files: 1/3 chunks (33.33%)
642 642 adding foo/file.txt revisions
643 643 files: 2/3 chunks (66.67%)
644 644 adding quux/file.py revisions
645 645 files: 3/3 chunks (100.00%)
646 646 added 3 changesets with 3 changes to 3 files
647 647 calling hook pretxnchangegroup.acl: hgext.acl.hook
648 648 acl: acl.allow.branches not enabled
649 649 acl: acl.deny.branches not enabled
650 650 acl: acl.allow enabled, 1 entries for user fred
651 651 acl: acl.deny enabled, 2 entries for user fred
652 652 acl: branch access granted: "ef1ea85a6374" on branch "default"
653 653 acl: allowing changeset ef1ea85a6374
654 654 acl: branch access granted: "f9cafe1212c8" on branch "default"
655 655 acl: user fred denied on foo/Bar/file.txt
656 656 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
657 657 transaction abort!
658 658 rollback completed
659 659 abort: acl: access denied for changeset f9cafe1212c8
660 660 no rollback information available
661 661 0:6675d58eff77
662 662
663 663 barney is not mentioned => not allowed anywhere
664 664 Pushing as user barney
665 665 hgrc = """
666 666 [hooks]
667 667 pretxnchangegroup.acl = python:hgext.acl.hook
668 668 [acl]
669 669 sources = push
670 670 [acl.allow]
671 671 foo/** = fred
672 672 [acl.deny]
673 673 foo/bar/** = fred
674 674 foo/Bar/** = fred
675 675 """
676 676 pushing to ../b
677 677 searching for changes
678 678 common changesets up to 6675d58eff77
679 679 3 changesets found
680 680 list of changesets:
681 681 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
682 682 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
683 683 911600dab2ae7a9baff75958b84fe606851ce955
684 684 adding changesets
685 685 bundling changes: 0 chunks
686 686 bundling changes: 1 chunks
687 687 bundling changes: 2 chunks
688 688 bundling changes: 3 chunks
689 689 bundling changes: 4 chunks
690 690 bundling changes: 5 chunks
691 691 bundling changes: 6 chunks
692 692 bundling changes: 7 chunks
693 693 bundling changes: 8 chunks
694 694 bundling changes: 9 chunks
695 695 bundling manifests: 0 chunks
696 696 bundling manifests: 1 chunks
697 697 bundling manifests: 2 chunks
698 698 bundling manifests: 3 chunks
699 699 bundling manifests: 4 chunks
700 700 bundling manifests: 5 chunks
701 701 bundling manifests: 6 chunks
702 702 bundling manifests: 7 chunks
703 703 bundling manifests: 8 chunks
704 704 bundling manifests: 9 chunks
705 705 bundling files: foo/Bar/file.txt 0 chunks
706 706 bundling files: foo/Bar/file.txt 1 chunks
707 707 bundling files: foo/Bar/file.txt 2 chunks
708 708 bundling files: foo/Bar/file.txt 3 chunks
709 709 bundling files: foo/file.txt 4 chunks
710 710 bundling files: foo/file.txt 5 chunks
711 711 bundling files: foo/file.txt 6 chunks
712 712 bundling files: foo/file.txt 7 chunks
713 713 bundling files: quux/file.py 8 chunks
714 714 bundling files: quux/file.py 9 chunks
715 715 bundling files: quux/file.py 10 chunks
716 716 bundling files: quux/file.py 11 chunks
717 717 changesets: 1 chunks
718 718 add changeset ef1ea85a6374
719 719 changesets: 2 chunks
720 720 add changeset f9cafe1212c8
721 721 changesets: 3 chunks
722 722 add changeset 911600dab2ae
723 723 adding manifests
724 724 manifests: 1/3 chunks (33.33%)
725 725 manifests: 2/3 chunks (66.67%)
726 726 manifests: 3/3 chunks (100.00%)
727 727 adding file changes
728 728 adding foo/Bar/file.txt revisions
729 729 files: 1/3 chunks (33.33%)
730 730 adding foo/file.txt revisions
731 731 files: 2/3 chunks (66.67%)
732 732 adding quux/file.py revisions
733 733 files: 3/3 chunks (100.00%)
734 734 added 3 changesets with 3 changes to 3 files
735 735 calling hook pretxnchangegroup.acl: hgext.acl.hook
736 736 acl: acl.allow.branches not enabled
737 737 acl: acl.deny.branches not enabled
738 738 acl: acl.allow enabled, 0 entries for user barney
739 739 acl: acl.deny enabled, 0 entries for user barney
740 740 acl: branch access granted: "ef1ea85a6374" on branch "default"
741 741 acl: user barney not allowed on foo/file.txt
742 742 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
743 743 transaction abort!
744 744 rollback completed
745 745 abort: acl: access denied for changeset ef1ea85a6374
746 746 no rollback information available
747 747 0:6675d58eff77
748 748
749 749 barney is allowed everywhere
750 750 Pushing as user barney
751 751 hgrc = """
752 752 [hooks]
753 753 pretxnchangegroup.acl = python:hgext.acl.hook
754 754 [acl]
755 755 sources = push
756 756 [acl.allow]
757 757 foo/** = fred
758 758 [acl.deny]
759 759 foo/bar/** = fred
760 760 foo/Bar/** = fred
761 761 [acl.allow]
762 762 ** = barney
763 763 """
764 764 pushing to ../b
765 765 searching for changes
766 766 common changesets up to 6675d58eff77
767 767 3 changesets found
768 768 list of changesets:
769 769 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
770 770 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
771 771 911600dab2ae7a9baff75958b84fe606851ce955
772 772 adding changesets
773 773 bundling changes: 0 chunks
774 774 bundling changes: 1 chunks
775 775 bundling changes: 2 chunks
776 776 bundling changes: 3 chunks
777 777 bundling changes: 4 chunks
778 778 bundling changes: 5 chunks
779 779 bundling changes: 6 chunks
780 780 bundling changes: 7 chunks
781 781 bundling changes: 8 chunks
782 782 bundling changes: 9 chunks
783 783 bundling manifests: 0 chunks
784 784 bundling manifests: 1 chunks
785 785 bundling manifests: 2 chunks
786 786 bundling manifests: 3 chunks
787 787 bundling manifests: 4 chunks
788 788 bundling manifests: 5 chunks
789 789 bundling manifests: 6 chunks
790 790 bundling manifests: 7 chunks
791 791 bundling manifests: 8 chunks
792 792 bundling manifests: 9 chunks
793 793 bundling files: foo/Bar/file.txt 0 chunks
794 794 bundling files: foo/Bar/file.txt 1 chunks
795 795 bundling files: foo/Bar/file.txt 2 chunks
796 796 bundling files: foo/Bar/file.txt 3 chunks
797 797 bundling files: foo/file.txt 4 chunks
798 798 bundling files: foo/file.txt 5 chunks
799 799 bundling files: foo/file.txt 6 chunks
800 800 bundling files: foo/file.txt 7 chunks
801 801 bundling files: quux/file.py 8 chunks
802 802 bundling files: quux/file.py 9 chunks
803 803 bundling files: quux/file.py 10 chunks
804 804 bundling files: quux/file.py 11 chunks
805 805 changesets: 1 chunks
806 806 add changeset ef1ea85a6374
807 807 changesets: 2 chunks
808 808 add changeset f9cafe1212c8
809 809 changesets: 3 chunks
810 810 add changeset 911600dab2ae
811 811 adding manifests
812 812 manifests: 1/3 chunks (33.33%)
813 813 manifests: 2/3 chunks (66.67%)
814 814 manifests: 3/3 chunks (100.00%)
815 815 adding file changes
816 816 adding foo/Bar/file.txt revisions
817 817 files: 1/3 chunks (33.33%)
818 818 adding foo/file.txt revisions
819 819 files: 2/3 chunks (66.67%)
820 820 adding quux/file.py revisions
821 821 files: 3/3 chunks (100.00%)
822 822 added 3 changesets with 3 changes to 3 files
823 823 calling hook pretxnchangegroup.acl: hgext.acl.hook
824 824 acl: acl.allow.branches not enabled
825 825 acl: acl.deny.branches not enabled
826 826 acl: acl.allow enabled, 1 entries for user barney
827 827 acl: acl.deny enabled, 0 entries for user barney
828 828 acl: branch access granted: "ef1ea85a6374" on branch "default"
829 829 acl: allowing changeset ef1ea85a6374
830 830 acl: branch access granted: "f9cafe1212c8" on branch "default"
831 831 acl: allowing changeset f9cafe1212c8
832 832 acl: branch access granted: "911600dab2ae" on branch "default"
833 833 acl: allowing changeset 911600dab2ae
834 834 updating the branch cache
835 835 rolling back to revision 1 (undo push)
836 836 0:6675d58eff77
837 837
838 838 wilma can change files with a .txt extension
839 839 Pushing as user wilma
840 840 hgrc = """
841 841 [hooks]
842 842 pretxnchangegroup.acl = python:hgext.acl.hook
843 843 [acl]
844 844 sources = push
845 845 [acl.allow]
846 846 foo/** = fred
847 847 [acl.deny]
848 848 foo/bar/** = fred
849 849 foo/Bar/** = fred
850 850 [acl.allow]
851 851 ** = barney
852 852 **/*.txt = wilma
853 853 """
854 854 pushing to ../b
855 855 searching for changes
856 856 common changesets up to 6675d58eff77
857 857 invalidating branch cache (tip differs)
858 858 3 changesets found
859 859 list of changesets:
860 860 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
861 861 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
862 862 911600dab2ae7a9baff75958b84fe606851ce955
863 863 adding changesets
864 864 bundling changes: 0 chunks
865 865 bundling changes: 1 chunks
866 866 bundling changes: 2 chunks
867 867 bundling changes: 3 chunks
868 868 bundling changes: 4 chunks
869 869 bundling changes: 5 chunks
870 870 bundling changes: 6 chunks
871 871 bundling changes: 7 chunks
872 872 bundling changes: 8 chunks
873 873 bundling changes: 9 chunks
874 874 bundling manifests: 0 chunks
875 875 bundling manifests: 1 chunks
876 876 bundling manifests: 2 chunks
877 877 bundling manifests: 3 chunks
878 878 bundling manifests: 4 chunks
879 879 bundling manifests: 5 chunks
880 880 bundling manifests: 6 chunks
881 881 bundling manifests: 7 chunks
882 882 bundling manifests: 8 chunks
883 883 bundling manifests: 9 chunks
884 884 bundling files: foo/Bar/file.txt 0 chunks
885 885 bundling files: foo/Bar/file.txt 1 chunks
886 886 bundling files: foo/Bar/file.txt 2 chunks
887 887 bundling files: foo/Bar/file.txt 3 chunks
888 888 bundling files: foo/file.txt 4 chunks
889 889 bundling files: foo/file.txt 5 chunks
890 890 bundling files: foo/file.txt 6 chunks
891 891 bundling files: foo/file.txt 7 chunks
892 892 bundling files: quux/file.py 8 chunks
893 893 bundling files: quux/file.py 9 chunks
894 894 bundling files: quux/file.py 10 chunks
895 895 bundling files: quux/file.py 11 chunks
896 896 changesets: 1 chunks
897 897 add changeset ef1ea85a6374
898 898 changesets: 2 chunks
899 899 add changeset f9cafe1212c8
900 900 changesets: 3 chunks
901 901 add changeset 911600dab2ae
902 902 adding manifests
903 903 manifests: 1/3 chunks (33.33%)
904 904 manifests: 2/3 chunks (66.67%)
905 905 manifests: 3/3 chunks (100.00%)
906 906 adding file changes
907 907 adding foo/Bar/file.txt revisions
908 908 files: 1/3 chunks (33.33%)
909 909 adding foo/file.txt revisions
910 910 files: 2/3 chunks (66.67%)
911 911 adding quux/file.py revisions
912 912 files: 3/3 chunks (100.00%)
913 913 added 3 changesets with 3 changes to 3 files
914 914 calling hook pretxnchangegroup.acl: hgext.acl.hook
915 915 acl: acl.allow.branches not enabled
916 916 acl: acl.deny.branches not enabled
917 917 acl: acl.allow enabled, 1 entries for user wilma
918 918 acl: acl.deny enabled, 0 entries for user wilma
919 919 acl: branch access granted: "ef1ea85a6374" on branch "default"
920 920 acl: allowing changeset ef1ea85a6374
921 921 acl: branch access granted: "f9cafe1212c8" on branch "default"
922 922 acl: allowing changeset f9cafe1212c8
923 923 acl: branch access granted: "911600dab2ae" on branch "default"
924 924 acl: user wilma not allowed on quux/file.py
925 925 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
926 926 transaction abort!
927 927 rollback completed
928 928 abort: acl: access denied for changeset 911600dab2ae
929 929 no rollback information available
930 930 0:6675d58eff77
931 931
932 932 file specified by acl.config does not exist
933 933 Pushing as user barney
934 934 hgrc = """
935 935 [hooks]
936 936 pretxnchangegroup.acl = python:hgext.acl.hook
937 937 [acl]
938 938 sources = push
939 939 [acl.allow]
940 940 foo/** = fred
941 941 [acl.deny]
942 942 foo/bar/** = fred
943 943 foo/Bar/** = fred
944 944 [acl.allow]
945 945 ** = barney
946 946 **/*.txt = wilma
947 947 [acl]
948 948 config = ../acl.config
949 949 """
950 950 pushing to ../b
951 951 searching for changes
952 952 common changesets up to 6675d58eff77
953 953 3 changesets found
954 954 list of changesets:
955 955 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
956 956 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
957 957 911600dab2ae7a9baff75958b84fe606851ce955
958 958 adding changesets
959 959 bundling changes: 0 chunks
960 960 bundling changes: 1 chunks
961 961 bundling changes: 2 chunks
962 962 bundling changes: 3 chunks
963 963 bundling changes: 4 chunks
964 964 bundling changes: 5 chunks
965 965 bundling changes: 6 chunks
966 966 bundling changes: 7 chunks
967 967 bundling changes: 8 chunks
968 968 bundling changes: 9 chunks
969 969 bundling manifests: 0 chunks
970 970 bundling manifests: 1 chunks
971 971 bundling manifests: 2 chunks
972 972 bundling manifests: 3 chunks
973 973 bundling manifests: 4 chunks
974 974 bundling manifests: 5 chunks
975 975 bundling manifests: 6 chunks
976 976 bundling manifests: 7 chunks
977 977 bundling manifests: 8 chunks
978 978 bundling manifests: 9 chunks
979 979 bundling files: foo/Bar/file.txt 0 chunks
980 980 bundling files: foo/Bar/file.txt 1 chunks
981 981 bundling files: foo/Bar/file.txt 2 chunks
982 982 bundling files: foo/Bar/file.txt 3 chunks
983 983 bundling files: foo/file.txt 4 chunks
984 984 bundling files: foo/file.txt 5 chunks
985 985 bundling files: foo/file.txt 6 chunks
986 986 bundling files: foo/file.txt 7 chunks
987 987 bundling files: quux/file.py 8 chunks
988 988 bundling files: quux/file.py 9 chunks
989 989 bundling files: quux/file.py 10 chunks
990 990 bundling files: quux/file.py 11 chunks
991 991 changesets: 1 chunks
992 992 add changeset ef1ea85a6374
993 993 changesets: 2 chunks
994 994 add changeset f9cafe1212c8
995 995 changesets: 3 chunks
996 996 add changeset 911600dab2ae
997 997 adding manifests
998 998 manifests: 1/3 chunks (33.33%)
999 999 manifests: 2/3 chunks (66.67%)
1000 1000 manifests: 3/3 chunks (100.00%)
1001 1001 adding file changes
1002 1002 adding foo/Bar/file.txt revisions
1003 1003 files: 1/3 chunks (33.33%)
1004 1004 adding foo/file.txt revisions
1005 1005 files: 2/3 chunks (66.67%)
1006 1006 adding quux/file.py revisions
1007 1007 files: 3/3 chunks (100.00%)
1008 1008 added 3 changesets with 3 changes to 3 files
1009 1009 calling hook pretxnchangegroup.acl: hgext.acl.hook
1010 1010 error: pretxnchangegroup.acl hook raised an exception: [Errno 2] No such file or directory: '../acl.config'
1011 1011 transaction abort!
1012 1012 rollback completed
1013 1013 abort: No such file or directory: ../acl.config
1014 1014 no rollback information available
1015 1015 0:6675d58eff77
1016 1016
1017 1017 betty is allowed inside foo/ by a acl.config file
1018 1018 Pushing as user betty
1019 1019 hgrc = """
1020 1020 [hooks]
1021 1021 pretxnchangegroup.acl = python:hgext.acl.hook
1022 1022 [acl]
1023 1023 sources = push
1024 1024 [acl.allow]
1025 1025 foo/** = fred
1026 1026 [acl.deny]
1027 1027 foo/bar/** = fred
1028 1028 foo/Bar/** = fred
1029 1029 [acl.allow]
1030 1030 ** = barney
1031 1031 **/*.txt = wilma
1032 1032 [acl]
1033 1033 config = ../acl.config
1034 1034 """
1035 1035 acl.config = """
1036 1036 [acl.allow]
1037 1037 foo/** = betty
1038 1038 """
1039 1039 pushing to ../b
1040 1040 searching for changes
1041 1041 common changesets up to 6675d58eff77
1042 1042 3 changesets found
1043 1043 list of changesets:
1044 1044 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1045 1045 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1046 1046 911600dab2ae7a9baff75958b84fe606851ce955
1047 1047 adding changesets
1048 1048 bundling changes: 0 chunks
1049 1049 bundling changes: 1 chunks
1050 1050 bundling changes: 2 chunks
1051 1051 bundling changes: 3 chunks
1052 1052 bundling changes: 4 chunks
1053 1053 bundling changes: 5 chunks
1054 1054 bundling changes: 6 chunks
1055 1055 bundling changes: 7 chunks
1056 1056 bundling changes: 8 chunks
1057 1057 bundling changes: 9 chunks
1058 1058 bundling manifests: 0 chunks
1059 1059 bundling manifests: 1 chunks
1060 1060 bundling manifests: 2 chunks
1061 1061 bundling manifests: 3 chunks
1062 1062 bundling manifests: 4 chunks
1063 1063 bundling manifests: 5 chunks
1064 1064 bundling manifests: 6 chunks
1065 1065 bundling manifests: 7 chunks
1066 1066 bundling manifests: 8 chunks
1067 1067 bundling manifests: 9 chunks
1068 1068 bundling files: foo/Bar/file.txt 0 chunks
1069 1069 bundling files: foo/Bar/file.txt 1 chunks
1070 1070 bundling files: foo/Bar/file.txt 2 chunks
1071 1071 bundling files: foo/Bar/file.txt 3 chunks
1072 1072 bundling files: foo/file.txt 4 chunks
1073 1073 bundling files: foo/file.txt 5 chunks
1074 1074 bundling files: foo/file.txt 6 chunks
1075 1075 bundling files: foo/file.txt 7 chunks
1076 1076 bundling files: quux/file.py 8 chunks
1077 1077 bundling files: quux/file.py 9 chunks
1078 1078 bundling files: quux/file.py 10 chunks
1079 1079 bundling files: quux/file.py 11 chunks
1080 1080 changesets: 1 chunks
1081 1081 add changeset ef1ea85a6374
1082 1082 changesets: 2 chunks
1083 1083 add changeset f9cafe1212c8
1084 1084 changesets: 3 chunks
1085 1085 add changeset 911600dab2ae
1086 1086 adding manifests
1087 1087 manifests: 1/3 chunks (33.33%)
1088 1088 manifests: 2/3 chunks (66.67%)
1089 1089 manifests: 3/3 chunks (100.00%)
1090 1090 adding file changes
1091 1091 adding foo/Bar/file.txt revisions
1092 1092 files: 1/3 chunks (33.33%)
1093 1093 adding foo/file.txt revisions
1094 1094 files: 2/3 chunks (66.67%)
1095 1095 adding quux/file.py revisions
1096 1096 files: 3/3 chunks (100.00%)
1097 1097 added 3 changesets with 3 changes to 3 files
1098 1098 calling hook pretxnchangegroup.acl: hgext.acl.hook
1099 1099 acl: acl.allow.branches not enabled
1100 1100 acl: acl.deny.branches not enabled
1101 1101 acl: acl.allow enabled, 1 entries for user betty
1102 1102 acl: acl.deny enabled, 0 entries for user betty
1103 1103 acl: branch access granted: "ef1ea85a6374" on branch "default"
1104 1104 acl: allowing changeset ef1ea85a6374
1105 1105 acl: branch access granted: "f9cafe1212c8" on branch "default"
1106 1106 acl: allowing changeset f9cafe1212c8
1107 1107 acl: branch access granted: "911600dab2ae" on branch "default"
1108 1108 acl: user betty not allowed on quux/file.py
1109 1109 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
1110 1110 transaction abort!
1111 1111 rollback completed
1112 1112 abort: acl: access denied for changeset 911600dab2ae
1113 1113 no rollback information available
1114 1114 0:6675d58eff77
1115 1115
1116 1116 acl.config can set only [acl.allow]/[acl.deny]
1117 1117 Pushing as user barney
1118 1118 hgrc = """
1119 1119 [hooks]
1120 1120 pretxnchangegroup.acl = python:hgext.acl.hook
1121 1121 [acl]
1122 1122 sources = push
1123 1123 [acl.allow]
1124 1124 foo/** = fred
1125 1125 [acl.deny]
1126 1126 foo/bar/** = fred
1127 1127 foo/Bar/** = fred
1128 1128 [acl.allow]
1129 1129 ** = barney
1130 1130 **/*.txt = wilma
1131 1131 [acl]
1132 1132 config = ../acl.config
1133 1133 """
1134 1134 acl.config = """
1135 1135 [acl.allow]
1136 1136 foo/** = betty
1137 1137 [hooks]
1138 1138 changegroup.acl = false
1139 1139 """
1140 1140 pushing to ../b
1141 1141 searching for changes
1142 1142 common changesets up to 6675d58eff77
1143 1143 3 changesets found
1144 1144 list of changesets:
1145 1145 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1146 1146 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1147 1147 911600dab2ae7a9baff75958b84fe606851ce955
1148 1148 adding changesets
1149 1149 bundling changes: 0 chunks
1150 1150 bundling changes: 1 chunks
1151 1151 bundling changes: 2 chunks
1152 1152 bundling changes: 3 chunks
1153 1153 bundling changes: 4 chunks
1154 1154 bundling changes: 5 chunks
1155 1155 bundling changes: 6 chunks
1156 1156 bundling changes: 7 chunks
1157 1157 bundling changes: 8 chunks
1158 1158 bundling changes: 9 chunks
1159 1159 bundling manifests: 0 chunks
1160 1160 bundling manifests: 1 chunks
1161 1161 bundling manifests: 2 chunks
1162 1162 bundling manifests: 3 chunks
1163 1163 bundling manifests: 4 chunks
1164 1164 bundling manifests: 5 chunks
1165 1165 bundling manifests: 6 chunks
1166 1166 bundling manifests: 7 chunks
1167 1167 bundling manifests: 8 chunks
1168 1168 bundling manifests: 9 chunks
1169 1169 bundling files: foo/Bar/file.txt 0 chunks
1170 1170 bundling files: foo/Bar/file.txt 1 chunks
1171 1171 bundling files: foo/Bar/file.txt 2 chunks
1172 1172 bundling files: foo/Bar/file.txt 3 chunks
1173 1173 bundling files: foo/file.txt 4 chunks
1174 1174 bundling files: foo/file.txt 5 chunks
1175 1175 bundling files: foo/file.txt 6 chunks
1176 1176 bundling files: foo/file.txt 7 chunks
1177 1177 bundling files: quux/file.py 8 chunks
1178 1178 bundling files: quux/file.py 9 chunks
1179 1179 bundling files: quux/file.py 10 chunks
1180 1180 bundling files: quux/file.py 11 chunks
1181 1181 changesets: 1 chunks
1182 1182 add changeset ef1ea85a6374
1183 1183 changesets: 2 chunks
1184 1184 add changeset f9cafe1212c8
1185 1185 changesets: 3 chunks
1186 1186 add changeset 911600dab2ae
1187 1187 adding manifests
1188 1188 manifests: 1/3 chunks (33.33%)
1189 1189 manifests: 2/3 chunks (66.67%)
1190 1190 manifests: 3/3 chunks (100.00%)
1191 1191 adding file changes
1192 1192 adding foo/Bar/file.txt revisions
1193 1193 files: 1/3 chunks (33.33%)
1194 1194 adding foo/file.txt revisions
1195 1195 files: 2/3 chunks (66.67%)
1196 1196 adding quux/file.py revisions
1197 1197 files: 3/3 chunks (100.00%)
1198 1198 added 3 changesets with 3 changes to 3 files
1199 1199 calling hook pretxnchangegroup.acl: hgext.acl.hook
1200 1200 acl: acl.allow.branches not enabled
1201 1201 acl: acl.deny.branches not enabled
1202 1202 acl: acl.allow enabled, 1 entries for user barney
1203 1203 acl: acl.deny enabled, 0 entries for user barney
1204 1204 acl: branch access granted: "ef1ea85a6374" on branch "default"
1205 1205 acl: allowing changeset ef1ea85a6374
1206 1206 acl: branch access granted: "f9cafe1212c8" on branch "default"
1207 1207 acl: allowing changeset f9cafe1212c8
1208 1208 acl: branch access granted: "911600dab2ae" on branch "default"
1209 1209 acl: allowing changeset 911600dab2ae
1210 1210 updating the branch cache
1211 1211 rolling back to revision 1 (undo push)
1212 1212 0:6675d58eff77
1213 1213
1214 1214 asterisk test
1215 1215 fred is always allowed
1216 1216 Pushing as user fred
1217 1217 hgrc = """
1218 1218 [acl]
1219 1219 sources = push
1220 1220 [extensions]
1221 1221 [acl.allow]
1222 1222 ** = fred
1223 1223 """
1224 1224 pushing to ../b
1225 1225 searching for changes
1226 1226 common changesets up to 6675d58eff77
1227 1227 invalidating branch cache (tip differs)
1228 1228 3 changesets found
1229 1229 list of changesets:
1230 1230 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1231 1231 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1232 1232 911600dab2ae7a9baff75958b84fe606851ce955
1233 1233 adding changesets
1234 1234 bundling changes: 0 chunks
1235 1235 bundling changes: 1 chunks
1236 1236 bundling changes: 2 chunks
1237 1237 bundling changes: 3 chunks
1238 1238 bundling changes: 4 chunks
1239 1239 bundling changes: 5 chunks
1240 1240 bundling changes: 6 chunks
1241 1241 bundling changes: 7 chunks
1242 1242 bundling changes: 8 chunks
1243 1243 bundling changes: 9 chunks
1244 1244 bundling manifests: 0 chunks
1245 1245 bundling manifests: 1 chunks
1246 1246 bundling manifests: 2 chunks
1247 1247 bundling manifests: 3 chunks
1248 1248 bundling manifests: 4 chunks
1249 1249 bundling manifests: 5 chunks
1250 1250 bundling manifests: 6 chunks
1251 1251 bundling manifests: 7 chunks
1252 1252 bundling manifests: 8 chunks
1253 1253 bundling manifests: 9 chunks
1254 1254 bundling files: foo/Bar/file.txt 0 chunks
1255 1255 bundling files: foo/Bar/file.txt 1 chunks
1256 1256 bundling files: foo/Bar/file.txt 2 chunks
1257 1257 bundling files: foo/Bar/file.txt 3 chunks
1258 1258 bundling files: foo/file.txt 4 chunks
1259 1259 bundling files: foo/file.txt 5 chunks
1260 1260 bundling files: foo/file.txt 6 chunks
1261 1261 bundling files: foo/file.txt 7 chunks
1262 1262 bundling files: quux/file.py 8 chunks
1263 1263 bundling files: quux/file.py 9 chunks
1264 1264 bundling files: quux/file.py 10 chunks
1265 1265 bundling files: quux/file.py 11 chunks
1266 1266 changesets: 1 chunks
1267 1267 add changeset ef1ea85a6374
1268 1268 changesets: 2 chunks
1269 1269 add changeset f9cafe1212c8
1270 1270 changesets: 3 chunks
1271 1271 add changeset 911600dab2ae
1272 1272 adding manifests
1273 1273 manifests: 1/3 chunks (33.33%)
1274 1274 manifests: 2/3 chunks (66.67%)
1275 1275 manifests: 3/3 chunks (100.00%)
1276 1276 adding file changes
1277 1277 adding foo/Bar/file.txt revisions
1278 1278 files: 1/3 chunks (33.33%)
1279 1279 adding foo/file.txt revisions
1280 1280 files: 2/3 chunks (66.67%)
1281 1281 adding quux/file.py revisions
1282 1282 files: 3/3 chunks (100.00%)
1283 1283 added 3 changesets with 3 changes to 3 files
1284 1284 calling hook pretxnchangegroup.acl: hgext.acl.hook
1285 1285 acl: acl.allow.branches not enabled
1286 1286 acl: acl.deny.branches not enabled
1287 1287 acl: acl.allow enabled, 1 entries for user fred
1288 1288 acl: acl.deny not enabled
1289 1289 acl: branch access granted: "ef1ea85a6374" on branch "default"
1290 1290 acl: allowing changeset ef1ea85a6374
1291 1291 acl: branch access granted: "f9cafe1212c8" on branch "default"
1292 1292 acl: allowing changeset f9cafe1212c8
1293 1293 acl: branch access granted: "911600dab2ae" on branch "default"
1294 1294 acl: allowing changeset 911600dab2ae
1295 1295 updating the branch cache
1296 1296 rolling back to revision 1 (undo push)
1297 1297 0:6675d58eff77
1298 1298
1299 1299 no one is allowed inside foo/Bar/
1300 1300 Pushing as user fred
1301 1301 hgrc = """
1302 1302 [acl]
1303 1303 sources = push
1304 1304 [extensions]
1305 1305 [acl.allow]
1306 1306 ** = fred
1307 1307 [acl.deny]
1308 1308 foo/Bar/** = *
1309 1309 """
1310 1310 pushing to ../b
1311 1311 searching for changes
1312 1312 common changesets up to 6675d58eff77
1313 1313 invalidating branch cache (tip differs)
1314 1314 3 changesets found
1315 1315 list of changesets:
1316 1316 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1317 1317 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1318 1318 911600dab2ae7a9baff75958b84fe606851ce955
1319 1319 adding changesets
1320 1320 bundling changes: 0 chunks
1321 1321 bundling changes: 1 chunks
1322 1322 bundling changes: 2 chunks
1323 1323 bundling changes: 3 chunks
1324 1324 bundling changes: 4 chunks
1325 1325 bundling changes: 5 chunks
1326 1326 bundling changes: 6 chunks
1327 1327 bundling changes: 7 chunks
1328 1328 bundling changes: 8 chunks
1329 1329 bundling changes: 9 chunks
1330 1330 bundling manifests: 0 chunks
1331 1331 bundling manifests: 1 chunks
1332 1332 bundling manifests: 2 chunks
1333 1333 bundling manifests: 3 chunks
1334 1334 bundling manifests: 4 chunks
1335 1335 bundling manifests: 5 chunks
1336 1336 bundling manifests: 6 chunks
1337 1337 bundling manifests: 7 chunks
1338 1338 bundling manifests: 8 chunks
1339 1339 bundling manifests: 9 chunks
1340 1340 bundling files: foo/Bar/file.txt 0 chunks
1341 1341 bundling files: foo/Bar/file.txt 1 chunks
1342 1342 bundling files: foo/Bar/file.txt 2 chunks
1343 1343 bundling files: foo/Bar/file.txt 3 chunks
1344 1344 bundling files: foo/file.txt 4 chunks
1345 1345 bundling files: foo/file.txt 5 chunks
1346 1346 bundling files: foo/file.txt 6 chunks
1347 1347 bundling files: foo/file.txt 7 chunks
1348 1348 bundling files: quux/file.py 8 chunks
1349 1349 bundling files: quux/file.py 9 chunks
1350 1350 bundling files: quux/file.py 10 chunks
1351 1351 bundling files: quux/file.py 11 chunks
1352 1352 changesets: 1 chunks
1353 1353 add changeset ef1ea85a6374
1354 1354 changesets: 2 chunks
1355 1355 add changeset f9cafe1212c8
1356 1356 changesets: 3 chunks
1357 1357 add changeset 911600dab2ae
1358 1358 adding manifests
1359 1359 manifests: 1/3 chunks (33.33%)
1360 1360 manifests: 2/3 chunks (66.67%)
1361 1361 manifests: 3/3 chunks (100.00%)
1362 1362 adding file changes
1363 1363 adding foo/Bar/file.txt revisions
1364 1364 files: 1/3 chunks (33.33%)
1365 1365 adding foo/file.txt revisions
1366 1366 files: 2/3 chunks (66.67%)
1367 1367 adding quux/file.py revisions
1368 1368 files: 3/3 chunks (100.00%)
1369 1369 added 3 changesets with 3 changes to 3 files
1370 1370 calling hook pretxnchangegroup.acl: hgext.acl.hook
1371 1371 acl: acl.allow.branches not enabled
1372 1372 acl: acl.deny.branches not enabled
1373 1373 acl: acl.allow enabled, 1 entries for user fred
1374 1374 acl: acl.deny enabled, 1 entries for user fred
1375 1375 acl: branch access granted: "ef1ea85a6374" on branch "default"
1376 1376 acl: allowing changeset ef1ea85a6374
1377 1377 acl: branch access granted: "f9cafe1212c8" on branch "default"
1378 1378 acl: user fred denied on foo/Bar/file.txt
1379 1379 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
1380 1380 transaction abort!
1381 1381 rollback completed
1382 1382 abort: acl: access denied for changeset f9cafe1212c8
1383 1383 no rollback information available
1384 1384 0:6675d58eff77
1385 1385
1386 1386 OS-level groups
1387 1387 @group1 is always allowed
1388 1388 Pushing as user fred
1389 1389 hgrc = """
1390 1390 [acl]
1391 1391 sources = push
1392 1392 [extensions]
1393 1393 [acl.allow]
1394 1394 ** = @group1
1395 1395 """
1396 1396 pushing to ../b
1397 1397 searching for changes
1398 1398 common changesets up to 6675d58eff77
1399 1399 3 changesets found
1400 1400 list of changesets:
1401 1401 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1402 1402 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1403 1403 911600dab2ae7a9baff75958b84fe606851ce955
1404 1404 adding changesets
1405 1405 bundling changes: 0 chunks
1406 1406 bundling changes: 1 chunks
1407 1407 bundling changes: 2 chunks
1408 1408 bundling changes: 3 chunks
1409 1409 bundling changes: 4 chunks
1410 1410 bundling changes: 5 chunks
1411 1411 bundling changes: 6 chunks
1412 1412 bundling changes: 7 chunks
1413 1413 bundling changes: 8 chunks
1414 1414 bundling changes: 9 chunks
1415 1415 bundling manifests: 0 chunks
1416 1416 bundling manifests: 1 chunks
1417 1417 bundling manifests: 2 chunks
1418 1418 bundling manifests: 3 chunks
1419 1419 bundling manifests: 4 chunks
1420 1420 bundling manifests: 5 chunks
1421 1421 bundling manifests: 6 chunks
1422 1422 bundling manifests: 7 chunks
1423 1423 bundling manifests: 8 chunks
1424 1424 bundling manifests: 9 chunks
1425 1425 bundling files: foo/Bar/file.txt 0 chunks
1426 1426 bundling files: foo/Bar/file.txt 1 chunks
1427 1427 bundling files: foo/Bar/file.txt 2 chunks
1428 1428 bundling files: foo/Bar/file.txt 3 chunks
1429 1429 bundling files: foo/file.txt 4 chunks
1430 1430 bundling files: foo/file.txt 5 chunks
1431 1431 bundling files: foo/file.txt 6 chunks
1432 1432 bundling files: foo/file.txt 7 chunks
1433 1433 bundling files: quux/file.py 8 chunks
1434 1434 bundling files: quux/file.py 9 chunks
1435 1435 bundling files: quux/file.py 10 chunks
1436 1436 bundling files: quux/file.py 11 chunks
1437 1437 changesets: 1 chunks
1438 1438 add changeset ef1ea85a6374
1439 1439 changesets: 2 chunks
1440 1440 add changeset f9cafe1212c8
1441 1441 changesets: 3 chunks
1442 1442 add changeset 911600dab2ae
1443 1443 adding manifests
1444 1444 manifests: 1/3 chunks (33.33%)
1445 1445 manifests: 2/3 chunks (66.67%)
1446 1446 manifests: 3/3 chunks (100.00%)
1447 1447 adding file changes
1448 1448 adding foo/Bar/file.txt revisions
1449 1449 files: 1/3 chunks (33.33%)
1450 1450 adding foo/file.txt revisions
1451 1451 files: 2/3 chunks (66.67%)
1452 1452 adding quux/file.py revisions
1453 1453 files: 3/3 chunks (100.00%)
1454 1454 added 3 changesets with 3 changes to 3 files
1455 1455 calling hook pretxnchangegroup.acl: hgext.acl.hook
1456 1456 acl: acl.allow.branches not enabled
1457 1457 acl: acl.deny.branches not enabled
1458 1458 acl: "group1" not defined in [acl.groups]
1459 1459 acl: acl.allow enabled, 1 entries for user fred
1460 1460 acl: acl.deny not enabled
1461 1461 acl: branch access granted: "ef1ea85a6374" on branch "default"
1462 1462 acl: allowing changeset ef1ea85a6374
1463 1463 acl: branch access granted: "f9cafe1212c8" on branch "default"
1464 1464 acl: allowing changeset f9cafe1212c8
1465 1465 acl: branch access granted: "911600dab2ae" on branch "default"
1466 1466 acl: allowing changeset 911600dab2ae
1467 1467 updating the branch cache
1468 1468 rolling back to revision 1 (undo push)
1469 1469 0:6675d58eff77
1470 1470
1471 1471 @group is allowed inside anything but foo/Bar/
1472 1472 Pushing as user fred
1473 1473 hgrc = """
1474 1474 [acl]
1475 1475 sources = push
1476 1476 [extensions]
1477 1477 [acl.allow]
1478 1478 ** = @group1
1479 1479 [acl.deny]
1480 1480 foo/Bar/** = @group1
1481 1481 """
1482 1482 pushing to ../b
1483 1483 searching for changes
1484 1484 common changesets up to 6675d58eff77
1485 1485 invalidating branch cache (tip differs)
1486 1486 3 changesets found
1487 1487 list of changesets:
1488 1488 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1489 1489 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1490 1490 911600dab2ae7a9baff75958b84fe606851ce955
1491 1491 adding changesets
1492 1492 bundling changes: 0 chunks
1493 1493 bundling changes: 1 chunks
1494 1494 bundling changes: 2 chunks
1495 1495 bundling changes: 3 chunks
1496 1496 bundling changes: 4 chunks
1497 1497 bundling changes: 5 chunks
1498 1498 bundling changes: 6 chunks
1499 1499 bundling changes: 7 chunks
1500 1500 bundling changes: 8 chunks
1501 1501 bundling changes: 9 chunks
1502 1502 bundling manifests: 0 chunks
1503 1503 bundling manifests: 1 chunks
1504 1504 bundling manifests: 2 chunks
1505 1505 bundling manifests: 3 chunks
1506 1506 bundling manifests: 4 chunks
1507 1507 bundling manifests: 5 chunks
1508 1508 bundling manifests: 6 chunks
1509 1509 bundling manifests: 7 chunks
1510 1510 bundling manifests: 8 chunks
1511 1511 bundling manifests: 9 chunks
1512 1512 bundling files: foo/Bar/file.txt 0 chunks
1513 1513 bundling files: foo/Bar/file.txt 1 chunks
1514 1514 bundling files: foo/Bar/file.txt 2 chunks
1515 1515 bundling files: foo/Bar/file.txt 3 chunks
1516 1516 bundling files: foo/file.txt 4 chunks
1517 1517 bundling files: foo/file.txt 5 chunks
1518 1518 bundling files: foo/file.txt 6 chunks
1519 1519 bundling files: foo/file.txt 7 chunks
1520 1520 bundling files: quux/file.py 8 chunks
1521 1521 bundling files: quux/file.py 9 chunks
1522 1522 bundling files: quux/file.py 10 chunks
1523 1523 bundling files: quux/file.py 11 chunks
1524 1524 changesets: 1 chunks
1525 1525 add changeset ef1ea85a6374
1526 1526 changesets: 2 chunks
1527 1527 add changeset f9cafe1212c8
1528 1528 changesets: 3 chunks
1529 1529 add changeset 911600dab2ae
1530 1530 adding manifests
1531 1531 manifests: 1/3 chunks (33.33%)
1532 1532 manifests: 2/3 chunks (66.67%)
1533 1533 manifests: 3/3 chunks (100.00%)
1534 1534 adding file changes
1535 1535 adding foo/Bar/file.txt revisions
1536 1536 files: 1/3 chunks (33.33%)
1537 1537 adding foo/file.txt revisions
1538 1538 files: 2/3 chunks (66.67%)
1539 1539 adding quux/file.py revisions
1540 1540 files: 3/3 chunks (100.00%)
1541 1541 added 3 changesets with 3 changes to 3 files
1542 1542 calling hook pretxnchangegroup.acl: hgext.acl.hook
1543 1543 acl: acl.allow.branches not enabled
1544 1544 acl: acl.deny.branches not enabled
1545 1545 acl: "group1" not defined in [acl.groups]
1546 1546 acl: acl.allow enabled, 1 entries for user fred
1547 1547 acl: "group1" not defined in [acl.groups]
1548 1548 acl: acl.deny enabled, 1 entries for user fred
1549 1549 acl: branch access granted: "ef1ea85a6374" on branch "default"
1550 1550 acl: allowing changeset ef1ea85a6374
1551 1551 acl: branch access granted: "f9cafe1212c8" on branch "default"
1552 1552 acl: user fred denied on foo/Bar/file.txt
1553 1553 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
1554 1554 transaction abort!
1555 1555 rollback completed
1556 1556 abort: acl: access denied for changeset f9cafe1212c8
1557 1557 no rollback information available
1558 1558 0:6675d58eff77
1559 1559
1560 Invalid group
1561 ** = @unlikelytoexist
1562 acl: "unlikelytoexist" not defined in [acl.groups]
1563 error: pretxnchangegroup.acl hook failed: group 'unlikelytoexist' is undefined
1564 abort: group 'unlikelytoexist' is undefined
General Comments 0
You need to be logged in to leave comments. Login now