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