##// END OF EJS Templates
tests: drop final true command from unified tests
Matt Mackall -
r12346:3b165c12 default
parent child Browse files
Show More
@@ -1,1738 +1,1736
1 > do_push()
1 > do_push()
2 > {
2 > {
3 > user=$1
3 > user=$1
4 > shift
4 > shift
5 > echo "Pushing as user $user"
5 > echo "Pushing as user $user"
6 > echo 'hgrc = """'
6 > echo 'hgrc = """'
7 > sed -e 1,2d b/.hg/hgrc | grep -v fakegroups.py
7 > sed -e 1,2d b/.hg/hgrc | grep -v fakegroups.py
8 > echo '"""'
8 > echo '"""'
9 > if test -f acl.config; then
9 > if test -f acl.config; then
10 > echo 'acl.config = """'
10 > echo 'acl.config = """'
11 > cat acl.config
11 > cat acl.config
12 > echo '"""'
12 > echo '"""'
13 > fi
13 > fi
14 > # On AIX /etc/profile sets LOGNAME read-only. So
14 > # On AIX /etc/profile sets LOGNAME read-only. So
15 > # LOGNAME=$user hg --cws a --debug push ../b
15 > # LOGNAME=$user hg --cws a --debug push ../b
16 > # fails with "This variable is read only."
16 > # fails with "This variable is read only."
17 > # Use env to work around this.
17 > # Use env to work around this.
18 > env LOGNAME=$user hg --cwd a --debug push ../b
18 > env LOGNAME=$user hg --cwd a --debug push ../b
19 > hg --cwd b rollback
19 > hg --cwd b rollback
20 > hg --cwd b --quiet tip
20 > hg --cwd b --quiet tip
21 > echo
21 > echo
22 > }
22 > }
23
23
24 > init_config()
24 > init_config()
25 > {
25 > {
26 > cat > fakegroups.py <<EOF
26 > cat > fakegroups.py <<EOF
27 > from hgext import acl
27 > from hgext import acl
28 > def fakegetusers(ui, group):
28 > def fakegetusers(ui, group):
29 > try:
29 > try:
30 > return acl._getusersorig(ui, group)
30 > return acl._getusersorig(ui, group)
31 > except:
31 > except:
32 > return ["fred", "betty"]
32 > return ["fred", "betty"]
33 > acl._getusersorig = acl._getusers
33 > acl._getusersorig = acl._getusers
34 > acl._getusers = fakegetusers
34 > acl._getusers = fakegetusers
35 > EOF
35 > EOF
36 > rm -f acl.config
36 > rm -f acl.config
37 > cat > $config <<EOF
37 > cat > $config <<EOF
38 > [hooks]
38 > [hooks]
39 > pretxnchangegroup.acl = python:hgext.acl.hook
39 > pretxnchangegroup.acl = python:hgext.acl.hook
40 > [acl]
40 > [acl]
41 > sources = push
41 > sources = push
42 > [extensions]
42 > [extensions]
43 > f=`pwd`/fakegroups.py
43 > f=`pwd`/fakegroups.py
44 > EOF
44 > EOF
45 > }
45 > }
46
46
47 $ hg init a
47 $ hg init a
48 $ cd a
48 $ cd a
49 $ mkdir foo foo/Bar quux
49 $ mkdir foo foo/Bar quux
50 $ echo 'in foo' > foo/file.txt
50 $ echo 'in foo' > foo/file.txt
51 $ echo 'in foo/Bar' > foo/Bar/file.txt
51 $ echo 'in foo/Bar' > foo/Bar/file.txt
52 $ echo 'in quux' > quux/file.py
52 $ echo 'in quux' > quux/file.py
53 $ hg add -q
53 $ hg add -q
54 $ hg ci -m 'add files' -d '1000000 0'
54 $ hg ci -m 'add files' -d '1000000 0'
55 $ echo >> foo/file.txt
55 $ echo >> foo/file.txt
56 $ hg ci -m 'change foo/file' -d '1000001 0'
56 $ hg ci -m 'change foo/file' -d '1000001 0'
57 $ echo >> foo/Bar/file.txt
57 $ echo >> foo/Bar/file.txt
58 $ hg ci -m 'change foo/Bar/file' -d '1000002 0'
58 $ hg ci -m 'change foo/Bar/file' -d '1000002 0'
59 $ echo >> quux/file.py
59 $ echo >> quux/file.py
60 $ hg ci -m 'change quux/file' -d '1000003 0'
60 $ hg ci -m 'change quux/file' -d '1000003 0'
61 $ hg tip --quiet
61 $ hg tip --quiet
62 3:911600dab2ae
62 3:911600dab2ae
63
63
64 $ cd ..
64 $ cd ..
65 $ hg clone -r 0 a b
65 $ hg clone -r 0 a b
66 requesting all changes
66 requesting all changes
67 adding changesets
67 adding changesets
68 adding manifests
68 adding manifests
69 adding file changes
69 adding file changes
70 added 1 changesets with 3 changes to 3 files
70 added 1 changesets with 3 changes to 3 files
71 updating to branch default
71 updating to branch default
72 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
72 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
73
73
74 $ echo '[extensions]' >> $HGRCPATH
74 $ echo '[extensions]' >> $HGRCPATH
75 $ echo 'acl =' >> $HGRCPATH
75 $ echo 'acl =' >> $HGRCPATH
76
76
77 $ config=b/.hg/hgrc
77 $ config=b/.hg/hgrc
78
78
79 Extension disabled for lack of a hook
79 Extension disabled for lack of a hook
80
80
81 $ do_push fred
81 $ do_push fred
82 Pushing as user fred
82 Pushing as user fred
83 hgrc = """
83 hgrc = """
84 """
84 """
85 pushing to ../b
85 pushing to ../b
86 searching for changes
86 searching for changes
87 common changesets up to 6675d58eff77
87 common changesets up to 6675d58eff77
88 3 changesets found
88 3 changesets found
89 list of changesets:
89 list of changesets:
90 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
90 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
91 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
91 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
92 911600dab2ae7a9baff75958b84fe606851ce955
92 911600dab2ae7a9baff75958b84fe606851ce955
93 adding changesets
93 adding changesets
94 bundling changes: 0 chunks
94 bundling changes: 0 chunks
95 bundling changes: 1 chunks
95 bundling changes: 1 chunks
96 bundling changes: 2 chunks
96 bundling changes: 2 chunks
97 bundling changes: 3 chunks
97 bundling changes: 3 chunks
98 bundling changes: 4 chunks
98 bundling changes: 4 chunks
99 bundling changes: 5 chunks
99 bundling changes: 5 chunks
100 bundling changes: 6 chunks
100 bundling changes: 6 chunks
101 bundling changes: 7 chunks
101 bundling changes: 7 chunks
102 bundling changes: 8 chunks
102 bundling changes: 8 chunks
103 bundling changes: 9 chunks
103 bundling changes: 9 chunks
104 bundling manifests: 0 chunks
104 bundling manifests: 0 chunks
105 bundling manifests: 1 chunks
105 bundling manifests: 1 chunks
106 bundling manifests: 2 chunks
106 bundling manifests: 2 chunks
107 bundling manifests: 3 chunks
107 bundling manifests: 3 chunks
108 bundling manifests: 4 chunks
108 bundling manifests: 4 chunks
109 bundling manifests: 5 chunks
109 bundling manifests: 5 chunks
110 bundling manifests: 6 chunks
110 bundling manifests: 6 chunks
111 bundling manifests: 7 chunks
111 bundling manifests: 7 chunks
112 bundling manifests: 8 chunks
112 bundling manifests: 8 chunks
113 bundling manifests: 9 chunks
113 bundling manifests: 9 chunks
114 bundling files: foo/Bar/file.txt 0 chunks
114 bundling files: foo/Bar/file.txt 0 chunks
115 bundling files: foo/Bar/file.txt 1 chunks
115 bundling files: foo/Bar/file.txt 1 chunks
116 bundling files: foo/Bar/file.txt 2 chunks
116 bundling files: foo/Bar/file.txt 2 chunks
117 bundling files: foo/Bar/file.txt 3 chunks
117 bundling files: foo/Bar/file.txt 3 chunks
118 bundling files: foo/file.txt 4 chunks
118 bundling files: foo/file.txt 4 chunks
119 bundling files: foo/file.txt 5 chunks
119 bundling files: foo/file.txt 5 chunks
120 bundling files: foo/file.txt 6 chunks
120 bundling files: foo/file.txt 6 chunks
121 bundling files: foo/file.txt 7 chunks
121 bundling files: foo/file.txt 7 chunks
122 bundling files: quux/file.py 8 chunks
122 bundling files: quux/file.py 8 chunks
123 bundling files: quux/file.py 9 chunks
123 bundling files: quux/file.py 9 chunks
124 bundling files: quux/file.py 10 chunks
124 bundling files: quux/file.py 10 chunks
125 bundling files: quux/file.py 11 chunks
125 bundling files: quux/file.py 11 chunks
126 changesets: 1 chunks
126 changesets: 1 chunks
127 add changeset ef1ea85a6374
127 add changeset ef1ea85a6374
128 changesets: 2 chunks
128 changesets: 2 chunks
129 add changeset f9cafe1212c8
129 add changeset f9cafe1212c8
130 changesets: 3 chunks
130 changesets: 3 chunks
131 add changeset 911600dab2ae
131 add changeset 911600dab2ae
132 adding manifests
132 adding manifests
133 manifests: 1/3 chunks (33.33%)
133 manifests: 1/3 chunks (33.33%)
134 manifests: 2/3 chunks (66.67%)
134 manifests: 2/3 chunks (66.67%)
135 manifests: 3/3 chunks (100.00%)
135 manifests: 3/3 chunks (100.00%)
136 adding file changes
136 adding file changes
137 adding foo/Bar/file.txt revisions
137 adding foo/Bar/file.txt revisions
138 files: 1/3 chunks (33.33%)
138 files: 1/3 chunks (33.33%)
139 adding foo/file.txt revisions
139 adding foo/file.txt revisions
140 files: 2/3 chunks (66.67%)
140 files: 2/3 chunks (66.67%)
141 adding quux/file.py revisions
141 adding quux/file.py revisions
142 files: 3/3 chunks (100.00%)
142 files: 3/3 chunks (100.00%)
143 added 3 changesets with 3 changes to 3 files
143 added 3 changesets with 3 changes to 3 files
144 updating the branch cache
144 updating the branch cache
145 rolling back to revision 0 (undo push)
145 rolling back to revision 0 (undo push)
146 0:6675d58eff77
146 0:6675d58eff77
147
147
148
148
149 $ echo '[hooks]' >> $config
149 $ echo '[hooks]' >> $config
150 $ echo 'pretxnchangegroup.acl = python:hgext.acl.hook' >> $config
150 $ echo 'pretxnchangegroup.acl = python:hgext.acl.hook' >> $config
151
151
152 Extension disabled for lack of acl.sources
152 Extension disabled for lack of acl.sources
153
153
154 $ do_push fred
154 $ do_push fred
155 Pushing as user fred
155 Pushing as user fred
156 hgrc = """
156 hgrc = """
157 [hooks]
157 [hooks]
158 pretxnchangegroup.acl = python:hgext.acl.hook
158 pretxnchangegroup.acl = python:hgext.acl.hook
159 """
159 """
160 pushing to ../b
160 pushing to ../b
161 searching for changes
161 searching for changes
162 common changesets up to 6675d58eff77
162 common changesets up to 6675d58eff77
163 invalidating branch cache (tip differs)
163 invalidating branch cache (tip differs)
164 3 changesets found
164 3 changesets found
165 list of changesets:
165 list of changesets:
166 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
166 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
167 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
167 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
168 911600dab2ae7a9baff75958b84fe606851ce955
168 911600dab2ae7a9baff75958b84fe606851ce955
169 adding changesets
169 adding changesets
170 bundling changes: 0 chunks
170 bundling changes: 0 chunks
171 bundling changes: 1 chunks
171 bundling changes: 1 chunks
172 bundling changes: 2 chunks
172 bundling changes: 2 chunks
173 bundling changes: 3 chunks
173 bundling changes: 3 chunks
174 bundling changes: 4 chunks
174 bundling changes: 4 chunks
175 bundling changes: 5 chunks
175 bundling changes: 5 chunks
176 bundling changes: 6 chunks
176 bundling changes: 6 chunks
177 bundling changes: 7 chunks
177 bundling changes: 7 chunks
178 bundling changes: 8 chunks
178 bundling changes: 8 chunks
179 bundling changes: 9 chunks
179 bundling changes: 9 chunks
180 bundling manifests: 0 chunks
180 bundling manifests: 0 chunks
181 bundling manifests: 1 chunks
181 bundling manifests: 1 chunks
182 bundling manifests: 2 chunks
182 bundling manifests: 2 chunks
183 bundling manifests: 3 chunks
183 bundling manifests: 3 chunks
184 bundling manifests: 4 chunks
184 bundling manifests: 4 chunks
185 bundling manifests: 5 chunks
185 bundling manifests: 5 chunks
186 bundling manifests: 6 chunks
186 bundling manifests: 6 chunks
187 bundling manifests: 7 chunks
187 bundling manifests: 7 chunks
188 bundling manifests: 8 chunks
188 bundling manifests: 8 chunks
189 bundling manifests: 9 chunks
189 bundling manifests: 9 chunks
190 bundling files: foo/Bar/file.txt 0 chunks
190 bundling files: foo/Bar/file.txt 0 chunks
191 bundling files: foo/Bar/file.txt 1 chunks
191 bundling files: foo/Bar/file.txt 1 chunks
192 bundling files: foo/Bar/file.txt 2 chunks
192 bundling files: foo/Bar/file.txt 2 chunks
193 bundling files: foo/Bar/file.txt 3 chunks
193 bundling files: foo/Bar/file.txt 3 chunks
194 bundling files: foo/file.txt 4 chunks
194 bundling files: foo/file.txt 4 chunks
195 bundling files: foo/file.txt 5 chunks
195 bundling files: foo/file.txt 5 chunks
196 bundling files: foo/file.txt 6 chunks
196 bundling files: foo/file.txt 6 chunks
197 bundling files: foo/file.txt 7 chunks
197 bundling files: foo/file.txt 7 chunks
198 bundling files: quux/file.py 8 chunks
198 bundling files: quux/file.py 8 chunks
199 bundling files: quux/file.py 9 chunks
199 bundling files: quux/file.py 9 chunks
200 bundling files: quux/file.py 10 chunks
200 bundling files: quux/file.py 10 chunks
201 bundling files: quux/file.py 11 chunks
201 bundling files: quux/file.py 11 chunks
202 changesets: 1 chunks
202 changesets: 1 chunks
203 add changeset ef1ea85a6374
203 add changeset ef1ea85a6374
204 changesets: 2 chunks
204 changesets: 2 chunks
205 add changeset f9cafe1212c8
205 add changeset f9cafe1212c8
206 changesets: 3 chunks
206 changesets: 3 chunks
207 add changeset 911600dab2ae
207 add changeset 911600dab2ae
208 adding manifests
208 adding manifests
209 manifests: 1/3 chunks (33.33%)
209 manifests: 1/3 chunks (33.33%)
210 manifests: 2/3 chunks (66.67%)
210 manifests: 2/3 chunks (66.67%)
211 manifests: 3/3 chunks (100.00%)
211 manifests: 3/3 chunks (100.00%)
212 adding file changes
212 adding file changes
213 adding foo/Bar/file.txt revisions
213 adding foo/Bar/file.txt revisions
214 files: 1/3 chunks (33.33%)
214 files: 1/3 chunks (33.33%)
215 adding foo/file.txt revisions
215 adding foo/file.txt revisions
216 files: 2/3 chunks (66.67%)
216 files: 2/3 chunks (66.67%)
217 adding quux/file.py revisions
217 adding quux/file.py revisions
218 files: 3/3 chunks (100.00%)
218 files: 3/3 chunks (100.00%)
219 added 3 changesets with 3 changes to 3 files
219 added 3 changesets with 3 changes to 3 files
220 calling hook pretxnchangegroup.acl: hgext.acl.hook
220 calling hook pretxnchangegroup.acl: hgext.acl.hook
221 acl: changes have source "push" - skipping
221 acl: changes have source "push" - skipping
222 updating the branch cache
222 updating the branch cache
223 rolling back to revision 0 (undo push)
223 rolling back to revision 0 (undo push)
224 0:6675d58eff77
224 0:6675d58eff77
225
225
226
226
227 No [acl.allow]/[acl.deny]
227 No [acl.allow]/[acl.deny]
228
228
229 $ echo '[acl]' >> $config
229 $ echo '[acl]' >> $config
230 $ echo 'sources = push' >> $config
230 $ echo 'sources = push' >> $config
231 $ do_push fred
231 $ do_push fred
232 Pushing as user fred
232 Pushing as user fred
233 hgrc = """
233 hgrc = """
234 [hooks]
234 [hooks]
235 pretxnchangegroup.acl = python:hgext.acl.hook
235 pretxnchangegroup.acl = python:hgext.acl.hook
236 [acl]
236 [acl]
237 sources = push
237 sources = push
238 """
238 """
239 pushing to ../b
239 pushing to ../b
240 searching for changes
240 searching for changes
241 common changesets up to 6675d58eff77
241 common changesets up to 6675d58eff77
242 invalidating branch cache (tip differs)
242 invalidating branch cache (tip differs)
243 3 changesets found
243 3 changesets found
244 list of changesets:
244 list of changesets:
245 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
245 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
246 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
246 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
247 911600dab2ae7a9baff75958b84fe606851ce955
247 911600dab2ae7a9baff75958b84fe606851ce955
248 adding changesets
248 adding changesets
249 bundling changes: 0 chunks
249 bundling changes: 0 chunks
250 bundling changes: 1 chunks
250 bundling changes: 1 chunks
251 bundling changes: 2 chunks
251 bundling changes: 2 chunks
252 bundling changes: 3 chunks
252 bundling changes: 3 chunks
253 bundling changes: 4 chunks
253 bundling changes: 4 chunks
254 bundling changes: 5 chunks
254 bundling changes: 5 chunks
255 bundling changes: 6 chunks
255 bundling changes: 6 chunks
256 bundling changes: 7 chunks
256 bundling changes: 7 chunks
257 bundling changes: 8 chunks
257 bundling changes: 8 chunks
258 bundling changes: 9 chunks
258 bundling changes: 9 chunks
259 bundling manifests: 0 chunks
259 bundling manifests: 0 chunks
260 bundling manifests: 1 chunks
260 bundling manifests: 1 chunks
261 bundling manifests: 2 chunks
261 bundling manifests: 2 chunks
262 bundling manifests: 3 chunks
262 bundling manifests: 3 chunks
263 bundling manifests: 4 chunks
263 bundling manifests: 4 chunks
264 bundling manifests: 5 chunks
264 bundling manifests: 5 chunks
265 bundling manifests: 6 chunks
265 bundling manifests: 6 chunks
266 bundling manifests: 7 chunks
266 bundling manifests: 7 chunks
267 bundling manifests: 8 chunks
267 bundling manifests: 8 chunks
268 bundling manifests: 9 chunks
268 bundling manifests: 9 chunks
269 bundling files: foo/Bar/file.txt 0 chunks
269 bundling files: foo/Bar/file.txt 0 chunks
270 bundling files: foo/Bar/file.txt 1 chunks
270 bundling files: foo/Bar/file.txt 1 chunks
271 bundling files: foo/Bar/file.txt 2 chunks
271 bundling files: foo/Bar/file.txt 2 chunks
272 bundling files: foo/Bar/file.txt 3 chunks
272 bundling files: foo/Bar/file.txt 3 chunks
273 bundling files: foo/file.txt 4 chunks
273 bundling files: foo/file.txt 4 chunks
274 bundling files: foo/file.txt 5 chunks
274 bundling files: foo/file.txt 5 chunks
275 bundling files: foo/file.txt 6 chunks
275 bundling files: foo/file.txt 6 chunks
276 bundling files: foo/file.txt 7 chunks
276 bundling files: foo/file.txt 7 chunks
277 bundling files: quux/file.py 8 chunks
277 bundling files: quux/file.py 8 chunks
278 bundling files: quux/file.py 9 chunks
278 bundling files: quux/file.py 9 chunks
279 bundling files: quux/file.py 10 chunks
279 bundling files: quux/file.py 10 chunks
280 bundling files: quux/file.py 11 chunks
280 bundling files: quux/file.py 11 chunks
281 changesets: 1 chunks
281 changesets: 1 chunks
282 add changeset ef1ea85a6374
282 add changeset ef1ea85a6374
283 changesets: 2 chunks
283 changesets: 2 chunks
284 add changeset f9cafe1212c8
284 add changeset f9cafe1212c8
285 changesets: 3 chunks
285 changesets: 3 chunks
286 add changeset 911600dab2ae
286 add changeset 911600dab2ae
287 adding manifests
287 adding manifests
288 manifests: 1/3 chunks (33.33%)
288 manifests: 1/3 chunks (33.33%)
289 manifests: 2/3 chunks (66.67%)
289 manifests: 2/3 chunks (66.67%)
290 manifests: 3/3 chunks (100.00%)
290 manifests: 3/3 chunks (100.00%)
291 adding file changes
291 adding file changes
292 adding foo/Bar/file.txt revisions
292 adding foo/Bar/file.txt revisions
293 files: 1/3 chunks (33.33%)
293 files: 1/3 chunks (33.33%)
294 adding foo/file.txt revisions
294 adding foo/file.txt revisions
295 files: 2/3 chunks (66.67%)
295 files: 2/3 chunks (66.67%)
296 adding quux/file.py revisions
296 adding quux/file.py revisions
297 files: 3/3 chunks (100.00%)
297 files: 3/3 chunks (100.00%)
298 added 3 changesets with 3 changes to 3 files
298 added 3 changesets with 3 changes to 3 files
299 calling hook pretxnchangegroup.acl: hgext.acl.hook
299 calling hook pretxnchangegroup.acl: hgext.acl.hook
300 acl: acl.allow.branches not enabled
300 acl: acl.allow.branches not enabled
301 acl: acl.deny.branches not enabled
301 acl: acl.deny.branches not enabled
302 acl: acl.allow not enabled
302 acl: acl.allow not enabled
303 acl: acl.deny not enabled
303 acl: acl.deny not enabled
304 acl: branch access granted: "ef1ea85a6374" on branch "default"
304 acl: branch access granted: "ef1ea85a6374" on branch "default"
305 acl: allowing changeset ef1ea85a6374
305 acl: allowing changeset ef1ea85a6374
306 acl: branch access granted: "f9cafe1212c8" on branch "default"
306 acl: branch access granted: "f9cafe1212c8" on branch "default"
307 acl: allowing changeset f9cafe1212c8
307 acl: allowing changeset f9cafe1212c8
308 acl: branch access granted: "911600dab2ae" on branch "default"
308 acl: branch access granted: "911600dab2ae" on branch "default"
309 acl: allowing changeset 911600dab2ae
309 acl: allowing changeset 911600dab2ae
310 updating the branch cache
310 updating the branch cache
311 rolling back to revision 0 (undo push)
311 rolling back to revision 0 (undo push)
312 0:6675d58eff77
312 0:6675d58eff77
313
313
314
314
315 Empty [acl.allow]
315 Empty [acl.allow]
316
316
317 $ echo '[acl.allow]' >> $config
317 $ echo '[acl.allow]' >> $config
318 $ do_push fred
318 $ do_push fred
319 Pushing as user fred
319 Pushing as user fred
320 hgrc = """
320 hgrc = """
321 [hooks]
321 [hooks]
322 pretxnchangegroup.acl = python:hgext.acl.hook
322 pretxnchangegroup.acl = python:hgext.acl.hook
323 [acl]
323 [acl]
324 sources = push
324 sources = push
325 [acl.allow]
325 [acl.allow]
326 """
326 """
327 pushing to ../b
327 pushing to ../b
328 searching for changes
328 searching for changes
329 common changesets up to 6675d58eff77
329 common changesets up to 6675d58eff77
330 invalidating branch cache (tip differs)
330 invalidating branch cache (tip differs)
331 3 changesets found
331 3 changesets found
332 list of changesets:
332 list of changesets:
333 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
333 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
334 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
334 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
335 911600dab2ae7a9baff75958b84fe606851ce955
335 911600dab2ae7a9baff75958b84fe606851ce955
336 adding changesets
336 adding changesets
337 bundling changes: 0 chunks
337 bundling changes: 0 chunks
338 bundling changes: 1 chunks
338 bundling changes: 1 chunks
339 bundling changes: 2 chunks
339 bundling changes: 2 chunks
340 bundling changes: 3 chunks
340 bundling changes: 3 chunks
341 bundling changes: 4 chunks
341 bundling changes: 4 chunks
342 bundling changes: 5 chunks
342 bundling changes: 5 chunks
343 bundling changes: 6 chunks
343 bundling changes: 6 chunks
344 bundling changes: 7 chunks
344 bundling changes: 7 chunks
345 bundling changes: 8 chunks
345 bundling changes: 8 chunks
346 bundling changes: 9 chunks
346 bundling changes: 9 chunks
347 bundling manifests: 0 chunks
347 bundling manifests: 0 chunks
348 bundling manifests: 1 chunks
348 bundling manifests: 1 chunks
349 bundling manifests: 2 chunks
349 bundling manifests: 2 chunks
350 bundling manifests: 3 chunks
350 bundling manifests: 3 chunks
351 bundling manifests: 4 chunks
351 bundling manifests: 4 chunks
352 bundling manifests: 5 chunks
352 bundling manifests: 5 chunks
353 bundling manifests: 6 chunks
353 bundling manifests: 6 chunks
354 bundling manifests: 7 chunks
354 bundling manifests: 7 chunks
355 bundling manifests: 8 chunks
355 bundling manifests: 8 chunks
356 bundling manifests: 9 chunks
356 bundling manifests: 9 chunks
357 bundling files: foo/Bar/file.txt 0 chunks
357 bundling files: foo/Bar/file.txt 0 chunks
358 bundling files: foo/Bar/file.txt 1 chunks
358 bundling files: foo/Bar/file.txt 1 chunks
359 bundling files: foo/Bar/file.txt 2 chunks
359 bundling files: foo/Bar/file.txt 2 chunks
360 bundling files: foo/Bar/file.txt 3 chunks
360 bundling files: foo/Bar/file.txt 3 chunks
361 bundling files: foo/file.txt 4 chunks
361 bundling files: foo/file.txt 4 chunks
362 bundling files: foo/file.txt 5 chunks
362 bundling files: foo/file.txt 5 chunks
363 bundling files: foo/file.txt 6 chunks
363 bundling files: foo/file.txt 6 chunks
364 bundling files: foo/file.txt 7 chunks
364 bundling files: foo/file.txt 7 chunks
365 bundling files: quux/file.py 8 chunks
365 bundling files: quux/file.py 8 chunks
366 bundling files: quux/file.py 9 chunks
366 bundling files: quux/file.py 9 chunks
367 bundling files: quux/file.py 10 chunks
367 bundling files: quux/file.py 10 chunks
368 bundling files: quux/file.py 11 chunks
368 bundling files: quux/file.py 11 chunks
369 changesets: 1 chunks
369 changesets: 1 chunks
370 add changeset ef1ea85a6374
370 add changeset ef1ea85a6374
371 changesets: 2 chunks
371 changesets: 2 chunks
372 add changeset f9cafe1212c8
372 add changeset f9cafe1212c8
373 changesets: 3 chunks
373 changesets: 3 chunks
374 add changeset 911600dab2ae
374 add changeset 911600dab2ae
375 adding manifests
375 adding manifests
376 manifests: 1/3 chunks (33.33%)
376 manifests: 1/3 chunks (33.33%)
377 manifests: 2/3 chunks (66.67%)
377 manifests: 2/3 chunks (66.67%)
378 manifests: 3/3 chunks (100.00%)
378 manifests: 3/3 chunks (100.00%)
379 adding file changes
379 adding file changes
380 adding foo/Bar/file.txt revisions
380 adding foo/Bar/file.txt revisions
381 files: 1/3 chunks (33.33%)
381 files: 1/3 chunks (33.33%)
382 adding foo/file.txt revisions
382 adding foo/file.txt revisions
383 files: 2/3 chunks (66.67%)
383 files: 2/3 chunks (66.67%)
384 adding quux/file.py revisions
384 adding quux/file.py revisions
385 files: 3/3 chunks (100.00%)
385 files: 3/3 chunks (100.00%)
386 added 3 changesets with 3 changes to 3 files
386 added 3 changesets with 3 changes to 3 files
387 calling hook pretxnchangegroup.acl: hgext.acl.hook
387 calling hook pretxnchangegroup.acl: hgext.acl.hook
388 acl: acl.allow.branches not enabled
388 acl: acl.allow.branches not enabled
389 acl: acl.deny.branches not enabled
389 acl: acl.deny.branches not enabled
390 acl: acl.allow enabled, 0 entries for user fred
390 acl: acl.allow enabled, 0 entries for user fred
391 acl: acl.deny not enabled
391 acl: acl.deny not enabled
392 acl: branch access granted: "ef1ea85a6374" on branch "default"
392 acl: branch access granted: "ef1ea85a6374" on branch "default"
393 acl: user fred not allowed on foo/file.txt
393 acl: user fred not allowed on foo/file.txt
394 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
394 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
395 transaction abort!
395 transaction abort!
396 rollback completed
396 rollback completed
397 abort: acl: access denied for changeset ef1ea85a6374
397 abort: acl: access denied for changeset ef1ea85a6374
398 no rollback information available
398 no rollback information available
399 0:6675d58eff77
399 0:6675d58eff77
400
400
401
401
402 fred is allowed inside foo/
402 fred is allowed inside foo/
403
403
404 $ echo 'foo/** = fred' >> $config
404 $ echo 'foo/** = fred' >> $config
405 $ do_push fred
405 $ do_push fred
406 Pushing as user fred
406 Pushing as user fred
407 hgrc = """
407 hgrc = """
408 [hooks]
408 [hooks]
409 pretxnchangegroup.acl = python:hgext.acl.hook
409 pretxnchangegroup.acl = python:hgext.acl.hook
410 [acl]
410 [acl]
411 sources = push
411 sources = push
412 [acl.allow]
412 [acl.allow]
413 foo/** = fred
413 foo/** = fred
414 """
414 """
415 pushing to ../b
415 pushing to ../b
416 searching for changes
416 searching for changes
417 common changesets up to 6675d58eff77
417 common changesets up to 6675d58eff77
418 3 changesets found
418 3 changesets found
419 list of changesets:
419 list of changesets:
420 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
420 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
421 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
421 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
422 911600dab2ae7a9baff75958b84fe606851ce955
422 911600dab2ae7a9baff75958b84fe606851ce955
423 adding changesets
423 adding changesets
424 bundling changes: 0 chunks
424 bundling changes: 0 chunks
425 bundling changes: 1 chunks
425 bundling changes: 1 chunks
426 bundling changes: 2 chunks
426 bundling changes: 2 chunks
427 bundling changes: 3 chunks
427 bundling changes: 3 chunks
428 bundling changes: 4 chunks
428 bundling changes: 4 chunks
429 bundling changes: 5 chunks
429 bundling changes: 5 chunks
430 bundling changes: 6 chunks
430 bundling changes: 6 chunks
431 bundling changes: 7 chunks
431 bundling changes: 7 chunks
432 bundling changes: 8 chunks
432 bundling changes: 8 chunks
433 bundling changes: 9 chunks
433 bundling changes: 9 chunks
434 bundling manifests: 0 chunks
434 bundling manifests: 0 chunks
435 bundling manifests: 1 chunks
435 bundling manifests: 1 chunks
436 bundling manifests: 2 chunks
436 bundling manifests: 2 chunks
437 bundling manifests: 3 chunks
437 bundling manifests: 3 chunks
438 bundling manifests: 4 chunks
438 bundling manifests: 4 chunks
439 bundling manifests: 5 chunks
439 bundling manifests: 5 chunks
440 bundling manifests: 6 chunks
440 bundling manifests: 6 chunks
441 bundling manifests: 7 chunks
441 bundling manifests: 7 chunks
442 bundling manifests: 8 chunks
442 bundling manifests: 8 chunks
443 bundling manifests: 9 chunks
443 bundling manifests: 9 chunks
444 bundling files: foo/Bar/file.txt 0 chunks
444 bundling files: foo/Bar/file.txt 0 chunks
445 bundling files: foo/Bar/file.txt 1 chunks
445 bundling files: foo/Bar/file.txt 1 chunks
446 bundling files: foo/Bar/file.txt 2 chunks
446 bundling files: foo/Bar/file.txt 2 chunks
447 bundling files: foo/Bar/file.txt 3 chunks
447 bundling files: foo/Bar/file.txt 3 chunks
448 bundling files: foo/file.txt 4 chunks
448 bundling files: foo/file.txt 4 chunks
449 bundling files: foo/file.txt 5 chunks
449 bundling files: foo/file.txt 5 chunks
450 bundling files: foo/file.txt 6 chunks
450 bundling files: foo/file.txt 6 chunks
451 bundling files: foo/file.txt 7 chunks
451 bundling files: foo/file.txt 7 chunks
452 bundling files: quux/file.py 8 chunks
452 bundling files: quux/file.py 8 chunks
453 bundling files: quux/file.py 9 chunks
453 bundling files: quux/file.py 9 chunks
454 bundling files: quux/file.py 10 chunks
454 bundling files: quux/file.py 10 chunks
455 bundling files: quux/file.py 11 chunks
455 bundling files: quux/file.py 11 chunks
456 changesets: 1 chunks
456 changesets: 1 chunks
457 add changeset ef1ea85a6374
457 add changeset ef1ea85a6374
458 changesets: 2 chunks
458 changesets: 2 chunks
459 add changeset f9cafe1212c8
459 add changeset f9cafe1212c8
460 changesets: 3 chunks
460 changesets: 3 chunks
461 add changeset 911600dab2ae
461 add changeset 911600dab2ae
462 adding manifests
462 adding manifests
463 manifests: 1/3 chunks (33.33%)
463 manifests: 1/3 chunks (33.33%)
464 manifests: 2/3 chunks (66.67%)
464 manifests: 2/3 chunks (66.67%)
465 manifests: 3/3 chunks (100.00%)
465 manifests: 3/3 chunks (100.00%)
466 adding file changes
466 adding file changes
467 adding foo/Bar/file.txt revisions
467 adding foo/Bar/file.txt revisions
468 files: 1/3 chunks (33.33%)
468 files: 1/3 chunks (33.33%)
469 adding foo/file.txt revisions
469 adding foo/file.txt revisions
470 files: 2/3 chunks (66.67%)
470 files: 2/3 chunks (66.67%)
471 adding quux/file.py revisions
471 adding quux/file.py revisions
472 files: 3/3 chunks (100.00%)
472 files: 3/3 chunks (100.00%)
473 added 3 changesets with 3 changes to 3 files
473 added 3 changesets with 3 changes to 3 files
474 calling hook pretxnchangegroup.acl: hgext.acl.hook
474 calling hook pretxnchangegroup.acl: hgext.acl.hook
475 acl: acl.allow.branches not enabled
475 acl: acl.allow.branches not enabled
476 acl: acl.deny.branches not enabled
476 acl: acl.deny.branches not enabled
477 acl: acl.allow enabled, 1 entries for user fred
477 acl: acl.allow enabled, 1 entries for user fred
478 acl: acl.deny not enabled
478 acl: acl.deny not enabled
479 acl: branch access granted: "ef1ea85a6374" on branch "default"
479 acl: branch access granted: "ef1ea85a6374" on branch "default"
480 acl: allowing changeset ef1ea85a6374
480 acl: allowing changeset ef1ea85a6374
481 acl: branch access granted: "f9cafe1212c8" on branch "default"
481 acl: branch access granted: "f9cafe1212c8" on branch "default"
482 acl: allowing changeset f9cafe1212c8
482 acl: allowing changeset f9cafe1212c8
483 acl: branch access granted: "911600dab2ae" on branch "default"
483 acl: branch access granted: "911600dab2ae" on branch "default"
484 acl: user fred not allowed on quux/file.py
484 acl: user fred not allowed on quux/file.py
485 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
485 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
486 transaction abort!
486 transaction abort!
487 rollback completed
487 rollback completed
488 abort: acl: access denied for changeset 911600dab2ae
488 abort: acl: access denied for changeset 911600dab2ae
489 no rollback information available
489 no rollback information available
490 0:6675d58eff77
490 0:6675d58eff77
491
491
492
492
493 Empty [acl.deny]
493 Empty [acl.deny]
494
494
495 $ echo '[acl.deny]' >> $config
495 $ echo '[acl.deny]' >> $config
496 $ do_push barney
496 $ do_push barney
497 Pushing as user barney
497 Pushing as user barney
498 hgrc = """
498 hgrc = """
499 [hooks]
499 [hooks]
500 pretxnchangegroup.acl = python:hgext.acl.hook
500 pretxnchangegroup.acl = python:hgext.acl.hook
501 [acl]
501 [acl]
502 sources = push
502 sources = push
503 [acl.allow]
503 [acl.allow]
504 foo/** = fred
504 foo/** = fred
505 [acl.deny]
505 [acl.deny]
506 """
506 """
507 pushing to ../b
507 pushing to ../b
508 searching for changes
508 searching for changes
509 common changesets up to 6675d58eff77
509 common changesets up to 6675d58eff77
510 3 changesets found
510 3 changesets found
511 list of changesets:
511 list of changesets:
512 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
512 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
513 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
513 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
514 911600dab2ae7a9baff75958b84fe606851ce955
514 911600dab2ae7a9baff75958b84fe606851ce955
515 adding changesets
515 adding changesets
516 bundling changes: 0 chunks
516 bundling changes: 0 chunks
517 bundling changes: 1 chunks
517 bundling changes: 1 chunks
518 bundling changes: 2 chunks
518 bundling changes: 2 chunks
519 bundling changes: 3 chunks
519 bundling changes: 3 chunks
520 bundling changes: 4 chunks
520 bundling changes: 4 chunks
521 bundling changes: 5 chunks
521 bundling changes: 5 chunks
522 bundling changes: 6 chunks
522 bundling changes: 6 chunks
523 bundling changes: 7 chunks
523 bundling changes: 7 chunks
524 bundling changes: 8 chunks
524 bundling changes: 8 chunks
525 bundling changes: 9 chunks
525 bundling changes: 9 chunks
526 bundling manifests: 0 chunks
526 bundling manifests: 0 chunks
527 bundling manifests: 1 chunks
527 bundling manifests: 1 chunks
528 bundling manifests: 2 chunks
528 bundling manifests: 2 chunks
529 bundling manifests: 3 chunks
529 bundling manifests: 3 chunks
530 bundling manifests: 4 chunks
530 bundling manifests: 4 chunks
531 bundling manifests: 5 chunks
531 bundling manifests: 5 chunks
532 bundling manifests: 6 chunks
532 bundling manifests: 6 chunks
533 bundling manifests: 7 chunks
533 bundling manifests: 7 chunks
534 bundling manifests: 8 chunks
534 bundling manifests: 8 chunks
535 bundling manifests: 9 chunks
535 bundling manifests: 9 chunks
536 bundling files: foo/Bar/file.txt 0 chunks
536 bundling files: foo/Bar/file.txt 0 chunks
537 bundling files: foo/Bar/file.txt 1 chunks
537 bundling files: foo/Bar/file.txt 1 chunks
538 bundling files: foo/Bar/file.txt 2 chunks
538 bundling files: foo/Bar/file.txt 2 chunks
539 bundling files: foo/Bar/file.txt 3 chunks
539 bundling files: foo/Bar/file.txt 3 chunks
540 bundling files: foo/file.txt 4 chunks
540 bundling files: foo/file.txt 4 chunks
541 bundling files: foo/file.txt 5 chunks
541 bundling files: foo/file.txt 5 chunks
542 bundling files: foo/file.txt 6 chunks
542 bundling files: foo/file.txt 6 chunks
543 bundling files: foo/file.txt 7 chunks
543 bundling files: foo/file.txt 7 chunks
544 bundling files: quux/file.py 8 chunks
544 bundling files: quux/file.py 8 chunks
545 bundling files: quux/file.py 9 chunks
545 bundling files: quux/file.py 9 chunks
546 bundling files: quux/file.py 10 chunks
546 bundling files: quux/file.py 10 chunks
547 bundling files: quux/file.py 11 chunks
547 bundling files: quux/file.py 11 chunks
548 changesets: 1 chunks
548 changesets: 1 chunks
549 add changeset ef1ea85a6374
549 add changeset ef1ea85a6374
550 changesets: 2 chunks
550 changesets: 2 chunks
551 add changeset f9cafe1212c8
551 add changeset f9cafe1212c8
552 changesets: 3 chunks
552 changesets: 3 chunks
553 add changeset 911600dab2ae
553 add changeset 911600dab2ae
554 adding manifests
554 adding manifests
555 manifests: 1/3 chunks (33.33%)
555 manifests: 1/3 chunks (33.33%)
556 manifests: 2/3 chunks (66.67%)
556 manifests: 2/3 chunks (66.67%)
557 manifests: 3/3 chunks (100.00%)
557 manifests: 3/3 chunks (100.00%)
558 adding file changes
558 adding file changes
559 adding foo/Bar/file.txt revisions
559 adding foo/Bar/file.txt revisions
560 files: 1/3 chunks (33.33%)
560 files: 1/3 chunks (33.33%)
561 adding foo/file.txt revisions
561 adding foo/file.txt revisions
562 files: 2/3 chunks (66.67%)
562 files: 2/3 chunks (66.67%)
563 adding quux/file.py revisions
563 adding quux/file.py revisions
564 files: 3/3 chunks (100.00%)
564 files: 3/3 chunks (100.00%)
565 added 3 changesets with 3 changes to 3 files
565 added 3 changesets with 3 changes to 3 files
566 calling hook pretxnchangegroup.acl: hgext.acl.hook
566 calling hook pretxnchangegroup.acl: hgext.acl.hook
567 acl: acl.allow.branches not enabled
567 acl: acl.allow.branches not enabled
568 acl: acl.deny.branches not enabled
568 acl: acl.deny.branches not enabled
569 acl: acl.allow enabled, 0 entries for user barney
569 acl: acl.allow enabled, 0 entries for user barney
570 acl: acl.deny enabled, 0 entries for user barney
570 acl: acl.deny enabled, 0 entries for user barney
571 acl: branch access granted: "ef1ea85a6374" on branch "default"
571 acl: branch access granted: "ef1ea85a6374" on branch "default"
572 acl: user barney not allowed on foo/file.txt
572 acl: user barney not allowed on foo/file.txt
573 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
573 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
574 transaction abort!
574 transaction abort!
575 rollback completed
575 rollback completed
576 abort: acl: access denied for changeset ef1ea85a6374
576 abort: acl: access denied for changeset ef1ea85a6374
577 no rollback information available
577 no rollback information available
578 0:6675d58eff77
578 0:6675d58eff77
579
579
580
580
581 fred is allowed inside foo/, but not foo/bar/ (case matters)
581 fred is allowed inside foo/, but not foo/bar/ (case matters)
582
582
583 $ echo 'foo/bar/** = fred' >> $config
583 $ echo 'foo/bar/** = fred' >> $config
584 $ do_push fred
584 $ do_push fred
585 Pushing as user fred
585 Pushing as user fred
586 hgrc = """
586 hgrc = """
587 [hooks]
587 [hooks]
588 pretxnchangegroup.acl = python:hgext.acl.hook
588 pretxnchangegroup.acl = python:hgext.acl.hook
589 [acl]
589 [acl]
590 sources = push
590 sources = push
591 [acl.allow]
591 [acl.allow]
592 foo/** = fred
592 foo/** = fred
593 [acl.deny]
593 [acl.deny]
594 foo/bar/** = fred
594 foo/bar/** = fred
595 """
595 """
596 pushing to ../b
596 pushing to ../b
597 searching for changes
597 searching for changes
598 common changesets up to 6675d58eff77
598 common changesets up to 6675d58eff77
599 3 changesets found
599 3 changesets found
600 list of changesets:
600 list of changesets:
601 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
601 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
602 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
602 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
603 911600dab2ae7a9baff75958b84fe606851ce955
603 911600dab2ae7a9baff75958b84fe606851ce955
604 adding changesets
604 adding changesets
605 bundling changes: 0 chunks
605 bundling changes: 0 chunks
606 bundling changes: 1 chunks
606 bundling changes: 1 chunks
607 bundling changes: 2 chunks
607 bundling changes: 2 chunks
608 bundling changes: 3 chunks
608 bundling changes: 3 chunks
609 bundling changes: 4 chunks
609 bundling changes: 4 chunks
610 bundling changes: 5 chunks
610 bundling changes: 5 chunks
611 bundling changes: 6 chunks
611 bundling changes: 6 chunks
612 bundling changes: 7 chunks
612 bundling changes: 7 chunks
613 bundling changes: 8 chunks
613 bundling changes: 8 chunks
614 bundling changes: 9 chunks
614 bundling changes: 9 chunks
615 bundling manifests: 0 chunks
615 bundling manifests: 0 chunks
616 bundling manifests: 1 chunks
616 bundling manifests: 1 chunks
617 bundling manifests: 2 chunks
617 bundling manifests: 2 chunks
618 bundling manifests: 3 chunks
618 bundling manifests: 3 chunks
619 bundling manifests: 4 chunks
619 bundling manifests: 4 chunks
620 bundling manifests: 5 chunks
620 bundling manifests: 5 chunks
621 bundling manifests: 6 chunks
621 bundling manifests: 6 chunks
622 bundling manifests: 7 chunks
622 bundling manifests: 7 chunks
623 bundling manifests: 8 chunks
623 bundling manifests: 8 chunks
624 bundling manifests: 9 chunks
624 bundling manifests: 9 chunks
625 bundling files: foo/Bar/file.txt 0 chunks
625 bundling files: foo/Bar/file.txt 0 chunks
626 bundling files: foo/Bar/file.txt 1 chunks
626 bundling files: foo/Bar/file.txt 1 chunks
627 bundling files: foo/Bar/file.txt 2 chunks
627 bundling files: foo/Bar/file.txt 2 chunks
628 bundling files: foo/Bar/file.txt 3 chunks
628 bundling files: foo/Bar/file.txt 3 chunks
629 bundling files: foo/file.txt 4 chunks
629 bundling files: foo/file.txt 4 chunks
630 bundling files: foo/file.txt 5 chunks
630 bundling files: foo/file.txt 5 chunks
631 bundling files: foo/file.txt 6 chunks
631 bundling files: foo/file.txt 6 chunks
632 bundling files: foo/file.txt 7 chunks
632 bundling files: foo/file.txt 7 chunks
633 bundling files: quux/file.py 8 chunks
633 bundling files: quux/file.py 8 chunks
634 bundling files: quux/file.py 9 chunks
634 bundling files: quux/file.py 9 chunks
635 bundling files: quux/file.py 10 chunks
635 bundling files: quux/file.py 10 chunks
636 bundling files: quux/file.py 11 chunks
636 bundling files: quux/file.py 11 chunks
637 changesets: 1 chunks
637 changesets: 1 chunks
638 add changeset ef1ea85a6374
638 add changeset ef1ea85a6374
639 changesets: 2 chunks
639 changesets: 2 chunks
640 add changeset f9cafe1212c8
640 add changeset f9cafe1212c8
641 changesets: 3 chunks
641 changesets: 3 chunks
642 add changeset 911600dab2ae
642 add changeset 911600dab2ae
643 adding manifests
643 adding manifests
644 manifests: 1/3 chunks (33.33%)
644 manifests: 1/3 chunks (33.33%)
645 manifests: 2/3 chunks (66.67%)
645 manifests: 2/3 chunks (66.67%)
646 manifests: 3/3 chunks (100.00%)
646 manifests: 3/3 chunks (100.00%)
647 adding file changes
647 adding file changes
648 adding foo/Bar/file.txt revisions
648 adding foo/Bar/file.txt revisions
649 files: 1/3 chunks (33.33%)
649 files: 1/3 chunks (33.33%)
650 adding foo/file.txt revisions
650 adding foo/file.txt revisions
651 files: 2/3 chunks (66.67%)
651 files: 2/3 chunks (66.67%)
652 adding quux/file.py revisions
652 adding quux/file.py revisions
653 files: 3/3 chunks (100.00%)
653 files: 3/3 chunks (100.00%)
654 added 3 changesets with 3 changes to 3 files
654 added 3 changesets with 3 changes to 3 files
655 calling hook pretxnchangegroup.acl: hgext.acl.hook
655 calling hook pretxnchangegroup.acl: hgext.acl.hook
656 acl: acl.allow.branches not enabled
656 acl: acl.allow.branches not enabled
657 acl: acl.deny.branches not enabled
657 acl: acl.deny.branches not enabled
658 acl: acl.allow enabled, 1 entries for user fred
658 acl: acl.allow enabled, 1 entries for user fred
659 acl: acl.deny enabled, 1 entries for user fred
659 acl: acl.deny enabled, 1 entries for user fred
660 acl: branch access granted: "ef1ea85a6374" on branch "default"
660 acl: branch access granted: "ef1ea85a6374" on branch "default"
661 acl: allowing changeset ef1ea85a6374
661 acl: allowing changeset ef1ea85a6374
662 acl: branch access granted: "f9cafe1212c8" on branch "default"
662 acl: branch access granted: "f9cafe1212c8" on branch "default"
663 acl: allowing changeset f9cafe1212c8
663 acl: allowing changeset f9cafe1212c8
664 acl: branch access granted: "911600dab2ae" on branch "default"
664 acl: branch access granted: "911600dab2ae" on branch "default"
665 acl: user fred not allowed on quux/file.py
665 acl: user fred not allowed on quux/file.py
666 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
666 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
667 transaction abort!
667 transaction abort!
668 rollback completed
668 rollback completed
669 abort: acl: access denied for changeset 911600dab2ae
669 abort: acl: access denied for changeset 911600dab2ae
670 no rollback information available
670 no rollback information available
671 0:6675d58eff77
671 0:6675d58eff77
672
672
673
673
674 fred is allowed inside foo/, but not foo/Bar/
674 fred is allowed inside foo/, but not foo/Bar/
675
675
676 $ echo 'foo/Bar/** = fred' >> $config
676 $ echo 'foo/Bar/** = fred' >> $config
677 $ do_push fred
677 $ do_push fred
678 Pushing as user fred
678 Pushing as user fred
679 hgrc = """
679 hgrc = """
680 [hooks]
680 [hooks]
681 pretxnchangegroup.acl = python:hgext.acl.hook
681 pretxnchangegroup.acl = python:hgext.acl.hook
682 [acl]
682 [acl]
683 sources = push
683 sources = push
684 [acl.allow]
684 [acl.allow]
685 foo/** = fred
685 foo/** = fred
686 [acl.deny]
686 [acl.deny]
687 foo/bar/** = fred
687 foo/bar/** = fred
688 foo/Bar/** = fred
688 foo/Bar/** = fred
689 """
689 """
690 pushing to ../b
690 pushing to ../b
691 searching for changes
691 searching for changes
692 common changesets up to 6675d58eff77
692 common changesets up to 6675d58eff77
693 3 changesets found
693 3 changesets found
694 list of changesets:
694 list of changesets:
695 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
695 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
696 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
696 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
697 911600dab2ae7a9baff75958b84fe606851ce955
697 911600dab2ae7a9baff75958b84fe606851ce955
698 adding changesets
698 adding changesets
699 bundling changes: 0 chunks
699 bundling changes: 0 chunks
700 bundling changes: 1 chunks
700 bundling changes: 1 chunks
701 bundling changes: 2 chunks
701 bundling changes: 2 chunks
702 bundling changes: 3 chunks
702 bundling changes: 3 chunks
703 bundling changes: 4 chunks
703 bundling changes: 4 chunks
704 bundling changes: 5 chunks
704 bundling changes: 5 chunks
705 bundling changes: 6 chunks
705 bundling changes: 6 chunks
706 bundling changes: 7 chunks
706 bundling changes: 7 chunks
707 bundling changes: 8 chunks
707 bundling changes: 8 chunks
708 bundling changes: 9 chunks
708 bundling changes: 9 chunks
709 bundling manifests: 0 chunks
709 bundling manifests: 0 chunks
710 bundling manifests: 1 chunks
710 bundling manifests: 1 chunks
711 bundling manifests: 2 chunks
711 bundling manifests: 2 chunks
712 bundling manifests: 3 chunks
712 bundling manifests: 3 chunks
713 bundling manifests: 4 chunks
713 bundling manifests: 4 chunks
714 bundling manifests: 5 chunks
714 bundling manifests: 5 chunks
715 bundling manifests: 6 chunks
715 bundling manifests: 6 chunks
716 bundling manifests: 7 chunks
716 bundling manifests: 7 chunks
717 bundling manifests: 8 chunks
717 bundling manifests: 8 chunks
718 bundling manifests: 9 chunks
718 bundling manifests: 9 chunks
719 bundling files: foo/Bar/file.txt 0 chunks
719 bundling files: foo/Bar/file.txt 0 chunks
720 bundling files: foo/Bar/file.txt 1 chunks
720 bundling files: foo/Bar/file.txt 1 chunks
721 bundling files: foo/Bar/file.txt 2 chunks
721 bundling files: foo/Bar/file.txt 2 chunks
722 bundling files: foo/Bar/file.txt 3 chunks
722 bundling files: foo/Bar/file.txt 3 chunks
723 bundling files: foo/file.txt 4 chunks
723 bundling files: foo/file.txt 4 chunks
724 bundling files: foo/file.txt 5 chunks
724 bundling files: foo/file.txt 5 chunks
725 bundling files: foo/file.txt 6 chunks
725 bundling files: foo/file.txt 6 chunks
726 bundling files: foo/file.txt 7 chunks
726 bundling files: foo/file.txt 7 chunks
727 bundling files: quux/file.py 8 chunks
727 bundling files: quux/file.py 8 chunks
728 bundling files: quux/file.py 9 chunks
728 bundling files: quux/file.py 9 chunks
729 bundling files: quux/file.py 10 chunks
729 bundling files: quux/file.py 10 chunks
730 bundling files: quux/file.py 11 chunks
730 bundling files: quux/file.py 11 chunks
731 changesets: 1 chunks
731 changesets: 1 chunks
732 add changeset ef1ea85a6374
732 add changeset ef1ea85a6374
733 changesets: 2 chunks
733 changesets: 2 chunks
734 add changeset f9cafe1212c8
734 add changeset f9cafe1212c8
735 changesets: 3 chunks
735 changesets: 3 chunks
736 add changeset 911600dab2ae
736 add changeset 911600dab2ae
737 adding manifests
737 adding manifests
738 manifests: 1/3 chunks (33.33%)
738 manifests: 1/3 chunks (33.33%)
739 manifests: 2/3 chunks (66.67%)
739 manifests: 2/3 chunks (66.67%)
740 manifests: 3/3 chunks (100.00%)
740 manifests: 3/3 chunks (100.00%)
741 adding file changes
741 adding file changes
742 adding foo/Bar/file.txt revisions
742 adding foo/Bar/file.txt revisions
743 files: 1/3 chunks (33.33%)
743 files: 1/3 chunks (33.33%)
744 adding foo/file.txt revisions
744 adding foo/file.txt revisions
745 files: 2/3 chunks (66.67%)
745 files: 2/3 chunks (66.67%)
746 adding quux/file.py revisions
746 adding quux/file.py revisions
747 files: 3/3 chunks (100.00%)
747 files: 3/3 chunks (100.00%)
748 added 3 changesets with 3 changes to 3 files
748 added 3 changesets with 3 changes to 3 files
749 calling hook pretxnchangegroup.acl: hgext.acl.hook
749 calling hook pretxnchangegroup.acl: hgext.acl.hook
750 acl: acl.allow.branches not enabled
750 acl: acl.allow.branches not enabled
751 acl: acl.deny.branches not enabled
751 acl: acl.deny.branches not enabled
752 acl: acl.allow enabled, 1 entries for user fred
752 acl: acl.allow enabled, 1 entries for user fred
753 acl: acl.deny enabled, 2 entries for user fred
753 acl: acl.deny enabled, 2 entries for user fred
754 acl: branch access granted: "ef1ea85a6374" on branch "default"
754 acl: branch access granted: "ef1ea85a6374" on branch "default"
755 acl: allowing changeset ef1ea85a6374
755 acl: allowing changeset ef1ea85a6374
756 acl: branch access granted: "f9cafe1212c8" on branch "default"
756 acl: branch access granted: "f9cafe1212c8" on branch "default"
757 acl: user fred denied on foo/Bar/file.txt
757 acl: user fred denied on foo/Bar/file.txt
758 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
758 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
759 transaction abort!
759 transaction abort!
760 rollback completed
760 rollback completed
761 abort: acl: access denied for changeset f9cafe1212c8
761 abort: acl: access denied for changeset f9cafe1212c8
762 no rollback information available
762 no rollback information available
763 0:6675d58eff77
763 0:6675d58eff77
764
764
765
765
766 $ echo 'barney is not mentioned => not allowed anywhere'
766 $ echo 'barney is not mentioned => not allowed anywhere'
767 barney is not mentioned => not allowed anywhere
767 barney is not mentioned => not allowed anywhere
768 $ do_push barney
768 $ do_push barney
769 Pushing as user barney
769 Pushing as user barney
770 hgrc = """
770 hgrc = """
771 [hooks]
771 [hooks]
772 pretxnchangegroup.acl = python:hgext.acl.hook
772 pretxnchangegroup.acl = python:hgext.acl.hook
773 [acl]
773 [acl]
774 sources = push
774 sources = push
775 [acl.allow]
775 [acl.allow]
776 foo/** = fred
776 foo/** = fred
777 [acl.deny]
777 [acl.deny]
778 foo/bar/** = fred
778 foo/bar/** = fred
779 foo/Bar/** = fred
779 foo/Bar/** = fred
780 """
780 """
781 pushing to ../b
781 pushing to ../b
782 searching for changes
782 searching for changes
783 common changesets up to 6675d58eff77
783 common changesets up to 6675d58eff77
784 3 changesets found
784 3 changesets found
785 list of changesets:
785 list of changesets:
786 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
786 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
787 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
787 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
788 911600dab2ae7a9baff75958b84fe606851ce955
788 911600dab2ae7a9baff75958b84fe606851ce955
789 adding changesets
789 adding changesets
790 bundling changes: 0 chunks
790 bundling changes: 0 chunks
791 bundling changes: 1 chunks
791 bundling changes: 1 chunks
792 bundling changes: 2 chunks
792 bundling changes: 2 chunks
793 bundling changes: 3 chunks
793 bundling changes: 3 chunks
794 bundling changes: 4 chunks
794 bundling changes: 4 chunks
795 bundling changes: 5 chunks
795 bundling changes: 5 chunks
796 bundling changes: 6 chunks
796 bundling changes: 6 chunks
797 bundling changes: 7 chunks
797 bundling changes: 7 chunks
798 bundling changes: 8 chunks
798 bundling changes: 8 chunks
799 bundling changes: 9 chunks
799 bundling changes: 9 chunks
800 bundling manifests: 0 chunks
800 bundling manifests: 0 chunks
801 bundling manifests: 1 chunks
801 bundling manifests: 1 chunks
802 bundling manifests: 2 chunks
802 bundling manifests: 2 chunks
803 bundling manifests: 3 chunks
803 bundling manifests: 3 chunks
804 bundling manifests: 4 chunks
804 bundling manifests: 4 chunks
805 bundling manifests: 5 chunks
805 bundling manifests: 5 chunks
806 bundling manifests: 6 chunks
806 bundling manifests: 6 chunks
807 bundling manifests: 7 chunks
807 bundling manifests: 7 chunks
808 bundling manifests: 8 chunks
808 bundling manifests: 8 chunks
809 bundling manifests: 9 chunks
809 bundling manifests: 9 chunks
810 bundling files: foo/Bar/file.txt 0 chunks
810 bundling files: foo/Bar/file.txt 0 chunks
811 bundling files: foo/Bar/file.txt 1 chunks
811 bundling files: foo/Bar/file.txt 1 chunks
812 bundling files: foo/Bar/file.txt 2 chunks
812 bundling files: foo/Bar/file.txt 2 chunks
813 bundling files: foo/Bar/file.txt 3 chunks
813 bundling files: foo/Bar/file.txt 3 chunks
814 bundling files: foo/file.txt 4 chunks
814 bundling files: foo/file.txt 4 chunks
815 bundling files: foo/file.txt 5 chunks
815 bundling files: foo/file.txt 5 chunks
816 bundling files: foo/file.txt 6 chunks
816 bundling files: foo/file.txt 6 chunks
817 bundling files: foo/file.txt 7 chunks
817 bundling files: foo/file.txt 7 chunks
818 bundling files: quux/file.py 8 chunks
818 bundling files: quux/file.py 8 chunks
819 bundling files: quux/file.py 9 chunks
819 bundling files: quux/file.py 9 chunks
820 bundling files: quux/file.py 10 chunks
820 bundling files: quux/file.py 10 chunks
821 bundling files: quux/file.py 11 chunks
821 bundling files: quux/file.py 11 chunks
822 changesets: 1 chunks
822 changesets: 1 chunks
823 add changeset ef1ea85a6374
823 add changeset ef1ea85a6374
824 changesets: 2 chunks
824 changesets: 2 chunks
825 add changeset f9cafe1212c8
825 add changeset f9cafe1212c8
826 changesets: 3 chunks
826 changesets: 3 chunks
827 add changeset 911600dab2ae
827 add changeset 911600dab2ae
828 adding manifests
828 adding manifests
829 manifests: 1/3 chunks (33.33%)
829 manifests: 1/3 chunks (33.33%)
830 manifests: 2/3 chunks (66.67%)
830 manifests: 2/3 chunks (66.67%)
831 manifests: 3/3 chunks (100.00%)
831 manifests: 3/3 chunks (100.00%)
832 adding file changes
832 adding file changes
833 adding foo/Bar/file.txt revisions
833 adding foo/Bar/file.txt revisions
834 files: 1/3 chunks (33.33%)
834 files: 1/3 chunks (33.33%)
835 adding foo/file.txt revisions
835 adding foo/file.txt revisions
836 files: 2/3 chunks (66.67%)
836 files: 2/3 chunks (66.67%)
837 adding quux/file.py revisions
837 adding quux/file.py revisions
838 files: 3/3 chunks (100.00%)
838 files: 3/3 chunks (100.00%)
839 added 3 changesets with 3 changes to 3 files
839 added 3 changesets with 3 changes to 3 files
840 calling hook pretxnchangegroup.acl: hgext.acl.hook
840 calling hook pretxnchangegroup.acl: hgext.acl.hook
841 acl: acl.allow.branches not enabled
841 acl: acl.allow.branches not enabled
842 acl: acl.deny.branches not enabled
842 acl: acl.deny.branches not enabled
843 acl: acl.allow enabled, 0 entries for user barney
843 acl: acl.allow enabled, 0 entries for user barney
844 acl: acl.deny enabled, 0 entries for user barney
844 acl: acl.deny enabled, 0 entries for user barney
845 acl: branch access granted: "ef1ea85a6374" on branch "default"
845 acl: branch access granted: "ef1ea85a6374" on branch "default"
846 acl: user barney not allowed on foo/file.txt
846 acl: user barney not allowed on foo/file.txt
847 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
847 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset ef1ea85a6374
848 transaction abort!
848 transaction abort!
849 rollback completed
849 rollback completed
850 abort: acl: access denied for changeset ef1ea85a6374
850 abort: acl: access denied for changeset ef1ea85a6374
851 no rollback information available
851 no rollback information available
852 0:6675d58eff77
852 0:6675d58eff77
853
853
854
854
855 barney is allowed everywhere
855 barney is allowed everywhere
856
856
857 $ echo '[acl.allow]' >> $config
857 $ echo '[acl.allow]' >> $config
858 $ echo '** = barney' >> $config
858 $ echo '** = barney' >> $config
859 $ do_push barney
859 $ do_push barney
860 Pushing as user barney
860 Pushing as user barney
861 hgrc = """
861 hgrc = """
862 [hooks]
862 [hooks]
863 pretxnchangegroup.acl = python:hgext.acl.hook
863 pretxnchangegroup.acl = python:hgext.acl.hook
864 [acl]
864 [acl]
865 sources = push
865 sources = push
866 [acl.allow]
866 [acl.allow]
867 foo/** = fred
867 foo/** = fred
868 [acl.deny]
868 [acl.deny]
869 foo/bar/** = fred
869 foo/bar/** = fred
870 foo/Bar/** = fred
870 foo/Bar/** = fred
871 [acl.allow]
871 [acl.allow]
872 ** = barney
872 ** = barney
873 """
873 """
874 pushing to ../b
874 pushing to ../b
875 searching for changes
875 searching for changes
876 common changesets up to 6675d58eff77
876 common changesets up to 6675d58eff77
877 3 changesets found
877 3 changesets found
878 list of changesets:
878 list of changesets:
879 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
879 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
880 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
880 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
881 911600dab2ae7a9baff75958b84fe606851ce955
881 911600dab2ae7a9baff75958b84fe606851ce955
882 adding changesets
882 adding changesets
883 bundling changes: 0 chunks
883 bundling changes: 0 chunks
884 bundling changes: 1 chunks
884 bundling changes: 1 chunks
885 bundling changes: 2 chunks
885 bundling changes: 2 chunks
886 bundling changes: 3 chunks
886 bundling changes: 3 chunks
887 bundling changes: 4 chunks
887 bundling changes: 4 chunks
888 bundling changes: 5 chunks
888 bundling changes: 5 chunks
889 bundling changes: 6 chunks
889 bundling changes: 6 chunks
890 bundling changes: 7 chunks
890 bundling changes: 7 chunks
891 bundling changes: 8 chunks
891 bundling changes: 8 chunks
892 bundling changes: 9 chunks
892 bundling changes: 9 chunks
893 bundling manifests: 0 chunks
893 bundling manifests: 0 chunks
894 bundling manifests: 1 chunks
894 bundling manifests: 1 chunks
895 bundling manifests: 2 chunks
895 bundling manifests: 2 chunks
896 bundling manifests: 3 chunks
896 bundling manifests: 3 chunks
897 bundling manifests: 4 chunks
897 bundling manifests: 4 chunks
898 bundling manifests: 5 chunks
898 bundling manifests: 5 chunks
899 bundling manifests: 6 chunks
899 bundling manifests: 6 chunks
900 bundling manifests: 7 chunks
900 bundling manifests: 7 chunks
901 bundling manifests: 8 chunks
901 bundling manifests: 8 chunks
902 bundling manifests: 9 chunks
902 bundling manifests: 9 chunks
903 bundling files: foo/Bar/file.txt 0 chunks
903 bundling files: foo/Bar/file.txt 0 chunks
904 bundling files: foo/Bar/file.txt 1 chunks
904 bundling files: foo/Bar/file.txt 1 chunks
905 bundling files: foo/Bar/file.txt 2 chunks
905 bundling files: foo/Bar/file.txt 2 chunks
906 bundling files: foo/Bar/file.txt 3 chunks
906 bundling files: foo/Bar/file.txt 3 chunks
907 bundling files: foo/file.txt 4 chunks
907 bundling files: foo/file.txt 4 chunks
908 bundling files: foo/file.txt 5 chunks
908 bundling files: foo/file.txt 5 chunks
909 bundling files: foo/file.txt 6 chunks
909 bundling files: foo/file.txt 6 chunks
910 bundling files: foo/file.txt 7 chunks
910 bundling files: foo/file.txt 7 chunks
911 bundling files: quux/file.py 8 chunks
911 bundling files: quux/file.py 8 chunks
912 bundling files: quux/file.py 9 chunks
912 bundling files: quux/file.py 9 chunks
913 bundling files: quux/file.py 10 chunks
913 bundling files: quux/file.py 10 chunks
914 bundling files: quux/file.py 11 chunks
914 bundling files: quux/file.py 11 chunks
915 changesets: 1 chunks
915 changesets: 1 chunks
916 add changeset ef1ea85a6374
916 add changeset ef1ea85a6374
917 changesets: 2 chunks
917 changesets: 2 chunks
918 add changeset f9cafe1212c8
918 add changeset f9cafe1212c8
919 changesets: 3 chunks
919 changesets: 3 chunks
920 add changeset 911600dab2ae
920 add changeset 911600dab2ae
921 adding manifests
921 adding manifests
922 manifests: 1/3 chunks (33.33%)
922 manifests: 1/3 chunks (33.33%)
923 manifests: 2/3 chunks (66.67%)
923 manifests: 2/3 chunks (66.67%)
924 manifests: 3/3 chunks (100.00%)
924 manifests: 3/3 chunks (100.00%)
925 adding file changes
925 adding file changes
926 adding foo/Bar/file.txt revisions
926 adding foo/Bar/file.txt revisions
927 files: 1/3 chunks (33.33%)
927 files: 1/3 chunks (33.33%)
928 adding foo/file.txt revisions
928 adding foo/file.txt revisions
929 files: 2/3 chunks (66.67%)
929 files: 2/3 chunks (66.67%)
930 adding quux/file.py revisions
930 adding quux/file.py revisions
931 files: 3/3 chunks (100.00%)
931 files: 3/3 chunks (100.00%)
932 added 3 changesets with 3 changes to 3 files
932 added 3 changesets with 3 changes to 3 files
933 calling hook pretxnchangegroup.acl: hgext.acl.hook
933 calling hook pretxnchangegroup.acl: hgext.acl.hook
934 acl: acl.allow.branches not enabled
934 acl: acl.allow.branches not enabled
935 acl: acl.deny.branches not enabled
935 acl: acl.deny.branches not enabled
936 acl: acl.allow enabled, 1 entries for user barney
936 acl: acl.allow enabled, 1 entries for user barney
937 acl: acl.deny enabled, 0 entries for user barney
937 acl: acl.deny enabled, 0 entries for user barney
938 acl: branch access granted: "ef1ea85a6374" on branch "default"
938 acl: branch access granted: "ef1ea85a6374" on branch "default"
939 acl: allowing changeset ef1ea85a6374
939 acl: allowing changeset ef1ea85a6374
940 acl: branch access granted: "f9cafe1212c8" on branch "default"
940 acl: branch access granted: "f9cafe1212c8" on branch "default"
941 acl: allowing changeset f9cafe1212c8
941 acl: allowing changeset f9cafe1212c8
942 acl: branch access granted: "911600dab2ae" on branch "default"
942 acl: branch access granted: "911600dab2ae" on branch "default"
943 acl: allowing changeset 911600dab2ae
943 acl: allowing changeset 911600dab2ae
944 updating the branch cache
944 updating the branch cache
945 rolling back to revision 0 (undo push)
945 rolling back to revision 0 (undo push)
946 0:6675d58eff77
946 0:6675d58eff77
947
947
948
948
949 wilma can change files with a .txt extension
949 wilma can change files with a .txt extension
950
950
951 $ echo '**/*.txt = wilma' >> $config
951 $ echo '**/*.txt = wilma' >> $config
952 $ do_push wilma
952 $ do_push wilma
953 Pushing as user wilma
953 Pushing as user wilma
954 hgrc = """
954 hgrc = """
955 [hooks]
955 [hooks]
956 pretxnchangegroup.acl = python:hgext.acl.hook
956 pretxnchangegroup.acl = python:hgext.acl.hook
957 [acl]
957 [acl]
958 sources = push
958 sources = push
959 [acl.allow]
959 [acl.allow]
960 foo/** = fred
960 foo/** = fred
961 [acl.deny]
961 [acl.deny]
962 foo/bar/** = fred
962 foo/bar/** = fred
963 foo/Bar/** = fred
963 foo/Bar/** = fred
964 [acl.allow]
964 [acl.allow]
965 ** = barney
965 ** = barney
966 **/*.txt = wilma
966 **/*.txt = wilma
967 """
967 """
968 pushing to ../b
968 pushing to ../b
969 searching for changes
969 searching for changes
970 common changesets up to 6675d58eff77
970 common changesets up to 6675d58eff77
971 invalidating branch cache (tip differs)
971 invalidating branch cache (tip differs)
972 3 changesets found
972 3 changesets found
973 list of changesets:
973 list of changesets:
974 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
974 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
975 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
975 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
976 911600dab2ae7a9baff75958b84fe606851ce955
976 911600dab2ae7a9baff75958b84fe606851ce955
977 adding changesets
977 adding changesets
978 bundling changes: 0 chunks
978 bundling changes: 0 chunks
979 bundling changes: 1 chunks
979 bundling changes: 1 chunks
980 bundling changes: 2 chunks
980 bundling changes: 2 chunks
981 bundling changes: 3 chunks
981 bundling changes: 3 chunks
982 bundling changes: 4 chunks
982 bundling changes: 4 chunks
983 bundling changes: 5 chunks
983 bundling changes: 5 chunks
984 bundling changes: 6 chunks
984 bundling changes: 6 chunks
985 bundling changes: 7 chunks
985 bundling changes: 7 chunks
986 bundling changes: 8 chunks
986 bundling changes: 8 chunks
987 bundling changes: 9 chunks
987 bundling changes: 9 chunks
988 bundling manifests: 0 chunks
988 bundling manifests: 0 chunks
989 bundling manifests: 1 chunks
989 bundling manifests: 1 chunks
990 bundling manifests: 2 chunks
990 bundling manifests: 2 chunks
991 bundling manifests: 3 chunks
991 bundling manifests: 3 chunks
992 bundling manifests: 4 chunks
992 bundling manifests: 4 chunks
993 bundling manifests: 5 chunks
993 bundling manifests: 5 chunks
994 bundling manifests: 6 chunks
994 bundling manifests: 6 chunks
995 bundling manifests: 7 chunks
995 bundling manifests: 7 chunks
996 bundling manifests: 8 chunks
996 bundling manifests: 8 chunks
997 bundling manifests: 9 chunks
997 bundling manifests: 9 chunks
998 bundling files: foo/Bar/file.txt 0 chunks
998 bundling files: foo/Bar/file.txt 0 chunks
999 bundling files: foo/Bar/file.txt 1 chunks
999 bundling files: foo/Bar/file.txt 1 chunks
1000 bundling files: foo/Bar/file.txt 2 chunks
1000 bundling files: foo/Bar/file.txt 2 chunks
1001 bundling files: foo/Bar/file.txt 3 chunks
1001 bundling files: foo/Bar/file.txt 3 chunks
1002 bundling files: foo/file.txt 4 chunks
1002 bundling files: foo/file.txt 4 chunks
1003 bundling files: foo/file.txt 5 chunks
1003 bundling files: foo/file.txt 5 chunks
1004 bundling files: foo/file.txt 6 chunks
1004 bundling files: foo/file.txt 6 chunks
1005 bundling files: foo/file.txt 7 chunks
1005 bundling files: foo/file.txt 7 chunks
1006 bundling files: quux/file.py 8 chunks
1006 bundling files: quux/file.py 8 chunks
1007 bundling files: quux/file.py 9 chunks
1007 bundling files: quux/file.py 9 chunks
1008 bundling files: quux/file.py 10 chunks
1008 bundling files: quux/file.py 10 chunks
1009 bundling files: quux/file.py 11 chunks
1009 bundling files: quux/file.py 11 chunks
1010 changesets: 1 chunks
1010 changesets: 1 chunks
1011 add changeset ef1ea85a6374
1011 add changeset ef1ea85a6374
1012 changesets: 2 chunks
1012 changesets: 2 chunks
1013 add changeset f9cafe1212c8
1013 add changeset f9cafe1212c8
1014 changesets: 3 chunks
1014 changesets: 3 chunks
1015 add changeset 911600dab2ae
1015 add changeset 911600dab2ae
1016 adding manifests
1016 adding manifests
1017 manifests: 1/3 chunks (33.33%)
1017 manifests: 1/3 chunks (33.33%)
1018 manifests: 2/3 chunks (66.67%)
1018 manifests: 2/3 chunks (66.67%)
1019 manifests: 3/3 chunks (100.00%)
1019 manifests: 3/3 chunks (100.00%)
1020 adding file changes
1020 adding file changes
1021 adding foo/Bar/file.txt revisions
1021 adding foo/Bar/file.txt revisions
1022 files: 1/3 chunks (33.33%)
1022 files: 1/3 chunks (33.33%)
1023 adding foo/file.txt revisions
1023 adding foo/file.txt revisions
1024 files: 2/3 chunks (66.67%)
1024 files: 2/3 chunks (66.67%)
1025 adding quux/file.py revisions
1025 adding quux/file.py revisions
1026 files: 3/3 chunks (100.00%)
1026 files: 3/3 chunks (100.00%)
1027 added 3 changesets with 3 changes to 3 files
1027 added 3 changesets with 3 changes to 3 files
1028 calling hook pretxnchangegroup.acl: hgext.acl.hook
1028 calling hook pretxnchangegroup.acl: hgext.acl.hook
1029 acl: acl.allow.branches not enabled
1029 acl: acl.allow.branches not enabled
1030 acl: acl.deny.branches not enabled
1030 acl: acl.deny.branches not enabled
1031 acl: acl.allow enabled, 1 entries for user wilma
1031 acl: acl.allow enabled, 1 entries for user wilma
1032 acl: acl.deny enabled, 0 entries for user wilma
1032 acl: acl.deny enabled, 0 entries for user wilma
1033 acl: branch access granted: "ef1ea85a6374" on branch "default"
1033 acl: branch access granted: "ef1ea85a6374" on branch "default"
1034 acl: allowing changeset ef1ea85a6374
1034 acl: allowing changeset ef1ea85a6374
1035 acl: branch access granted: "f9cafe1212c8" on branch "default"
1035 acl: branch access granted: "f9cafe1212c8" on branch "default"
1036 acl: allowing changeset f9cafe1212c8
1036 acl: allowing changeset f9cafe1212c8
1037 acl: branch access granted: "911600dab2ae" on branch "default"
1037 acl: branch access granted: "911600dab2ae" on branch "default"
1038 acl: user wilma not allowed on quux/file.py
1038 acl: user wilma not allowed on quux/file.py
1039 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
1039 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
1040 transaction abort!
1040 transaction abort!
1041 rollback completed
1041 rollback completed
1042 abort: acl: access denied for changeset 911600dab2ae
1042 abort: acl: access denied for changeset 911600dab2ae
1043 no rollback information available
1043 no rollback information available
1044 0:6675d58eff77
1044 0:6675d58eff77
1045
1045
1046
1046
1047 file specified by acl.config does not exist
1047 file specified by acl.config does not exist
1048
1048
1049 $ echo '[acl]' >> $config
1049 $ echo '[acl]' >> $config
1050 $ echo 'config = ../acl.config' >> $config
1050 $ echo 'config = ../acl.config' >> $config
1051 $ do_push barney
1051 $ do_push barney
1052 Pushing as user barney
1052 Pushing as user barney
1053 hgrc = """
1053 hgrc = """
1054 [hooks]
1054 [hooks]
1055 pretxnchangegroup.acl = python:hgext.acl.hook
1055 pretxnchangegroup.acl = python:hgext.acl.hook
1056 [acl]
1056 [acl]
1057 sources = push
1057 sources = push
1058 [acl.allow]
1058 [acl.allow]
1059 foo/** = fred
1059 foo/** = fred
1060 [acl.deny]
1060 [acl.deny]
1061 foo/bar/** = fred
1061 foo/bar/** = fred
1062 foo/Bar/** = fred
1062 foo/Bar/** = fred
1063 [acl.allow]
1063 [acl.allow]
1064 ** = barney
1064 ** = barney
1065 **/*.txt = wilma
1065 **/*.txt = wilma
1066 [acl]
1066 [acl]
1067 config = ../acl.config
1067 config = ../acl.config
1068 """
1068 """
1069 pushing to ../b
1069 pushing to ../b
1070 searching for changes
1070 searching for changes
1071 common changesets up to 6675d58eff77
1071 common changesets up to 6675d58eff77
1072 3 changesets found
1072 3 changesets found
1073 list of changesets:
1073 list of changesets:
1074 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1074 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1075 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1075 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1076 911600dab2ae7a9baff75958b84fe606851ce955
1076 911600dab2ae7a9baff75958b84fe606851ce955
1077 adding changesets
1077 adding changesets
1078 bundling changes: 0 chunks
1078 bundling changes: 0 chunks
1079 bundling changes: 1 chunks
1079 bundling changes: 1 chunks
1080 bundling changes: 2 chunks
1080 bundling changes: 2 chunks
1081 bundling changes: 3 chunks
1081 bundling changes: 3 chunks
1082 bundling changes: 4 chunks
1082 bundling changes: 4 chunks
1083 bundling changes: 5 chunks
1083 bundling changes: 5 chunks
1084 bundling changes: 6 chunks
1084 bundling changes: 6 chunks
1085 bundling changes: 7 chunks
1085 bundling changes: 7 chunks
1086 bundling changes: 8 chunks
1086 bundling changes: 8 chunks
1087 bundling changes: 9 chunks
1087 bundling changes: 9 chunks
1088 bundling manifests: 0 chunks
1088 bundling manifests: 0 chunks
1089 bundling manifests: 1 chunks
1089 bundling manifests: 1 chunks
1090 bundling manifests: 2 chunks
1090 bundling manifests: 2 chunks
1091 bundling manifests: 3 chunks
1091 bundling manifests: 3 chunks
1092 bundling manifests: 4 chunks
1092 bundling manifests: 4 chunks
1093 bundling manifests: 5 chunks
1093 bundling manifests: 5 chunks
1094 bundling manifests: 6 chunks
1094 bundling manifests: 6 chunks
1095 bundling manifests: 7 chunks
1095 bundling manifests: 7 chunks
1096 bundling manifests: 8 chunks
1096 bundling manifests: 8 chunks
1097 bundling manifests: 9 chunks
1097 bundling manifests: 9 chunks
1098 bundling files: foo/Bar/file.txt 0 chunks
1098 bundling files: foo/Bar/file.txt 0 chunks
1099 bundling files: foo/Bar/file.txt 1 chunks
1099 bundling files: foo/Bar/file.txt 1 chunks
1100 bundling files: foo/Bar/file.txt 2 chunks
1100 bundling files: foo/Bar/file.txt 2 chunks
1101 bundling files: foo/Bar/file.txt 3 chunks
1101 bundling files: foo/Bar/file.txt 3 chunks
1102 bundling files: foo/file.txt 4 chunks
1102 bundling files: foo/file.txt 4 chunks
1103 bundling files: foo/file.txt 5 chunks
1103 bundling files: foo/file.txt 5 chunks
1104 bundling files: foo/file.txt 6 chunks
1104 bundling files: foo/file.txt 6 chunks
1105 bundling files: foo/file.txt 7 chunks
1105 bundling files: foo/file.txt 7 chunks
1106 bundling files: quux/file.py 8 chunks
1106 bundling files: quux/file.py 8 chunks
1107 bundling files: quux/file.py 9 chunks
1107 bundling files: quux/file.py 9 chunks
1108 bundling files: quux/file.py 10 chunks
1108 bundling files: quux/file.py 10 chunks
1109 bundling files: quux/file.py 11 chunks
1109 bundling files: quux/file.py 11 chunks
1110 changesets: 1 chunks
1110 changesets: 1 chunks
1111 add changeset ef1ea85a6374
1111 add changeset ef1ea85a6374
1112 changesets: 2 chunks
1112 changesets: 2 chunks
1113 add changeset f9cafe1212c8
1113 add changeset f9cafe1212c8
1114 changesets: 3 chunks
1114 changesets: 3 chunks
1115 add changeset 911600dab2ae
1115 add changeset 911600dab2ae
1116 adding manifests
1116 adding manifests
1117 manifests: 1/3 chunks (33.33%)
1117 manifests: 1/3 chunks (33.33%)
1118 manifests: 2/3 chunks (66.67%)
1118 manifests: 2/3 chunks (66.67%)
1119 manifests: 3/3 chunks (100.00%)
1119 manifests: 3/3 chunks (100.00%)
1120 adding file changes
1120 adding file changes
1121 adding foo/Bar/file.txt revisions
1121 adding foo/Bar/file.txt revisions
1122 files: 1/3 chunks (33.33%)
1122 files: 1/3 chunks (33.33%)
1123 adding foo/file.txt revisions
1123 adding foo/file.txt revisions
1124 files: 2/3 chunks (66.67%)
1124 files: 2/3 chunks (66.67%)
1125 adding quux/file.py revisions
1125 adding quux/file.py revisions
1126 files: 3/3 chunks (100.00%)
1126 files: 3/3 chunks (100.00%)
1127 added 3 changesets with 3 changes to 3 files
1127 added 3 changesets with 3 changes to 3 files
1128 calling hook pretxnchangegroup.acl: hgext.acl.hook
1128 calling hook pretxnchangegroup.acl: hgext.acl.hook
1129 error: pretxnchangegroup.acl hook raised an exception: [Errno 2] No such file or directory: '../acl.config'
1129 error: pretxnchangegroup.acl hook raised an exception: [Errno 2] No such file or directory: '../acl.config'
1130 transaction abort!
1130 transaction abort!
1131 rollback completed
1131 rollback completed
1132 abort: No such file or directory: ../acl.config
1132 abort: No such file or directory: ../acl.config
1133 no rollback information available
1133 no rollback information available
1134 0:6675d58eff77
1134 0:6675d58eff77
1135
1135
1136
1136
1137 betty is allowed inside foo/ by a acl.config file
1137 betty is allowed inside foo/ by a acl.config file
1138
1138
1139 $ echo '[acl.allow]' >> acl.config
1139 $ echo '[acl.allow]' >> acl.config
1140 $ echo 'foo/** = betty' >> acl.config
1140 $ echo 'foo/** = betty' >> acl.config
1141 $ do_push betty
1141 $ do_push betty
1142 Pushing as user betty
1142 Pushing as user betty
1143 hgrc = """
1143 hgrc = """
1144 [hooks]
1144 [hooks]
1145 pretxnchangegroup.acl = python:hgext.acl.hook
1145 pretxnchangegroup.acl = python:hgext.acl.hook
1146 [acl]
1146 [acl]
1147 sources = push
1147 sources = push
1148 [acl.allow]
1148 [acl.allow]
1149 foo/** = fred
1149 foo/** = fred
1150 [acl.deny]
1150 [acl.deny]
1151 foo/bar/** = fred
1151 foo/bar/** = fred
1152 foo/Bar/** = fred
1152 foo/Bar/** = fred
1153 [acl.allow]
1153 [acl.allow]
1154 ** = barney
1154 ** = barney
1155 **/*.txt = wilma
1155 **/*.txt = wilma
1156 [acl]
1156 [acl]
1157 config = ../acl.config
1157 config = ../acl.config
1158 """
1158 """
1159 acl.config = """
1159 acl.config = """
1160 [acl.allow]
1160 [acl.allow]
1161 foo/** = betty
1161 foo/** = betty
1162 """
1162 """
1163 pushing to ../b
1163 pushing to ../b
1164 searching for changes
1164 searching for changes
1165 common changesets up to 6675d58eff77
1165 common changesets up to 6675d58eff77
1166 3 changesets found
1166 3 changesets found
1167 list of changesets:
1167 list of changesets:
1168 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1168 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1169 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1169 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1170 911600dab2ae7a9baff75958b84fe606851ce955
1170 911600dab2ae7a9baff75958b84fe606851ce955
1171 adding changesets
1171 adding changesets
1172 bundling changes: 0 chunks
1172 bundling changes: 0 chunks
1173 bundling changes: 1 chunks
1173 bundling changes: 1 chunks
1174 bundling changes: 2 chunks
1174 bundling changes: 2 chunks
1175 bundling changes: 3 chunks
1175 bundling changes: 3 chunks
1176 bundling changes: 4 chunks
1176 bundling changes: 4 chunks
1177 bundling changes: 5 chunks
1177 bundling changes: 5 chunks
1178 bundling changes: 6 chunks
1178 bundling changes: 6 chunks
1179 bundling changes: 7 chunks
1179 bundling changes: 7 chunks
1180 bundling changes: 8 chunks
1180 bundling changes: 8 chunks
1181 bundling changes: 9 chunks
1181 bundling changes: 9 chunks
1182 bundling manifests: 0 chunks
1182 bundling manifests: 0 chunks
1183 bundling manifests: 1 chunks
1183 bundling manifests: 1 chunks
1184 bundling manifests: 2 chunks
1184 bundling manifests: 2 chunks
1185 bundling manifests: 3 chunks
1185 bundling manifests: 3 chunks
1186 bundling manifests: 4 chunks
1186 bundling manifests: 4 chunks
1187 bundling manifests: 5 chunks
1187 bundling manifests: 5 chunks
1188 bundling manifests: 6 chunks
1188 bundling manifests: 6 chunks
1189 bundling manifests: 7 chunks
1189 bundling manifests: 7 chunks
1190 bundling manifests: 8 chunks
1190 bundling manifests: 8 chunks
1191 bundling manifests: 9 chunks
1191 bundling manifests: 9 chunks
1192 bundling files: foo/Bar/file.txt 0 chunks
1192 bundling files: foo/Bar/file.txt 0 chunks
1193 bundling files: foo/Bar/file.txt 1 chunks
1193 bundling files: foo/Bar/file.txt 1 chunks
1194 bundling files: foo/Bar/file.txt 2 chunks
1194 bundling files: foo/Bar/file.txt 2 chunks
1195 bundling files: foo/Bar/file.txt 3 chunks
1195 bundling files: foo/Bar/file.txt 3 chunks
1196 bundling files: foo/file.txt 4 chunks
1196 bundling files: foo/file.txt 4 chunks
1197 bundling files: foo/file.txt 5 chunks
1197 bundling files: foo/file.txt 5 chunks
1198 bundling files: foo/file.txt 6 chunks
1198 bundling files: foo/file.txt 6 chunks
1199 bundling files: foo/file.txt 7 chunks
1199 bundling files: foo/file.txt 7 chunks
1200 bundling files: quux/file.py 8 chunks
1200 bundling files: quux/file.py 8 chunks
1201 bundling files: quux/file.py 9 chunks
1201 bundling files: quux/file.py 9 chunks
1202 bundling files: quux/file.py 10 chunks
1202 bundling files: quux/file.py 10 chunks
1203 bundling files: quux/file.py 11 chunks
1203 bundling files: quux/file.py 11 chunks
1204 changesets: 1 chunks
1204 changesets: 1 chunks
1205 add changeset ef1ea85a6374
1205 add changeset ef1ea85a6374
1206 changesets: 2 chunks
1206 changesets: 2 chunks
1207 add changeset f9cafe1212c8
1207 add changeset f9cafe1212c8
1208 changesets: 3 chunks
1208 changesets: 3 chunks
1209 add changeset 911600dab2ae
1209 add changeset 911600dab2ae
1210 adding manifests
1210 adding manifests
1211 manifests: 1/3 chunks (33.33%)
1211 manifests: 1/3 chunks (33.33%)
1212 manifests: 2/3 chunks (66.67%)
1212 manifests: 2/3 chunks (66.67%)
1213 manifests: 3/3 chunks (100.00%)
1213 manifests: 3/3 chunks (100.00%)
1214 adding file changes
1214 adding file changes
1215 adding foo/Bar/file.txt revisions
1215 adding foo/Bar/file.txt revisions
1216 files: 1/3 chunks (33.33%)
1216 files: 1/3 chunks (33.33%)
1217 adding foo/file.txt revisions
1217 adding foo/file.txt revisions
1218 files: 2/3 chunks (66.67%)
1218 files: 2/3 chunks (66.67%)
1219 adding quux/file.py revisions
1219 adding quux/file.py revisions
1220 files: 3/3 chunks (100.00%)
1220 files: 3/3 chunks (100.00%)
1221 added 3 changesets with 3 changes to 3 files
1221 added 3 changesets with 3 changes to 3 files
1222 calling hook pretxnchangegroup.acl: hgext.acl.hook
1222 calling hook pretxnchangegroup.acl: hgext.acl.hook
1223 acl: acl.allow.branches not enabled
1223 acl: acl.allow.branches not enabled
1224 acl: acl.deny.branches not enabled
1224 acl: acl.deny.branches not enabled
1225 acl: acl.allow enabled, 1 entries for user betty
1225 acl: acl.allow enabled, 1 entries for user betty
1226 acl: acl.deny enabled, 0 entries for user betty
1226 acl: acl.deny enabled, 0 entries for user betty
1227 acl: branch access granted: "ef1ea85a6374" on branch "default"
1227 acl: branch access granted: "ef1ea85a6374" on branch "default"
1228 acl: allowing changeset ef1ea85a6374
1228 acl: allowing changeset ef1ea85a6374
1229 acl: branch access granted: "f9cafe1212c8" on branch "default"
1229 acl: branch access granted: "f9cafe1212c8" on branch "default"
1230 acl: allowing changeset f9cafe1212c8
1230 acl: allowing changeset f9cafe1212c8
1231 acl: branch access granted: "911600dab2ae" on branch "default"
1231 acl: branch access granted: "911600dab2ae" on branch "default"
1232 acl: user betty not allowed on quux/file.py
1232 acl: user betty not allowed on quux/file.py
1233 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
1233 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset 911600dab2ae
1234 transaction abort!
1234 transaction abort!
1235 rollback completed
1235 rollback completed
1236 abort: acl: access denied for changeset 911600dab2ae
1236 abort: acl: access denied for changeset 911600dab2ae
1237 no rollback information available
1237 no rollback information available
1238 0:6675d58eff77
1238 0:6675d58eff77
1239
1239
1240
1240
1241 acl.config can set only [acl.allow]/[acl.deny]
1241 acl.config can set only [acl.allow]/[acl.deny]
1242
1242
1243 $ echo '[hooks]' >> acl.config
1243 $ echo '[hooks]' >> acl.config
1244 $ echo 'changegroup.acl = false' >> acl.config
1244 $ echo 'changegroup.acl = false' >> acl.config
1245 $ do_push barney
1245 $ do_push barney
1246 Pushing as user barney
1246 Pushing as user barney
1247 hgrc = """
1247 hgrc = """
1248 [hooks]
1248 [hooks]
1249 pretxnchangegroup.acl = python:hgext.acl.hook
1249 pretxnchangegroup.acl = python:hgext.acl.hook
1250 [acl]
1250 [acl]
1251 sources = push
1251 sources = push
1252 [acl.allow]
1252 [acl.allow]
1253 foo/** = fred
1253 foo/** = fred
1254 [acl.deny]
1254 [acl.deny]
1255 foo/bar/** = fred
1255 foo/bar/** = fred
1256 foo/Bar/** = fred
1256 foo/Bar/** = fred
1257 [acl.allow]
1257 [acl.allow]
1258 ** = barney
1258 ** = barney
1259 **/*.txt = wilma
1259 **/*.txt = wilma
1260 [acl]
1260 [acl]
1261 config = ../acl.config
1261 config = ../acl.config
1262 """
1262 """
1263 acl.config = """
1263 acl.config = """
1264 [acl.allow]
1264 [acl.allow]
1265 foo/** = betty
1265 foo/** = betty
1266 [hooks]
1266 [hooks]
1267 changegroup.acl = false
1267 changegroup.acl = false
1268 """
1268 """
1269 pushing to ../b
1269 pushing to ../b
1270 searching for changes
1270 searching for changes
1271 common changesets up to 6675d58eff77
1271 common changesets up to 6675d58eff77
1272 3 changesets found
1272 3 changesets found
1273 list of changesets:
1273 list of changesets:
1274 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1274 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1275 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1275 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1276 911600dab2ae7a9baff75958b84fe606851ce955
1276 911600dab2ae7a9baff75958b84fe606851ce955
1277 adding changesets
1277 adding changesets
1278 bundling changes: 0 chunks
1278 bundling changes: 0 chunks
1279 bundling changes: 1 chunks
1279 bundling changes: 1 chunks
1280 bundling changes: 2 chunks
1280 bundling changes: 2 chunks
1281 bundling changes: 3 chunks
1281 bundling changes: 3 chunks
1282 bundling changes: 4 chunks
1282 bundling changes: 4 chunks
1283 bundling changes: 5 chunks
1283 bundling changes: 5 chunks
1284 bundling changes: 6 chunks
1284 bundling changes: 6 chunks
1285 bundling changes: 7 chunks
1285 bundling changes: 7 chunks
1286 bundling changes: 8 chunks
1286 bundling changes: 8 chunks
1287 bundling changes: 9 chunks
1287 bundling changes: 9 chunks
1288 bundling manifests: 0 chunks
1288 bundling manifests: 0 chunks
1289 bundling manifests: 1 chunks
1289 bundling manifests: 1 chunks
1290 bundling manifests: 2 chunks
1290 bundling manifests: 2 chunks
1291 bundling manifests: 3 chunks
1291 bundling manifests: 3 chunks
1292 bundling manifests: 4 chunks
1292 bundling manifests: 4 chunks
1293 bundling manifests: 5 chunks
1293 bundling manifests: 5 chunks
1294 bundling manifests: 6 chunks
1294 bundling manifests: 6 chunks
1295 bundling manifests: 7 chunks
1295 bundling manifests: 7 chunks
1296 bundling manifests: 8 chunks
1296 bundling manifests: 8 chunks
1297 bundling manifests: 9 chunks
1297 bundling manifests: 9 chunks
1298 bundling files: foo/Bar/file.txt 0 chunks
1298 bundling files: foo/Bar/file.txt 0 chunks
1299 bundling files: foo/Bar/file.txt 1 chunks
1299 bundling files: foo/Bar/file.txt 1 chunks
1300 bundling files: foo/Bar/file.txt 2 chunks
1300 bundling files: foo/Bar/file.txt 2 chunks
1301 bundling files: foo/Bar/file.txt 3 chunks
1301 bundling files: foo/Bar/file.txt 3 chunks
1302 bundling files: foo/file.txt 4 chunks
1302 bundling files: foo/file.txt 4 chunks
1303 bundling files: foo/file.txt 5 chunks
1303 bundling files: foo/file.txt 5 chunks
1304 bundling files: foo/file.txt 6 chunks
1304 bundling files: foo/file.txt 6 chunks
1305 bundling files: foo/file.txt 7 chunks
1305 bundling files: foo/file.txt 7 chunks
1306 bundling files: quux/file.py 8 chunks
1306 bundling files: quux/file.py 8 chunks
1307 bundling files: quux/file.py 9 chunks
1307 bundling files: quux/file.py 9 chunks
1308 bundling files: quux/file.py 10 chunks
1308 bundling files: quux/file.py 10 chunks
1309 bundling files: quux/file.py 11 chunks
1309 bundling files: quux/file.py 11 chunks
1310 changesets: 1 chunks
1310 changesets: 1 chunks
1311 add changeset ef1ea85a6374
1311 add changeset ef1ea85a6374
1312 changesets: 2 chunks
1312 changesets: 2 chunks
1313 add changeset f9cafe1212c8
1313 add changeset f9cafe1212c8
1314 changesets: 3 chunks
1314 changesets: 3 chunks
1315 add changeset 911600dab2ae
1315 add changeset 911600dab2ae
1316 adding manifests
1316 adding manifests
1317 manifests: 1/3 chunks (33.33%)
1317 manifests: 1/3 chunks (33.33%)
1318 manifests: 2/3 chunks (66.67%)
1318 manifests: 2/3 chunks (66.67%)
1319 manifests: 3/3 chunks (100.00%)
1319 manifests: 3/3 chunks (100.00%)
1320 adding file changes
1320 adding file changes
1321 adding foo/Bar/file.txt revisions
1321 adding foo/Bar/file.txt revisions
1322 files: 1/3 chunks (33.33%)
1322 files: 1/3 chunks (33.33%)
1323 adding foo/file.txt revisions
1323 adding foo/file.txt revisions
1324 files: 2/3 chunks (66.67%)
1324 files: 2/3 chunks (66.67%)
1325 adding quux/file.py revisions
1325 adding quux/file.py revisions
1326 files: 3/3 chunks (100.00%)
1326 files: 3/3 chunks (100.00%)
1327 added 3 changesets with 3 changes to 3 files
1327 added 3 changesets with 3 changes to 3 files
1328 calling hook pretxnchangegroup.acl: hgext.acl.hook
1328 calling hook pretxnchangegroup.acl: hgext.acl.hook
1329 acl: acl.allow.branches not enabled
1329 acl: acl.allow.branches not enabled
1330 acl: acl.deny.branches not enabled
1330 acl: acl.deny.branches not enabled
1331 acl: acl.allow enabled, 1 entries for user barney
1331 acl: acl.allow enabled, 1 entries for user barney
1332 acl: acl.deny enabled, 0 entries for user barney
1332 acl: acl.deny enabled, 0 entries for user barney
1333 acl: branch access granted: "ef1ea85a6374" on branch "default"
1333 acl: branch access granted: "ef1ea85a6374" on branch "default"
1334 acl: allowing changeset ef1ea85a6374
1334 acl: allowing changeset ef1ea85a6374
1335 acl: branch access granted: "f9cafe1212c8" on branch "default"
1335 acl: branch access granted: "f9cafe1212c8" on branch "default"
1336 acl: allowing changeset f9cafe1212c8
1336 acl: allowing changeset f9cafe1212c8
1337 acl: branch access granted: "911600dab2ae" on branch "default"
1337 acl: branch access granted: "911600dab2ae" on branch "default"
1338 acl: allowing changeset 911600dab2ae
1338 acl: allowing changeset 911600dab2ae
1339 updating the branch cache
1339 updating the branch cache
1340 rolling back to revision 0 (undo push)
1340 rolling back to revision 0 (undo push)
1341 0:6675d58eff77
1341 0:6675d58eff77
1342
1342
1343
1343
1344 asterisk
1344 asterisk
1345
1345
1346 $ init_config
1346 $ init_config
1347
1347
1348 asterisk test
1348 asterisk test
1349
1349
1350 $ echo '[acl.allow]' >> $config
1350 $ echo '[acl.allow]' >> $config
1351 $ echo "** = fred" >> $config
1351 $ echo "** = fred" >> $config
1352
1352
1353 fred is always allowed
1353 fred is always allowed
1354
1354
1355 $ do_push fred
1355 $ do_push fred
1356 Pushing as user fred
1356 Pushing as user fred
1357 hgrc = """
1357 hgrc = """
1358 [acl]
1358 [acl]
1359 sources = push
1359 sources = push
1360 [extensions]
1360 [extensions]
1361 [acl.allow]
1361 [acl.allow]
1362 ** = fred
1362 ** = fred
1363 """
1363 """
1364 pushing to ../b
1364 pushing to ../b
1365 searching for changes
1365 searching for changes
1366 common changesets up to 6675d58eff77
1366 common changesets up to 6675d58eff77
1367 invalidating branch cache (tip differs)
1367 invalidating branch cache (tip differs)
1368 3 changesets found
1368 3 changesets found
1369 list of changesets:
1369 list of changesets:
1370 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1370 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1371 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1371 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1372 911600dab2ae7a9baff75958b84fe606851ce955
1372 911600dab2ae7a9baff75958b84fe606851ce955
1373 adding changesets
1373 adding changesets
1374 bundling changes: 0 chunks
1374 bundling changes: 0 chunks
1375 bundling changes: 1 chunks
1375 bundling changes: 1 chunks
1376 bundling changes: 2 chunks
1376 bundling changes: 2 chunks
1377 bundling changes: 3 chunks
1377 bundling changes: 3 chunks
1378 bundling changes: 4 chunks
1378 bundling changes: 4 chunks
1379 bundling changes: 5 chunks
1379 bundling changes: 5 chunks
1380 bundling changes: 6 chunks
1380 bundling changes: 6 chunks
1381 bundling changes: 7 chunks
1381 bundling changes: 7 chunks
1382 bundling changes: 8 chunks
1382 bundling changes: 8 chunks
1383 bundling changes: 9 chunks
1383 bundling changes: 9 chunks
1384 bundling manifests: 0 chunks
1384 bundling manifests: 0 chunks
1385 bundling manifests: 1 chunks
1385 bundling manifests: 1 chunks
1386 bundling manifests: 2 chunks
1386 bundling manifests: 2 chunks
1387 bundling manifests: 3 chunks
1387 bundling manifests: 3 chunks
1388 bundling manifests: 4 chunks
1388 bundling manifests: 4 chunks
1389 bundling manifests: 5 chunks
1389 bundling manifests: 5 chunks
1390 bundling manifests: 6 chunks
1390 bundling manifests: 6 chunks
1391 bundling manifests: 7 chunks
1391 bundling manifests: 7 chunks
1392 bundling manifests: 8 chunks
1392 bundling manifests: 8 chunks
1393 bundling manifests: 9 chunks
1393 bundling manifests: 9 chunks
1394 bundling files: foo/Bar/file.txt 0 chunks
1394 bundling files: foo/Bar/file.txt 0 chunks
1395 bundling files: foo/Bar/file.txt 1 chunks
1395 bundling files: foo/Bar/file.txt 1 chunks
1396 bundling files: foo/Bar/file.txt 2 chunks
1396 bundling files: foo/Bar/file.txt 2 chunks
1397 bundling files: foo/Bar/file.txt 3 chunks
1397 bundling files: foo/Bar/file.txt 3 chunks
1398 bundling files: foo/file.txt 4 chunks
1398 bundling files: foo/file.txt 4 chunks
1399 bundling files: foo/file.txt 5 chunks
1399 bundling files: foo/file.txt 5 chunks
1400 bundling files: foo/file.txt 6 chunks
1400 bundling files: foo/file.txt 6 chunks
1401 bundling files: foo/file.txt 7 chunks
1401 bundling files: foo/file.txt 7 chunks
1402 bundling files: quux/file.py 8 chunks
1402 bundling files: quux/file.py 8 chunks
1403 bundling files: quux/file.py 9 chunks
1403 bundling files: quux/file.py 9 chunks
1404 bundling files: quux/file.py 10 chunks
1404 bundling files: quux/file.py 10 chunks
1405 bundling files: quux/file.py 11 chunks
1405 bundling files: quux/file.py 11 chunks
1406 changesets: 1 chunks
1406 changesets: 1 chunks
1407 add changeset ef1ea85a6374
1407 add changeset ef1ea85a6374
1408 changesets: 2 chunks
1408 changesets: 2 chunks
1409 add changeset f9cafe1212c8
1409 add changeset f9cafe1212c8
1410 changesets: 3 chunks
1410 changesets: 3 chunks
1411 add changeset 911600dab2ae
1411 add changeset 911600dab2ae
1412 adding manifests
1412 adding manifests
1413 manifests: 1/3 chunks (33.33%)
1413 manifests: 1/3 chunks (33.33%)
1414 manifests: 2/3 chunks (66.67%)
1414 manifests: 2/3 chunks (66.67%)
1415 manifests: 3/3 chunks (100.00%)
1415 manifests: 3/3 chunks (100.00%)
1416 adding file changes
1416 adding file changes
1417 adding foo/Bar/file.txt revisions
1417 adding foo/Bar/file.txt revisions
1418 files: 1/3 chunks (33.33%)
1418 files: 1/3 chunks (33.33%)
1419 adding foo/file.txt revisions
1419 adding foo/file.txt revisions
1420 files: 2/3 chunks (66.67%)
1420 files: 2/3 chunks (66.67%)
1421 adding quux/file.py revisions
1421 adding quux/file.py revisions
1422 files: 3/3 chunks (100.00%)
1422 files: 3/3 chunks (100.00%)
1423 added 3 changesets with 3 changes to 3 files
1423 added 3 changesets with 3 changes to 3 files
1424 calling hook pretxnchangegroup.acl: hgext.acl.hook
1424 calling hook pretxnchangegroup.acl: hgext.acl.hook
1425 acl: acl.allow.branches not enabled
1425 acl: acl.allow.branches not enabled
1426 acl: acl.deny.branches not enabled
1426 acl: acl.deny.branches not enabled
1427 acl: acl.allow enabled, 1 entries for user fred
1427 acl: acl.allow enabled, 1 entries for user fred
1428 acl: acl.deny not enabled
1428 acl: acl.deny not enabled
1429 acl: branch access granted: "ef1ea85a6374" on branch "default"
1429 acl: branch access granted: "ef1ea85a6374" on branch "default"
1430 acl: allowing changeset ef1ea85a6374
1430 acl: allowing changeset ef1ea85a6374
1431 acl: branch access granted: "f9cafe1212c8" on branch "default"
1431 acl: branch access granted: "f9cafe1212c8" on branch "default"
1432 acl: allowing changeset f9cafe1212c8
1432 acl: allowing changeset f9cafe1212c8
1433 acl: branch access granted: "911600dab2ae" on branch "default"
1433 acl: branch access granted: "911600dab2ae" on branch "default"
1434 acl: allowing changeset 911600dab2ae
1434 acl: allowing changeset 911600dab2ae
1435 updating the branch cache
1435 updating the branch cache
1436 rolling back to revision 0 (undo push)
1436 rolling back to revision 0 (undo push)
1437 0:6675d58eff77
1437 0:6675d58eff77
1438
1438
1439
1439
1440 $ echo '[acl.deny]' >> $config
1440 $ echo '[acl.deny]' >> $config
1441 $ echo "foo/Bar/** = *" >> $config
1441 $ echo "foo/Bar/** = *" >> $config
1442
1442
1443 no one is allowed inside foo/Bar/
1443 no one is allowed inside foo/Bar/
1444
1444
1445 $ do_push fred
1445 $ do_push fred
1446 Pushing as user fred
1446 Pushing as user fred
1447 hgrc = """
1447 hgrc = """
1448 [acl]
1448 [acl]
1449 sources = push
1449 sources = push
1450 [extensions]
1450 [extensions]
1451 [acl.allow]
1451 [acl.allow]
1452 ** = fred
1452 ** = fred
1453 [acl.deny]
1453 [acl.deny]
1454 foo/Bar/** = *
1454 foo/Bar/** = *
1455 """
1455 """
1456 pushing to ../b
1456 pushing to ../b
1457 searching for changes
1457 searching for changes
1458 common changesets up to 6675d58eff77
1458 common changesets up to 6675d58eff77
1459 invalidating branch cache (tip differs)
1459 invalidating branch cache (tip differs)
1460 3 changesets found
1460 3 changesets found
1461 list of changesets:
1461 list of changesets:
1462 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1462 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1463 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1463 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1464 911600dab2ae7a9baff75958b84fe606851ce955
1464 911600dab2ae7a9baff75958b84fe606851ce955
1465 adding changesets
1465 adding changesets
1466 bundling changes: 0 chunks
1466 bundling changes: 0 chunks
1467 bundling changes: 1 chunks
1467 bundling changes: 1 chunks
1468 bundling changes: 2 chunks
1468 bundling changes: 2 chunks
1469 bundling changes: 3 chunks
1469 bundling changes: 3 chunks
1470 bundling changes: 4 chunks
1470 bundling changes: 4 chunks
1471 bundling changes: 5 chunks
1471 bundling changes: 5 chunks
1472 bundling changes: 6 chunks
1472 bundling changes: 6 chunks
1473 bundling changes: 7 chunks
1473 bundling changes: 7 chunks
1474 bundling changes: 8 chunks
1474 bundling changes: 8 chunks
1475 bundling changes: 9 chunks
1475 bundling changes: 9 chunks
1476 bundling manifests: 0 chunks
1476 bundling manifests: 0 chunks
1477 bundling manifests: 1 chunks
1477 bundling manifests: 1 chunks
1478 bundling manifests: 2 chunks
1478 bundling manifests: 2 chunks
1479 bundling manifests: 3 chunks
1479 bundling manifests: 3 chunks
1480 bundling manifests: 4 chunks
1480 bundling manifests: 4 chunks
1481 bundling manifests: 5 chunks
1481 bundling manifests: 5 chunks
1482 bundling manifests: 6 chunks
1482 bundling manifests: 6 chunks
1483 bundling manifests: 7 chunks
1483 bundling manifests: 7 chunks
1484 bundling manifests: 8 chunks
1484 bundling manifests: 8 chunks
1485 bundling manifests: 9 chunks
1485 bundling manifests: 9 chunks
1486 bundling files: foo/Bar/file.txt 0 chunks
1486 bundling files: foo/Bar/file.txt 0 chunks
1487 bundling files: foo/Bar/file.txt 1 chunks
1487 bundling files: foo/Bar/file.txt 1 chunks
1488 bundling files: foo/Bar/file.txt 2 chunks
1488 bundling files: foo/Bar/file.txt 2 chunks
1489 bundling files: foo/Bar/file.txt 3 chunks
1489 bundling files: foo/Bar/file.txt 3 chunks
1490 bundling files: foo/file.txt 4 chunks
1490 bundling files: foo/file.txt 4 chunks
1491 bundling files: foo/file.txt 5 chunks
1491 bundling files: foo/file.txt 5 chunks
1492 bundling files: foo/file.txt 6 chunks
1492 bundling files: foo/file.txt 6 chunks
1493 bundling files: foo/file.txt 7 chunks
1493 bundling files: foo/file.txt 7 chunks
1494 bundling files: quux/file.py 8 chunks
1494 bundling files: quux/file.py 8 chunks
1495 bundling files: quux/file.py 9 chunks
1495 bundling files: quux/file.py 9 chunks
1496 bundling files: quux/file.py 10 chunks
1496 bundling files: quux/file.py 10 chunks
1497 bundling files: quux/file.py 11 chunks
1497 bundling files: quux/file.py 11 chunks
1498 changesets: 1 chunks
1498 changesets: 1 chunks
1499 add changeset ef1ea85a6374
1499 add changeset ef1ea85a6374
1500 changesets: 2 chunks
1500 changesets: 2 chunks
1501 add changeset f9cafe1212c8
1501 add changeset f9cafe1212c8
1502 changesets: 3 chunks
1502 changesets: 3 chunks
1503 add changeset 911600dab2ae
1503 add changeset 911600dab2ae
1504 adding manifests
1504 adding manifests
1505 manifests: 1/3 chunks (33.33%)
1505 manifests: 1/3 chunks (33.33%)
1506 manifests: 2/3 chunks (66.67%)
1506 manifests: 2/3 chunks (66.67%)
1507 manifests: 3/3 chunks (100.00%)
1507 manifests: 3/3 chunks (100.00%)
1508 adding file changes
1508 adding file changes
1509 adding foo/Bar/file.txt revisions
1509 adding foo/Bar/file.txt revisions
1510 files: 1/3 chunks (33.33%)
1510 files: 1/3 chunks (33.33%)
1511 adding foo/file.txt revisions
1511 adding foo/file.txt revisions
1512 files: 2/3 chunks (66.67%)
1512 files: 2/3 chunks (66.67%)
1513 adding quux/file.py revisions
1513 adding quux/file.py revisions
1514 files: 3/3 chunks (100.00%)
1514 files: 3/3 chunks (100.00%)
1515 added 3 changesets with 3 changes to 3 files
1515 added 3 changesets with 3 changes to 3 files
1516 calling hook pretxnchangegroup.acl: hgext.acl.hook
1516 calling hook pretxnchangegroup.acl: hgext.acl.hook
1517 acl: acl.allow.branches not enabled
1517 acl: acl.allow.branches not enabled
1518 acl: acl.deny.branches not enabled
1518 acl: acl.deny.branches not enabled
1519 acl: acl.allow enabled, 1 entries for user fred
1519 acl: acl.allow enabled, 1 entries for user fred
1520 acl: acl.deny enabled, 1 entries for user fred
1520 acl: acl.deny enabled, 1 entries for user fred
1521 acl: branch access granted: "ef1ea85a6374" on branch "default"
1521 acl: branch access granted: "ef1ea85a6374" on branch "default"
1522 acl: allowing changeset ef1ea85a6374
1522 acl: allowing changeset ef1ea85a6374
1523 acl: branch access granted: "f9cafe1212c8" on branch "default"
1523 acl: branch access granted: "f9cafe1212c8" on branch "default"
1524 acl: user fred denied on foo/Bar/file.txt
1524 acl: user fred denied on foo/Bar/file.txt
1525 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
1525 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
1526 transaction abort!
1526 transaction abort!
1527 rollback completed
1527 rollback completed
1528 abort: acl: access denied for changeset f9cafe1212c8
1528 abort: acl: access denied for changeset f9cafe1212c8
1529 no rollback information available
1529 no rollback information available
1530 0:6675d58eff77
1530 0:6675d58eff77
1531
1531
1532
1532
1533 Groups
1533 Groups
1534
1534
1535 $ init_config
1535 $ init_config
1536
1536
1537 OS-level groups
1537 OS-level groups
1538
1538
1539 $ echo '[acl.allow]' >> $config
1539 $ echo '[acl.allow]' >> $config
1540 $ echo "** = @group1" >> $config
1540 $ echo "** = @group1" >> $config
1541
1541
1542 @group1 is always allowed
1542 @group1 is always allowed
1543
1543
1544 $ do_push fred
1544 $ do_push fred
1545 Pushing as user fred
1545 Pushing as user fred
1546 hgrc = """
1546 hgrc = """
1547 [acl]
1547 [acl]
1548 sources = push
1548 sources = push
1549 [extensions]
1549 [extensions]
1550 [acl.allow]
1550 [acl.allow]
1551 ** = @group1
1551 ** = @group1
1552 """
1552 """
1553 pushing to ../b
1553 pushing to ../b
1554 searching for changes
1554 searching for changes
1555 common changesets up to 6675d58eff77
1555 common changesets up to 6675d58eff77
1556 3 changesets found
1556 3 changesets found
1557 list of changesets:
1557 list of changesets:
1558 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1558 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1559 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1559 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1560 911600dab2ae7a9baff75958b84fe606851ce955
1560 911600dab2ae7a9baff75958b84fe606851ce955
1561 adding changesets
1561 adding changesets
1562 bundling changes: 0 chunks
1562 bundling changes: 0 chunks
1563 bundling changes: 1 chunks
1563 bundling changes: 1 chunks
1564 bundling changes: 2 chunks
1564 bundling changes: 2 chunks
1565 bundling changes: 3 chunks
1565 bundling changes: 3 chunks
1566 bundling changes: 4 chunks
1566 bundling changes: 4 chunks
1567 bundling changes: 5 chunks
1567 bundling changes: 5 chunks
1568 bundling changes: 6 chunks
1568 bundling changes: 6 chunks
1569 bundling changes: 7 chunks
1569 bundling changes: 7 chunks
1570 bundling changes: 8 chunks
1570 bundling changes: 8 chunks
1571 bundling changes: 9 chunks
1571 bundling changes: 9 chunks
1572 bundling manifests: 0 chunks
1572 bundling manifests: 0 chunks
1573 bundling manifests: 1 chunks
1573 bundling manifests: 1 chunks
1574 bundling manifests: 2 chunks
1574 bundling manifests: 2 chunks
1575 bundling manifests: 3 chunks
1575 bundling manifests: 3 chunks
1576 bundling manifests: 4 chunks
1576 bundling manifests: 4 chunks
1577 bundling manifests: 5 chunks
1577 bundling manifests: 5 chunks
1578 bundling manifests: 6 chunks
1578 bundling manifests: 6 chunks
1579 bundling manifests: 7 chunks
1579 bundling manifests: 7 chunks
1580 bundling manifests: 8 chunks
1580 bundling manifests: 8 chunks
1581 bundling manifests: 9 chunks
1581 bundling manifests: 9 chunks
1582 bundling files: foo/Bar/file.txt 0 chunks
1582 bundling files: foo/Bar/file.txt 0 chunks
1583 bundling files: foo/Bar/file.txt 1 chunks
1583 bundling files: foo/Bar/file.txt 1 chunks
1584 bundling files: foo/Bar/file.txt 2 chunks
1584 bundling files: foo/Bar/file.txt 2 chunks
1585 bundling files: foo/Bar/file.txt 3 chunks
1585 bundling files: foo/Bar/file.txt 3 chunks
1586 bundling files: foo/file.txt 4 chunks
1586 bundling files: foo/file.txt 4 chunks
1587 bundling files: foo/file.txt 5 chunks
1587 bundling files: foo/file.txt 5 chunks
1588 bundling files: foo/file.txt 6 chunks
1588 bundling files: foo/file.txt 6 chunks
1589 bundling files: foo/file.txt 7 chunks
1589 bundling files: foo/file.txt 7 chunks
1590 bundling files: quux/file.py 8 chunks
1590 bundling files: quux/file.py 8 chunks
1591 bundling files: quux/file.py 9 chunks
1591 bundling files: quux/file.py 9 chunks
1592 bundling files: quux/file.py 10 chunks
1592 bundling files: quux/file.py 10 chunks
1593 bundling files: quux/file.py 11 chunks
1593 bundling files: quux/file.py 11 chunks
1594 changesets: 1 chunks
1594 changesets: 1 chunks
1595 add changeset ef1ea85a6374
1595 add changeset ef1ea85a6374
1596 changesets: 2 chunks
1596 changesets: 2 chunks
1597 add changeset f9cafe1212c8
1597 add changeset f9cafe1212c8
1598 changesets: 3 chunks
1598 changesets: 3 chunks
1599 add changeset 911600dab2ae
1599 add changeset 911600dab2ae
1600 adding manifests
1600 adding manifests
1601 manifests: 1/3 chunks (33.33%)
1601 manifests: 1/3 chunks (33.33%)
1602 manifests: 2/3 chunks (66.67%)
1602 manifests: 2/3 chunks (66.67%)
1603 manifests: 3/3 chunks (100.00%)
1603 manifests: 3/3 chunks (100.00%)
1604 adding file changes
1604 adding file changes
1605 adding foo/Bar/file.txt revisions
1605 adding foo/Bar/file.txt revisions
1606 files: 1/3 chunks (33.33%)
1606 files: 1/3 chunks (33.33%)
1607 adding foo/file.txt revisions
1607 adding foo/file.txt revisions
1608 files: 2/3 chunks (66.67%)
1608 files: 2/3 chunks (66.67%)
1609 adding quux/file.py revisions
1609 adding quux/file.py revisions
1610 files: 3/3 chunks (100.00%)
1610 files: 3/3 chunks (100.00%)
1611 added 3 changesets with 3 changes to 3 files
1611 added 3 changesets with 3 changes to 3 files
1612 calling hook pretxnchangegroup.acl: hgext.acl.hook
1612 calling hook pretxnchangegroup.acl: hgext.acl.hook
1613 acl: acl.allow.branches not enabled
1613 acl: acl.allow.branches not enabled
1614 acl: acl.deny.branches not enabled
1614 acl: acl.deny.branches not enabled
1615 acl: "group1" not defined in [acl.groups]
1615 acl: "group1" not defined in [acl.groups]
1616 acl: acl.allow enabled, 1 entries for user fred
1616 acl: acl.allow enabled, 1 entries for user fred
1617 acl: acl.deny not enabled
1617 acl: acl.deny not enabled
1618 acl: branch access granted: "ef1ea85a6374" on branch "default"
1618 acl: branch access granted: "ef1ea85a6374" on branch "default"
1619 acl: allowing changeset ef1ea85a6374
1619 acl: allowing changeset ef1ea85a6374
1620 acl: branch access granted: "f9cafe1212c8" on branch "default"
1620 acl: branch access granted: "f9cafe1212c8" on branch "default"
1621 acl: allowing changeset f9cafe1212c8
1621 acl: allowing changeset f9cafe1212c8
1622 acl: branch access granted: "911600dab2ae" on branch "default"
1622 acl: branch access granted: "911600dab2ae" on branch "default"
1623 acl: allowing changeset 911600dab2ae
1623 acl: allowing changeset 911600dab2ae
1624 updating the branch cache
1624 updating the branch cache
1625 rolling back to revision 0 (undo push)
1625 rolling back to revision 0 (undo push)
1626 0:6675d58eff77
1626 0:6675d58eff77
1627
1627
1628
1628
1629 $ echo '[acl.deny]' >> $config
1629 $ echo '[acl.deny]' >> $config
1630 $ echo "foo/Bar/** = @group1" >> $config
1630 $ echo "foo/Bar/** = @group1" >> $config
1631
1631
1632 @group is allowed inside anything but foo/Bar/
1632 @group is allowed inside anything but foo/Bar/
1633
1633
1634 $ do_push fred
1634 $ do_push fred
1635 Pushing as user fred
1635 Pushing as user fred
1636 hgrc = """
1636 hgrc = """
1637 [acl]
1637 [acl]
1638 sources = push
1638 sources = push
1639 [extensions]
1639 [extensions]
1640 [acl.allow]
1640 [acl.allow]
1641 ** = @group1
1641 ** = @group1
1642 [acl.deny]
1642 [acl.deny]
1643 foo/Bar/** = @group1
1643 foo/Bar/** = @group1
1644 """
1644 """
1645 pushing to ../b
1645 pushing to ../b
1646 searching for changes
1646 searching for changes
1647 common changesets up to 6675d58eff77
1647 common changesets up to 6675d58eff77
1648 invalidating branch cache (tip differs)
1648 invalidating branch cache (tip differs)
1649 3 changesets found
1649 3 changesets found
1650 list of changesets:
1650 list of changesets:
1651 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1651 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
1652 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1652 f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
1653 911600dab2ae7a9baff75958b84fe606851ce955
1653 911600dab2ae7a9baff75958b84fe606851ce955
1654 adding changesets
1654 adding changesets
1655 bundling changes: 0 chunks
1655 bundling changes: 0 chunks
1656 bundling changes: 1 chunks
1656 bundling changes: 1 chunks
1657 bundling changes: 2 chunks
1657 bundling changes: 2 chunks
1658 bundling changes: 3 chunks
1658 bundling changes: 3 chunks
1659 bundling changes: 4 chunks
1659 bundling changes: 4 chunks
1660 bundling changes: 5 chunks
1660 bundling changes: 5 chunks
1661 bundling changes: 6 chunks
1661 bundling changes: 6 chunks
1662 bundling changes: 7 chunks
1662 bundling changes: 7 chunks
1663 bundling changes: 8 chunks
1663 bundling changes: 8 chunks
1664 bundling changes: 9 chunks
1664 bundling changes: 9 chunks
1665 bundling manifests: 0 chunks
1665 bundling manifests: 0 chunks
1666 bundling manifests: 1 chunks
1666 bundling manifests: 1 chunks
1667 bundling manifests: 2 chunks
1667 bundling manifests: 2 chunks
1668 bundling manifests: 3 chunks
1668 bundling manifests: 3 chunks
1669 bundling manifests: 4 chunks
1669 bundling manifests: 4 chunks
1670 bundling manifests: 5 chunks
1670 bundling manifests: 5 chunks
1671 bundling manifests: 6 chunks
1671 bundling manifests: 6 chunks
1672 bundling manifests: 7 chunks
1672 bundling manifests: 7 chunks
1673 bundling manifests: 8 chunks
1673 bundling manifests: 8 chunks
1674 bundling manifests: 9 chunks
1674 bundling manifests: 9 chunks
1675 bundling files: foo/Bar/file.txt 0 chunks
1675 bundling files: foo/Bar/file.txt 0 chunks
1676 bundling files: foo/Bar/file.txt 1 chunks
1676 bundling files: foo/Bar/file.txt 1 chunks
1677 bundling files: foo/Bar/file.txt 2 chunks
1677 bundling files: foo/Bar/file.txt 2 chunks
1678 bundling files: foo/Bar/file.txt 3 chunks
1678 bundling files: foo/Bar/file.txt 3 chunks
1679 bundling files: foo/file.txt 4 chunks
1679 bundling files: foo/file.txt 4 chunks
1680 bundling files: foo/file.txt 5 chunks
1680 bundling files: foo/file.txt 5 chunks
1681 bundling files: foo/file.txt 6 chunks
1681 bundling files: foo/file.txt 6 chunks
1682 bundling files: foo/file.txt 7 chunks
1682 bundling files: foo/file.txt 7 chunks
1683 bundling files: quux/file.py 8 chunks
1683 bundling files: quux/file.py 8 chunks
1684 bundling files: quux/file.py 9 chunks
1684 bundling files: quux/file.py 9 chunks
1685 bundling files: quux/file.py 10 chunks
1685 bundling files: quux/file.py 10 chunks
1686 bundling files: quux/file.py 11 chunks
1686 bundling files: quux/file.py 11 chunks
1687 changesets: 1 chunks
1687 changesets: 1 chunks
1688 add changeset ef1ea85a6374
1688 add changeset ef1ea85a6374
1689 changesets: 2 chunks
1689 changesets: 2 chunks
1690 add changeset f9cafe1212c8
1690 add changeset f9cafe1212c8
1691 changesets: 3 chunks
1691 changesets: 3 chunks
1692 add changeset 911600dab2ae
1692 add changeset 911600dab2ae
1693 adding manifests
1693 adding manifests
1694 manifests: 1/3 chunks (33.33%)
1694 manifests: 1/3 chunks (33.33%)
1695 manifests: 2/3 chunks (66.67%)
1695 manifests: 2/3 chunks (66.67%)
1696 manifests: 3/3 chunks (100.00%)
1696 manifests: 3/3 chunks (100.00%)
1697 adding file changes
1697 adding file changes
1698 adding foo/Bar/file.txt revisions
1698 adding foo/Bar/file.txt revisions
1699 files: 1/3 chunks (33.33%)
1699 files: 1/3 chunks (33.33%)
1700 adding foo/file.txt revisions
1700 adding foo/file.txt revisions
1701 files: 2/3 chunks (66.67%)
1701 files: 2/3 chunks (66.67%)
1702 adding quux/file.py revisions
1702 adding quux/file.py revisions
1703 files: 3/3 chunks (100.00%)
1703 files: 3/3 chunks (100.00%)
1704 added 3 changesets with 3 changes to 3 files
1704 added 3 changesets with 3 changes to 3 files
1705 calling hook pretxnchangegroup.acl: hgext.acl.hook
1705 calling hook pretxnchangegroup.acl: hgext.acl.hook
1706 acl: acl.allow.branches not enabled
1706 acl: acl.allow.branches not enabled
1707 acl: acl.deny.branches not enabled
1707 acl: acl.deny.branches not enabled
1708 acl: "group1" not defined in [acl.groups]
1708 acl: "group1" not defined in [acl.groups]
1709 acl: acl.allow enabled, 1 entries for user fred
1709 acl: acl.allow enabled, 1 entries for user fred
1710 acl: "group1" not defined in [acl.groups]
1710 acl: "group1" not defined in [acl.groups]
1711 acl: acl.deny enabled, 1 entries for user fred
1711 acl: acl.deny enabled, 1 entries for user fred
1712 acl: branch access granted: "ef1ea85a6374" on branch "default"
1712 acl: branch access granted: "ef1ea85a6374" on branch "default"
1713 acl: allowing changeset ef1ea85a6374
1713 acl: allowing changeset ef1ea85a6374
1714 acl: branch access granted: "f9cafe1212c8" on branch "default"
1714 acl: branch access granted: "f9cafe1212c8" on branch "default"
1715 acl: user fred denied on foo/Bar/file.txt
1715 acl: user fred denied on foo/Bar/file.txt
1716 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
1716 error: pretxnchangegroup.acl hook failed: acl: access denied for changeset f9cafe1212c8
1717 transaction abort!
1717 transaction abort!
1718 rollback completed
1718 rollback completed
1719 abort: acl: access denied for changeset f9cafe1212c8
1719 abort: acl: access denied for changeset f9cafe1212c8
1720 no rollback information available
1720 no rollback information available
1721 0:6675d58eff77
1721 0:6675d58eff77
1722
1722
1723
1723
1724 Invalid group
1724 Invalid group
1725
1725
1726 Disable the fakegroups trick to get real failures
1726 Disable the fakegroups trick to get real failures
1727
1727
1728 $ grep -v fakegroups $config > config.tmp
1728 $ grep -v fakegroups $config > config.tmp
1729 $ mv config.tmp $config
1729 $ mv config.tmp $config
1730 $ echo '[acl.allow]' >> $config
1730 $ echo '[acl.allow]' >> $config
1731 $ echo "** = @unlikelytoexist" >> $config
1731 $ echo "** = @unlikelytoexist" >> $config
1732 $ do_push fred 2>&1 | grep unlikelytoexist
1732 $ do_push fred 2>&1 | grep unlikelytoexist
1733 ** = @unlikelytoexist
1733 ** = @unlikelytoexist
1734 acl: "unlikelytoexist" not defined in [acl.groups]
1734 acl: "unlikelytoexist" not defined in [acl.groups]
1735 error: pretxnchangegroup.acl hook failed: group 'unlikelytoexist' is undefined
1735 error: pretxnchangegroup.acl hook failed: group 'unlikelytoexist' is undefined
1736 abort: group 'unlikelytoexist' is undefined
1736 abort: group 'unlikelytoexist' is undefined
1737
1738 $ true
@@ -1,102 +1,100
1 $ hg init rep; cd rep
1 $ hg init rep; cd rep
2
2
3 $ touch empty-file
3 $ touch empty-file
4 $ python -c 'for x in range(10000): print x' > large-file
4 $ python -c 'for x in range(10000): print x' > large-file
5
5
6 $ hg addremove
6 $ hg addremove
7 adding empty-file
7 adding empty-file
8 adding large-file
8 adding large-file
9
9
10 $ hg commit -m A
10 $ hg commit -m A
11
11
12 $ rm large-file empty-file
12 $ rm large-file empty-file
13 $ python -c 'for x in range(10,10000): print x' > another-file
13 $ python -c 'for x in range(10,10000): print x' > another-file
14
14
15 $ hg addremove -s50
15 $ hg addremove -s50
16 adding another-file
16 adding another-file
17 removing empty-file
17 removing empty-file
18 removing large-file
18 removing large-file
19 recording removal of large-file as rename to another-file (99% similar)
19 recording removal of large-file as rename to another-file (99% similar)
20
20
21 $ hg commit -m B
21 $ hg commit -m B
22
22
23 comparing two empty files caused ZeroDivisionError in the past
23 comparing two empty files caused ZeroDivisionError in the past
24
24
25 $ hg update -C 0
25 $ hg update -C 0
26 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
26 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
27 $ rm empty-file
27 $ rm empty-file
28 $ touch another-empty-file
28 $ touch another-empty-file
29 $ hg addremove -s50
29 $ hg addremove -s50
30 adding another-empty-file
30 adding another-empty-file
31 removing empty-file
31 removing empty-file
32
32
33 $ cd ..
33 $ cd ..
34
34
35 $ hg init rep2; cd rep2
35 $ hg init rep2; cd rep2
36
36
37 $ python -c 'for x in range(10000): print x' > large-file
37 $ python -c 'for x in range(10000): print x' > large-file
38 $ python -c 'for x in range(50): print x' > tiny-file
38 $ python -c 'for x in range(50): print x' > tiny-file
39
39
40 $ hg addremove
40 $ hg addremove
41 adding large-file
41 adding large-file
42 adding tiny-file
42 adding tiny-file
43
43
44 $ hg commit -m A
44 $ hg commit -m A
45
45
46 $ python -c 'for x in range(70): print x' > small-file
46 $ python -c 'for x in range(70): print x' > small-file
47 $ rm tiny-file
47 $ rm tiny-file
48 $ rm large-file
48 $ rm large-file
49
49
50 $ hg addremove -s50
50 $ hg addremove -s50
51 removing large-file
51 removing large-file
52 adding small-file
52 adding small-file
53 removing tiny-file
53 removing tiny-file
54 recording removal of tiny-file as rename to small-file (82% similar)
54 recording removal of tiny-file as rename to small-file (82% similar)
55
55
56 $ hg commit -m B
56 $ hg commit -m B
57
57
58 should all fail
58 should all fail
59
59
60 $ hg addremove -s foo
60 $ hg addremove -s foo
61 abort: similarity must be a number
61 abort: similarity must be a number
62 [255]
62 [255]
63 $ hg addremove -s -1
63 $ hg addremove -s -1
64 abort: similarity must be between 0 and 100
64 abort: similarity must be between 0 and 100
65 [255]
65 [255]
66 $ hg addremove -s 1e6
66 $ hg addremove -s 1e6
67 abort: similarity must be between 0 and 100
67 abort: similarity must be between 0 and 100
68 [255]
68 [255]
69
69
70 $ cd ..
70 $ cd ..
71
71
72 issue 1527
72 issue 1527
73
73
74 $ hg init rep3; cd rep3
74 $ hg init rep3; cd rep3
75 $ mkdir d
75 $ mkdir d
76 $ echo a > d/a
76 $ echo a > d/a
77 $ hg add d/a
77 $ hg add d/a
78 $ hg commit -m 1
78 $ hg commit -m 1
79
79
80 $ mv d/a d/b
80 $ mv d/a d/b
81 $ hg addremove -s80
81 $ hg addremove -s80
82 removing d/a
82 removing d/a
83 adding d/b
83 adding d/b
84 recording removal of d/a as rename to d/b (100% similar)
84 recording removal of d/a as rename to d/b (100% similar)
85 $ hg debugstate
85 $ hg debugstate
86 r 0 0 1970-01-01 00:00:00 d/a
86 r 0 0 1970-01-01 00:00:00 d/a
87 a 0 -1 unset d/b
87 a 0 -1 unset d/b
88 copy: d/a -> d/b
88 copy: d/a -> d/b
89 $ mv d/b c
89 $ mv d/b c
90
90
91 no copies found here (since the target isn't in d
91 no copies found here (since the target isn't in d
92
92
93 $ hg addremove -s80 d
93 $ hg addremove -s80 d
94 removing d/b
94 removing d/b
95
95
96 copies here
96 copies here
97
97
98 $ hg addremove -s80
98 $ hg addremove -s80
99 adding c
99 adding c
100 recording removal of d/a as rename to c (100% similar)
100 recording removal of d/a as rename to c (100% similar)
101
102 $ true
@@ -1,67 +1,66
1 $ echo "[extensions]" >> $HGRCPATH
1 $ echo "[extensions]" >> $HGRCPATH
2 $ echo "bookmarks=" >> $HGRCPATH
2 $ echo "bookmarks=" >> $HGRCPATH
3
3
4 $ echo "[bookmarks]" >> $HGRCPATH
4 $ echo "[bookmarks]" >> $HGRCPATH
5 $ echo "track.current = True" >> $HGRCPATH
5 $ echo "track.current = True" >> $HGRCPATH
6
6
7 initialize
7 initialize
8
8
9 $ hg init a
9 $ hg init a
10 $ cd a
10 $ cd a
11 $ echo 'test' > test
11 $ echo 'test' > test
12 $ hg commit -Am'test'
12 $ hg commit -Am'test'
13 adding test
13 adding test
14
14
15 set bookmarks
15 set bookmarks
16
16
17 $ hg bookmark X
17 $ hg bookmark X
18 $ hg bookmark Y
18 $ hg bookmark Y
19 $ hg bookmark Z
19 $ hg bookmark Z
20
20
21 import bookmark by name
21 import bookmark by name
22
22
23 $ hg init ../b
23 $ hg init ../b
24 $ cd ../b
24 $ cd ../b
25 $ hg pull ../a
25 $ hg pull ../a
26 pulling from ../a
26 pulling from ../a
27 requesting all changes
27 requesting all changes
28 adding changesets
28 adding changesets
29 adding manifests
29 adding manifests
30 adding file changes
30 adding file changes
31 added 1 changesets with 1 changes to 1 files
31 added 1 changesets with 1 changes to 1 files
32 (run 'hg update' to get a working copy)
32 (run 'hg update' to get a working copy)
33 $ hg bookmarks
33 $ hg bookmarks
34 no bookmarks set
34 no bookmarks set
35 $ hg pull -B X ../a
35 $ hg pull -B X ../a
36 pulling from ../a
36 pulling from ../a
37 searching for changes
37 searching for changes
38 no changes found
38 no changes found
39 importing bookmark X
39 importing bookmark X
40 $ hg bookmark
40 $ hg bookmark
41 X 0:4e3505fd9583
41 X 0:4e3505fd9583
42
42
43 export bookmark by name
43 export bookmark by name
44
44
45 $ hg bookmark W
45 $ hg bookmark W
46 $ hg bookmark foo
46 $ hg bookmark foo
47 $ hg bookmark foobar
47 $ hg bookmark foobar
48 $ hg push -B W ../a
48 $ hg push -B W ../a
49 pushing to ../a
49 pushing to ../a
50 searching for changes
50 searching for changes
51 no changes found
51 no changes found
52 exporting bookmark W
52 exporting bookmark W
53 $ hg -R ../a bookmarks
53 $ hg -R ../a bookmarks
54 Y 0:4e3505fd9583
54 Y 0:4e3505fd9583
55 X 0:4e3505fd9583
55 X 0:4e3505fd9583
56 * Z 0:4e3505fd9583
56 * Z 0:4e3505fd9583
57 W -1:000000000000
57 W -1:000000000000
58
58
59 push/pull name that doesn't exist
59 push/pull name that doesn't exist
60
60
61 $ hg push -B badname ../a
61 $ hg push -B badname ../a
62 bookmark badname does not exist on the local or remote repository!
62 bookmark badname does not exist on the local or remote repository!
63 [2]
63 [2]
64 $ hg pull -B anotherbadname ../a
64 $ hg pull -B anotherbadname ../a
65 abort: remote bookmark anotherbadname not found!
65 abort: remote bookmark anotherbadname not found!
66 [255]
66 [255]
67 $ true
@@ -1,191 +1,189
1 $ echo "[extensions]" >> $HGRCPATH
1 $ echo "[extensions]" >> $HGRCPATH
2 $ echo "bookmarks=" >> $HGRCPATH
2 $ echo "bookmarks=" >> $HGRCPATH
3
3
4 $ hg init
4 $ hg init
5
5
6 no bookmarks
6 no bookmarks
7
7
8 $ hg bookmarks
8 $ hg bookmarks
9 no bookmarks set
9 no bookmarks set
10
10
11 bookmark rev -1
11 bookmark rev -1
12
12
13 $ hg bookmark X
13 $ hg bookmark X
14
14
15 list bookmarks
15 list bookmarks
16
16
17 $ hg bookmarks
17 $ hg bookmarks
18 * X -1:000000000000
18 * X -1:000000000000
19
19
20 list bookmarks with color
20 list bookmarks with color
21
21
22 $ hg --config extensions.color= --config color.mode=ansi \
22 $ hg --config extensions.color= --config color.mode=ansi \
23 > bookmarks --color=always
23 > bookmarks --color=always
24  * X -1:000000000000
24  * X -1:000000000000
25
25
26 $ echo a > a
26 $ echo a > a
27 $ hg add a
27 $ hg add a
28 $ hg commit -m 0
28 $ hg commit -m 0
29
29
30 bookmark X moved to rev 0
30 bookmark X moved to rev 0
31
31
32 $ hg bookmarks
32 $ hg bookmarks
33 * X 0:f7b1eb17ad24
33 * X 0:f7b1eb17ad24
34
34
35 look up bookmark
35 look up bookmark
36
36
37 $ hg log -r X
37 $ hg log -r X
38 changeset: 0:f7b1eb17ad24
38 changeset: 0:f7b1eb17ad24
39 tag: X
39 tag: X
40 tag: tip
40 tag: tip
41 user: test
41 user: test
42 date: Thu Jan 01 00:00:00 1970 +0000
42 date: Thu Jan 01 00:00:00 1970 +0000
43 summary: 0
43 summary: 0
44
44
45
45
46 second bookmark for rev 0
46 second bookmark for rev 0
47
47
48 $ hg bookmark X2
48 $ hg bookmark X2
49
49
50 bookmark rev -1 again
50 bookmark rev -1 again
51
51
52 $ hg bookmark -r null Y
52 $ hg bookmark -r null Y
53
53
54 list bookmarks
54 list bookmarks
55
55
56 $ hg bookmarks
56 $ hg bookmarks
57 * X2 0:f7b1eb17ad24
57 * X2 0:f7b1eb17ad24
58 * X 0:f7b1eb17ad24
58 * X 0:f7b1eb17ad24
59 Y -1:000000000000
59 Y -1:000000000000
60
60
61 $ echo b > b
61 $ echo b > b
62 $ hg add b
62 $ hg add b
63 $ hg commit -m 1
63 $ hg commit -m 1
64
64
65 bookmarks X and X2 moved to rev 1, Y at rev -1
65 bookmarks X and X2 moved to rev 1, Y at rev -1
66
66
67 $ hg bookmarks
67 $ hg bookmarks
68 * X2 1:925d80f479bb
68 * X2 1:925d80f479bb
69 * X 1:925d80f479bb
69 * X 1:925d80f479bb
70 Y -1:000000000000
70 Y -1:000000000000
71
71
72 bookmark rev 0 again
72 bookmark rev 0 again
73
73
74 $ hg bookmark -r 0 Z
74 $ hg bookmark -r 0 Z
75
75
76 $ echo c > c
76 $ echo c > c
77 $ hg add c
77 $ hg add c
78 $ hg commit -m 2
78 $ hg commit -m 2
79
79
80 bookmarks X and X2 moved to rev 2, Y at rev -1, Z at rev 0
80 bookmarks X and X2 moved to rev 2, Y at rev -1, Z at rev 0
81
81
82 $ hg bookmarks
82 $ hg bookmarks
83 * X2 2:0316ce92851d
83 * X2 2:0316ce92851d
84 * X 2:0316ce92851d
84 * X 2:0316ce92851d
85 Z 0:f7b1eb17ad24
85 Z 0:f7b1eb17ad24
86 Y -1:000000000000
86 Y -1:000000000000
87
87
88 rename nonexistent bookmark
88 rename nonexistent bookmark
89
89
90 $ hg bookmark -m A B
90 $ hg bookmark -m A B
91 abort: a bookmark of this name does not exist
91 abort: a bookmark of this name does not exist
92 [255]
92 [255]
93
93
94 rename to existent bookmark
94 rename to existent bookmark
95
95
96 $ hg bookmark -m X Y
96 $ hg bookmark -m X Y
97 abort: a bookmark of the same name already exists
97 abort: a bookmark of the same name already exists
98 [255]
98 [255]
99
99
100 force rename to existent bookmark
100 force rename to existent bookmark
101
101
102 $ hg bookmark -f -m X Y
102 $ hg bookmark -f -m X Y
103
103
104 list bookmarks
104 list bookmarks
105
105
106 $ hg bookmark
106 $ hg bookmark
107 * X2 2:0316ce92851d
107 * X2 2:0316ce92851d
108 * Y 2:0316ce92851d
108 * Y 2:0316ce92851d
109 Z 0:f7b1eb17ad24
109 Z 0:f7b1eb17ad24
110
110
111 rename without new name
111 rename without new name
112
112
113 $ hg bookmark -m Y
113 $ hg bookmark -m Y
114 abort: new bookmark name required
114 abort: new bookmark name required
115 [255]
115 [255]
116
116
117 delete without name
117 delete without name
118
118
119 $ hg bookmark -d
119 $ hg bookmark -d
120 abort: bookmark name required
120 abort: bookmark name required
121 [255]
121 [255]
122
122
123 delete nonexistent bookmark
123 delete nonexistent bookmark
124
124
125 $ hg bookmark -d A
125 $ hg bookmark -d A
126 abort: a bookmark of this name does not exist
126 abort: a bookmark of this name does not exist
127 [255]
127 [255]
128
128
129 bookmark name with spaces should be stripped
129 bookmark name with spaces should be stripped
130
130
131 $ hg bookmark ' x y '
131 $ hg bookmark ' x y '
132
132
133 list bookmarks
133 list bookmarks
134
134
135 $ hg bookmarks
135 $ hg bookmarks
136 * X2 2:0316ce92851d
136 * X2 2:0316ce92851d
137 * Y 2:0316ce92851d
137 * Y 2:0316ce92851d
138 Z 0:f7b1eb17ad24
138 Z 0:f7b1eb17ad24
139 * x y 2:0316ce92851d
139 * x y 2:0316ce92851d
140
140
141 look up stripped bookmark name
141 look up stripped bookmark name
142
142
143 $ hg log -r '"x y"'
143 $ hg log -r '"x y"'
144 changeset: 2:0316ce92851d
144 changeset: 2:0316ce92851d
145 tag: X2
145 tag: X2
146 tag: Y
146 tag: Y
147 tag: tip
147 tag: tip
148 tag: x y
148 tag: x y
149 user: test
149 user: test
150 date: Thu Jan 01 00:00:00 1970 +0000
150 date: Thu Jan 01 00:00:00 1970 +0000
151 summary: 2
151 summary: 2
152
152
153
153
154 reject bookmark name with newline
154 reject bookmark name with newline
155
155
156 $ hg bookmark '
156 $ hg bookmark '
157 > '
157 > '
158 abort: bookmark name cannot contain newlines
158 abort: bookmark name cannot contain newlines
159 [255]
159 [255]
160
160
161 bookmark with existing name
161 bookmark with existing name
162
162
163 $ hg bookmark Z
163 $ hg bookmark Z
164 abort: a bookmark of the same name already exists
164 abort: a bookmark of the same name already exists
165 [255]
165 [255]
166
166
167 force bookmark with existing name
167 force bookmark with existing name
168
168
169 $ hg bookmark -f Z
169 $ hg bookmark -f Z
170
170
171 list bookmarks
171 list bookmarks
172
172
173 $ hg bookmark
173 $ hg bookmark
174 * X2 2:0316ce92851d
174 * X2 2:0316ce92851d
175 * Y 2:0316ce92851d
175 * Y 2:0316ce92851d
176 * Z 2:0316ce92851d
176 * Z 2:0316ce92851d
177 * x y 2:0316ce92851d
177 * x y 2:0316ce92851d
178
178
179 revision but no bookmark name
179 revision but no bookmark name
180
180
181 $ hg bookmark -r .
181 $ hg bookmark -r .
182 abort: bookmark name required
182 abort: bookmark name required
183 [255]
183 [255]
184
184
185 bookmark name with whitespace only
185 bookmark name with whitespace only
186
186
187 $ hg bookmark ' '
187 $ hg bookmark ' '
188 abort: bookmark names cannot consist entirely of whitespace
188 abort: bookmark names cannot consist entirely of whitespace
189 [255]
189 [255]
190
191 $ true
@@ -1,65 +1,63
1 $ unset HGUSER
1 $ unset HGUSER
2 $ EMAIL="My Name <myname@example.com>"
2 $ EMAIL="My Name <myname@example.com>"
3 $ export EMAIL
3 $ export EMAIL
4
4
5 $ hg init test
5 $ hg init test
6 $ cd test
6 $ cd test
7 $ touch asdf
7 $ touch asdf
8 $ hg add asdf
8 $ hg add asdf
9 $ hg commit -m commit-1
9 $ hg commit -m commit-1
10 $ hg tip
10 $ hg tip
11 changeset: 0:53f268a58230
11 changeset: 0:53f268a58230
12 tag: tip
12 tag: tip
13 user: My Name <myname@example.com>
13 user: My Name <myname@example.com>
14 date: Thu Jan 01 00:00:00 1970 +0000
14 date: Thu Jan 01 00:00:00 1970 +0000
15 summary: commit-1
15 summary: commit-1
16
16
17
17
18 $ unset EMAIL
18 $ unset EMAIL
19 $ echo 1234 > asdf
19 $ echo 1234 > asdf
20 $ hg commit -u "foo@bar.com" -m commit-1
20 $ hg commit -u "foo@bar.com" -m commit-1
21 $ hg tip
21 $ hg tip
22 changeset: 1:3871b2a9e9bf
22 changeset: 1:3871b2a9e9bf
23 tag: tip
23 tag: tip
24 user: foo@bar.com
24 user: foo@bar.com
25 date: Thu Jan 01 00:00:00 1970 +0000
25 date: Thu Jan 01 00:00:00 1970 +0000
26 summary: commit-1
26 summary: commit-1
27
27
28 $ echo "[ui]" >> .hg/hgrc
28 $ echo "[ui]" >> .hg/hgrc
29 $ echo "username = foobar <foo@bar.com>" >> .hg/hgrc
29 $ echo "username = foobar <foo@bar.com>" >> .hg/hgrc
30 $ echo 12 > asdf
30 $ echo 12 > asdf
31 $ hg commit -m commit-1
31 $ hg commit -m commit-1
32 $ hg tip
32 $ hg tip
33 changeset: 2:8eeac6695c1c
33 changeset: 2:8eeac6695c1c
34 tag: tip
34 tag: tip
35 user: foobar <foo@bar.com>
35 user: foobar <foo@bar.com>
36 date: Thu Jan 01 00:00:00 1970 +0000
36 date: Thu Jan 01 00:00:00 1970 +0000
37 summary: commit-1
37 summary: commit-1
38
38
39 $ echo 1 > asdf
39 $ echo 1 > asdf
40 $ hg commit -u "foo@bar.com" -m commit-1
40 $ hg commit -u "foo@bar.com" -m commit-1
41 $ hg tip
41 $ hg tip
42 changeset: 3:957606a725e4
42 changeset: 3:957606a725e4
43 tag: tip
43 tag: tip
44 user: foo@bar.com
44 user: foo@bar.com
45 date: Thu Jan 01 00:00:00 1970 +0000
45 date: Thu Jan 01 00:00:00 1970 +0000
46 summary: commit-1
46 summary: commit-1
47
47
48 $ echo 123 > asdf
48 $ echo 123 > asdf
49 $ echo "[ui]" > .hg/hgrc
49 $ echo "[ui]" > .hg/hgrc
50 $ echo "username = " >> .hg/hgrc
50 $ echo "username = " >> .hg/hgrc
51 $ hg commit -m commit-1
51 $ hg commit -m commit-1
52 abort: no username supplied (see "hg help config")
52 abort: no username supplied (see "hg help config")
53 [255]
53 [255]
54 $ rm .hg/hgrc
54 $ rm .hg/hgrc
55 $ hg commit -m commit-1 2>&1
55 $ hg commit -m commit-1 2>&1
56 No username found, using '[^']*' instead
56 No username found, using '[^']*' instead
57
57
58 $ echo space > asdf
58 $ echo space > asdf
59 $ hg commit -u ' ' -m commit-1
59 $ hg commit -u ' ' -m commit-1
60 transaction abort!
60 transaction abort!
61 rollback completed
61 rollback completed
62 abort: empty username!
62 abort: empty username!
63 [255]
63 [255]
64
65 $ true
@@ -1,42 +1,40
1 $ hg init
1 $ hg init
2 $ touch a
2 $ touch a
3 $ hg add a
3 $ hg add a
4 $ hg ci -m "a"
4 $ hg ci -m "a"
5
5
6 $ echo 123 > b
6 $ echo 123 > b
7 $ hg add b
7 $ hg add b
8 $ hg diff --nodates
8 $ hg diff --nodates
9 diff -r 3903775176ed b
9 diff -r 3903775176ed b
10 --- /dev/null
10 --- /dev/null
11 +++ b/b
11 +++ b/b
12 @@ -0,0 +1,1 @@
12 @@ -0,0 +1,1 @@
13 +123
13 +123
14
14
15 $ hg diff --nodates -r tip
15 $ hg diff --nodates -r tip
16 diff -r 3903775176ed b
16 diff -r 3903775176ed b
17 --- /dev/null
17 --- /dev/null
18 +++ b/b
18 +++ b/b
19 @@ -0,0 +1,1 @@
19 @@ -0,0 +1,1 @@
20 +123
20 +123
21
21
22 $ echo foo > a
22 $ echo foo > a
23 $ hg diff --nodates
23 $ hg diff --nodates
24 diff -r 3903775176ed a
24 diff -r 3903775176ed a
25 --- a/a
25 --- a/a
26 +++ b/a
26 +++ b/a
27 @@ -0,0 +1,1 @@
27 @@ -0,0 +1,1 @@
28 +foo
28 +foo
29 diff -r 3903775176ed b
29 diff -r 3903775176ed b
30 --- /dev/null
30 --- /dev/null
31 +++ b/b
31 +++ b/b
32 @@ -0,0 +1,1 @@
32 @@ -0,0 +1,1 @@
33 +123
33 +123
34
34
35 $ hg diff -r ""
35 $ hg diff -r ""
36 abort: 00changelog.i@: ambiguous identifier!
36 abort: 00changelog.i@: ambiguous identifier!
37 [255]
37 [255]
38 $ hg diff -r tip -r ""
38 $ hg diff -r tip -r ""
39 abort: 00changelog.i@: ambiguous identifier!
39 abort: 00changelog.i@: ambiguous identifier!
40 [255]
40 [255]
41
42 $ true
@@ -1,25 +1,23
1 $ hg init
1 $ hg init
2
2
3 $ echo 123 > a
3 $ echo 123 > a
4 $ hg add a
4 $ hg add a
5 $ hg commit -m "first" a
5 $ hg commit -m "first" a
6
6
7 $ mkdir sub
7 $ mkdir sub
8 $ echo 321 > sub/b
8 $ echo 321 > sub/b
9 $ hg add sub/b
9 $ hg add sub/b
10 $ hg commit -m "second" sub/b
10 $ hg commit -m "second" sub/b
11
11
12 $ cat sub/b
12 $ cat sub/b
13 321
13 321
14
14
15 $ hg co 0
15 $ hg co 0
16 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
16 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
17
17
18 $ cat sub/b 2>/dev/null || echo "sub/b not present"
18 $ cat sub/b 2>/dev/null || echo "sub/b not present"
19 sub/b not present
19 sub/b not present
20
20
21 $ test -d sub || echo "sub not present"
21 $ test -d sub || echo "sub not present"
22 sub not present
22 sub not present
23
23
24 $ true
25
@@ -1,175 +1,173
1 $ echo "[extensions]" >> $HGRCPATH
1 $ echo "[extensions]" >> $HGRCPATH
2 $ echo "extdiff=" >> $HGRCPATH
2 $ echo "extdiff=" >> $HGRCPATH
3
3
4 $ hg init a
4 $ hg init a
5 $ cd a
5 $ cd a
6 $ echo a > a
6 $ echo a > a
7 $ echo b > b
7 $ echo b > b
8 $ hg add
8 $ hg add
9 adding a
9 adding a
10 adding b
10 adding b
11
11
12 Should diff cloned directories:
12 Should diff cloned directories:
13
13
14 $ hg extdiff -o -r $opt
14 $ hg extdiff -o -r $opt
15 Only in a: a
15 Only in a: a
16 Only in a: b
16 Only in a: b
17 [1]
17 [1]
18
18
19 $ echo "[extdiff]" >> $HGRCPATH
19 $ echo "[extdiff]" >> $HGRCPATH
20 $ echo "cmd.falabala=echo" >> $HGRCPATH
20 $ echo "cmd.falabala=echo" >> $HGRCPATH
21 $ echo "opts.falabala=diffing" >> $HGRCPATH
21 $ echo "opts.falabala=diffing" >> $HGRCPATH
22
22
23 $ hg falabala
23 $ hg falabala
24 diffing a.000000000000 a
24 diffing a.000000000000 a
25 [1]
25 [1]
26
26
27 $ hg help falabala
27 $ hg help falabala
28 hg falabala [OPTION]... [FILE]...
28 hg falabala [OPTION]... [FILE]...
29
29
30 use 'echo' to diff repository (or selected files)
30 use 'echo' to diff repository (or selected files)
31
31
32 Show differences between revisions for the specified files, using the
32 Show differences between revisions for the specified files, using the
33 'echo' program.
33 'echo' program.
34
34
35 When two revision arguments are given, then changes are shown between
35 When two revision arguments are given, then changes are shown between
36 those revisions. If only one revision is specified then that revision is
36 those revisions. If only one revision is specified then that revision is
37 compared to the working directory, and, when no revisions are specified,
37 compared to the working directory, and, when no revisions are specified,
38 the working directory files are compared to its parent.
38 the working directory files are compared to its parent.
39
39
40 options:
40 options:
41
41
42 -o --option OPT [+] pass option to comparison program
42 -o --option OPT [+] pass option to comparison program
43 -r --rev REV [+] revision
43 -r --rev REV [+] revision
44 -c --change REV change made by revision
44 -c --change REV change made by revision
45 -I --include PATTERN [+] include names matching the given patterns
45 -I --include PATTERN [+] include names matching the given patterns
46 -X --exclude PATTERN [+] exclude names matching the given patterns
46 -X --exclude PATTERN [+] exclude names matching the given patterns
47
47
48 [+] marked option can be specified multiple times
48 [+] marked option can be specified multiple times
49
49
50 use "hg -v help falabala" to show global options
50 use "hg -v help falabala" to show global options
51
51
52 $ hg ci -d '0 0' -mtest1
52 $ hg ci -d '0 0' -mtest1
53
53
54 $ echo b >> a
54 $ echo b >> a
55 $ hg ci -d '1 0' -mtest2
55 $ hg ci -d '1 0' -mtest2
56
56
57 Should diff cloned files directly:
57 Should diff cloned files directly:
58
58
59 $ hg falabala -r 0:1
59 $ hg falabala -r 0:1
60 diffing a.8a5febb7f867/a a.34eed99112ab/a
60 diffing a.8a5febb7f867/a a.34eed99112ab/a
61 [1]
61 [1]
62
62
63 Test diff during merge:
63 Test diff during merge:
64
64
65 $ hg update -C 0
65 $ hg update -C 0
66 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
66 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
67 $ echo c >> c
67 $ echo c >> c
68 $ hg add c
68 $ hg add c
69 $ hg ci -m "new branch" -d '1 0'
69 $ hg ci -m "new branch" -d '1 0'
70 created new head
70 created new head
71 $ hg merge 1
71 $ hg merge 1
72 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
72 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
73 (branch merge, don't forget to commit)
73 (branch merge, don't forget to commit)
74
74
75 Should diff cloned file against wc file:
75 Should diff cloned file against wc file:
76
76
77 $ hg falabala > out
77 $ hg falabala > out
78 [1]
78 [1]
79
79
80 Cleanup the output since the wc is a tmp directory:
80 Cleanup the output since the wc is a tmp directory:
81
81
82 $ sed 's:\(diffing [^ ]* \).*\(\/test-extdiff\):\1[tmp]\2:' out
82 $ sed 's:\(diffing [^ ]* \).*\(\/test-extdiff\):\1[tmp]\2:' out
83 diffing a.2a13a4d2da36/a [tmp]/test-extdiff.t/a/a
83 diffing a.2a13a4d2da36/a [tmp]/test-extdiff.t/a/a
84
84
85 Test --change option:
85 Test --change option:
86
86
87 $ hg ci -d '2 0' -mtest3
87 $ hg ci -d '2 0' -mtest3
88 $ hg falabala -c 1
88 $ hg falabala -c 1
89 diffing a.8a5febb7f867/a a.34eed99112ab/a
89 diffing a.8a5febb7f867/a a.34eed99112ab/a
90 [1]
90 [1]
91
91
92 Check diff are made from the first parent:
92 Check diff are made from the first parent:
93
93
94 $ hg falabala -c 3 || echo "diff-like tools yield a non-zero exit code"
94 $ hg falabala -c 3 || echo "diff-like tools yield a non-zero exit code"
95 diffing a.2a13a4d2da36/a a.46c0e4daeb72/a
95 diffing a.2a13a4d2da36/a a.46c0e4daeb72/a
96 diff-like tools yield a non-zero exit code
96 diff-like tools yield a non-zero exit code
97
97
98 Test extdiff of multiple files in tmp dir:
98 Test extdiff of multiple files in tmp dir:
99
99
100 $ hg update -C 0 > /dev/null
100 $ hg update -C 0 > /dev/null
101 $ echo changed > a
101 $ echo changed > a
102 $ echo changed > b
102 $ echo changed > b
103 $ chmod +x b
103 $ chmod +x b
104
104
105 Diff in working directory, before:
105 Diff in working directory, before:
106
106
107 $ hg diff --git
107 $ hg diff --git
108 diff --git a/a b/a
108 diff --git a/a b/a
109 --- a/a
109 --- a/a
110 +++ b/a
110 +++ b/a
111 @@ -1,1 +1,1 @@
111 @@ -1,1 +1,1 @@
112 -a
112 -a
113 +changed
113 +changed
114 diff --git a/b b/b
114 diff --git a/b b/b
115 old mode 100644
115 old mode 100644
116 new mode 100755
116 new mode 100755
117 --- a/b
117 --- a/b
118 +++ b/b
118 +++ b/b
119 @@ -1,1 +1,1 @@
119 @@ -1,1 +1,1 @@
120 -b
120 -b
121 +changed
121 +changed
122
122
123
123
124 Edit with extdiff -p:
124 Edit with extdiff -p:
125
125
126 Prepare custom diff/edit tool:
126 Prepare custom diff/edit tool:
127
127
128 $ cat > 'diff tool.py' << EOT
128 $ cat > 'diff tool.py' << EOT
129 > #!/usr/bin/env python
129 > #!/usr/bin/env python
130 > import time
130 > import time
131 > time.sleep(1) # avoid unchanged-timestamp problems
131 > time.sleep(1) # avoid unchanged-timestamp problems
132 > file('a/a', 'ab').write('edited\n')
132 > file('a/a', 'ab').write('edited\n')
133 > file('a/b', 'ab').write('edited\n')
133 > file('a/b', 'ab').write('edited\n')
134 > EOT
134 > EOT
135
135
136 $ chmod +x 'diff tool.py'
136 $ chmod +x 'diff tool.py'
137
137
138 will change to /tmp/extdiff.TMP and populate directories a.TMP and a
138 will change to /tmp/extdiff.TMP and populate directories a.TMP and a
139 and start tool
139 and start tool
140
140
141 $ hg extdiff -p "`pwd`/diff tool.py"
141 $ hg extdiff -p "`pwd`/diff tool.py"
142 [1]
142 [1]
143
143
144 Diff in working directory, after:
144 Diff in working directory, after:
145
145
146 $ hg diff --git
146 $ hg diff --git
147 diff --git a/a b/a
147 diff --git a/a b/a
148 --- a/a
148 --- a/a
149 +++ b/a
149 +++ b/a
150 @@ -1,1 +1,2 @@
150 @@ -1,1 +1,2 @@
151 -a
151 -a
152 +changed
152 +changed
153 +edited
153 +edited
154 diff --git a/b b/b
154 diff --git a/b b/b
155 old mode 100644
155 old mode 100644
156 new mode 100755
156 new mode 100755
157 --- a/b
157 --- a/b
158 +++ b/b
158 +++ b/b
159 @@ -1,1 +1,2 @@
159 @@ -1,1 +1,2 @@
160 -b
160 -b
161 +changed
161 +changed
162 +edited
162 +edited
163
163
164 Test extdiff with --option:
164 Test extdiff with --option:
165
165
166 $ hg extdiff -p echo -o this -c 1
166 $ hg extdiff -p echo -o this -c 1
167 this a.8a5febb7f867/a a.34eed99112ab/a
167 this a.8a5febb7f867/a a.34eed99112ab/a
168 [1]
168 [1]
169
169
170 $ hg falabala -o this -c 1
170 $ hg falabala -o this -c 1
171 diffing this a.8a5febb7f867/a a.34eed99112ab/a
171 diffing this a.8a5febb7f867/a a.34eed99112ab/a
172 [1]
172 [1]
173
173
174 $ true
175
@@ -1,71 +1,69
1 $ "$TESTDIR/hghave" no-outer-repo || exit 80
1 $ "$TESTDIR/hghave" no-outer-repo || exit 80
2
2
3 no repo
3 no repo
4
4
5 $ hg id
5 $ hg id
6 abort: there is no Mercurial repository here (.hg not found)
6 abort: there is no Mercurial repository here (.hg not found)
7 [255]
7 [255]
8
8
9 create repo
9 create repo
10
10
11 $ hg init test
11 $ hg init test
12 $ cd test
12 $ cd test
13 $ echo a > a
13 $ echo a > a
14 $ hg ci -Ama
14 $ hg ci -Ama
15 adding a
15 adding a
16
16
17 basic id usage
17 basic id usage
18
18
19 $ hg id
19 $ hg id
20 cb9a9f314b8b tip
20 cb9a9f314b8b tip
21 $ hg id --debug
21 $ hg id --debug
22 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b tip
22 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b tip
23 $ hg id -q
23 $ hg id -q
24 cb9a9f314b8b
24 cb9a9f314b8b
25 $ hg id -v
25 $ hg id -v
26 cb9a9f314b8b tip
26 cb9a9f314b8b tip
27
27
28 with options
28 with options
29
29
30 $ hg id -r.
30 $ hg id -r.
31 cb9a9f314b8b tip
31 cb9a9f314b8b tip
32 $ hg id -n
32 $ hg id -n
33 0
33 0
34 $ hg id -t
34 $ hg id -t
35 tip
35 tip
36 $ hg id -b
36 $ hg id -b
37 default
37 default
38 $ hg id -i
38 $ hg id -i
39 cb9a9f314b8b
39 cb9a9f314b8b
40 $ hg id -n -t -b -i
40 $ hg id -n -t -b -i
41 cb9a9f314b8b 0 default tip
41 cb9a9f314b8b 0 default tip
42
42
43 with modifications
43 with modifications
44
44
45 $ echo b > a
45 $ echo b > a
46 $ hg id -n -t -b -i
46 $ hg id -n -t -b -i
47 cb9a9f314b8b+ 0+ default tip
47 cb9a9f314b8b+ 0+ default tip
48
48
49 other local repo
49 other local repo
50
50
51 $ cd ..
51 $ cd ..
52 $ hg -R test id
52 $ hg -R test id
53 cb9a9f314b8b+ tip
53 cb9a9f314b8b+ tip
54 $ hg id test
54 $ hg id test
55 cb9a9f314b8b+ tip
55 cb9a9f314b8b+ tip
56
56
57 with remote http repo
57 with remote http repo
58
58
59 $ cd test
59 $ cd test
60 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid
60 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid
61 $ cat hg.pid >> $DAEMON_PIDS
61 $ cat hg.pid >> $DAEMON_PIDS
62 $ hg id http://localhost:$HGPORT1/
62 $ hg id http://localhost:$HGPORT1/
63 cb9a9f314b8b
63 cb9a9f314b8b
64
64
65 remote with tags?
65 remote with tags?
66
66
67 $ hg id -t http://localhost:$HGPORT1/
67 $ hg id -t http://localhost:$HGPORT1/
68 abort: can't query remote revision number, branch, or tags
68 abort: can't query remote revision number, branch, or tags
69 [255]
69 [255]
70
71 $ true # ends with util.Abort -> returns 255
@@ -1,24 +1,22
1 hg debuginstall
1 hg debuginstall
2 $ hg debuginstall
2 $ hg debuginstall
3 Checking encoding (ascii)...
3 Checking encoding (ascii)...
4 Checking installed modules \(.*/mercurial\)...
4 Checking installed modules \(.*/mercurial\)...
5 Checking templates...
5 Checking templates...
6 Checking patch...
6 Checking patch...
7 Checking commit editor...
7 Checking commit editor...
8 Checking username...
8 Checking username...
9 No problems detected
9 No problems detected
10
10
11 hg debuginstall with no username
11 hg debuginstall with no username
12 $ HGUSER= hg debuginstall
12 $ HGUSER= hg debuginstall
13 Checking encoding (ascii)...
13 Checking encoding (ascii)...
14 Checking installed modules \(.*/mercurial\)...
14 Checking installed modules \(.*/mercurial\)...
15 Checking templates...
15 Checking templates...
16 Checking patch...
16 Checking patch...
17 Checking commit editor...
17 Checking commit editor...
18 Checking username...
18 Checking username...
19 no username supplied (see "hg help config")
19 no username supplied (see "hg help config")
20 (specify a username in your configuration file)
20 (specify a username in your configuration file)
21 1 problems detected, please check your install!
21 1 problems detected, please check your install!
22 [1]
22 [1]
23
24 $ true
@@ -1,13 +1,10
1 http://mercurial.selenic.com/bts/issue433
1 http://mercurial.selenic.com/bts/issue433
2
2
3 $ hg init
3 $ hg init
4 $ echo a > a
4 $ echo a > a
5 $ hg commit -Ama
5 $ hg commit -Ama
6 adding a
6 adding a
7
7
8 $ hg parents -r 0 doesnotexist
8 $ hg parents -r 0 doesnotexist
9 abort: 'doesnotexist' not found in manifest!
9 abort: 'doesnotexist' not found in manifest!
10 [255]
10 [255]
11
12 $ true
13
@@ -1,31 +1,29
1 http://mercurial.selenic.com/bts/issue619
1 http://mercurial.selenic.com/bts/issue619
2
2
3 $ hg init
3 $ hg init
4 $ echo a > a
4 $ echo a > a
5 $ hg ci -Ama
5 $ hg ci -Ama
6 adding a
6 adding a
7
7
8 $ echo b > b
8 $ echo b > b
9 $ hg branch b
9 $ hg branch b
10 marked working directory as branch b
10 marked working directory as branch b
11 $ hg ci -Amb
11 $ hg ci -Amb
12 adding b
12 adding b
13
13
14 $ hg co -C 0
14 $ hg co -C 0
15 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
15 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
16
16
17 Fast-forward:
17 Fast-forward:
18
18
19 $ hg merge b
19 $ hg merge b
20 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
20 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
21 (branch merge, don't forget to commit)
21 (branch merge, don't forget to commit)
22 $ hg ci -Ammerge
22 $ hg ci -Ammerge
23
23
24 Bogus fast-forward should fail:
24 Bogus fast-forward should fail:
25
25
26 $ hg merge b
26 $ hg merge b
27 abort: merging with a working directory ancestor has no effect
27 abort: merging with a working directory ancestor has no effect
28 [255]
28 [255]
29
29
30 $ true
31
@@ -1,69 +1,65
1 Source bundle was generated with the following script:
1 Source bundle was generated with the following script:
2
2
3 # hg init
3 # hg init
4 # echo a > a
4 # echo a > a
5 # ln -s a l
5 # ln -s a l
6 # hg ci -Ama -d'0 0'
6 # hg ci -Ama -d'0 0'
7 # mkdir b
7 # mkdir b
8 # echo a > b/a
8 # echo a > b/a
9 # chmod +x b/a
9 # chmod +x b/a
10 # hg ci -Amb -d'1 0'
10 # hg ci -Amb -d'1 0'
11
11
12 $ hg init
12 $ hg init
13 $ hg -q pull "$TESTDIR/test-manifest.hg"
13 $ hg -q pull "$TESTDIR/test-manifest.hg"
14
14
15 The next call is expected to return nothing:
15 The next call is expected to return nothing:
16
16
17 $ hg manifest
17 $ hg manifest
18
18
19 $ hg co
19 $ hg co
20 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
20 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
21
21
22 $ hg manifest
22 $ hg manifest
23 a
23 a
24 b/a
24 b/a
25 l
25 l
26
26
27 $ hg manifest -v
27 $ hg manifest -v
28 644 a
28 644 a
29 755 * b/a
29 755 * b/a
30 644 @ l
30 644 @ l
31
31
32 $ hg manifest --debug
32 $ hg manifest --debug
33 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644 a
33 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644 a
34 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 755 * b/a
34 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 755 * b/a
35 047b75c6d7a3ef6a2243bd0e99f94f6ea6683597 644 @ l
35 047b75c6d7a3ef6a2243bd0e99f94f6ea6683597 644 @ l
36
36
37 $ hg manifest -r 0
37 $ hg manifest -r 0
38 a
38 a
39 l
39 l
40
40
41 $ hg manifest -r 1
41 $ hg manifest -r 1
42 a
42 a
43 b/a
43 b/a
44 l
44 l
45
45
46 $ hg manifest -r tip
46 $ hg manifest -r tip
47 a
47 a
48 b/a
48 b/a
49 l
49 l
50
50
51 $ hg manifest tip
51 $ hg manifest tip
52 a
52 a
53 b/a
53 b/a
54 l
54 l
55
55
56
56
57 The next two calls are expected to abort:
57 The next two calls are expected to abort:
58
58
59 $ hg manifest -r 2
59 $ hg manifest -r 2
60 abort: unknown revision '2'!
60 abort: unknown revision '2'!
61 [255]
61 [255]
62
62
63 $ hg manifest -r tip tip
63 $ hg manifest -r tip tip
64 abort: please specify just one revision
64 abort: please specify just one revision
65 [255]
65 [255]
66
67
68 $ true
69
@@ -1,94 +1,92
1 test that we don't interrupt the merge session if
1 test that we don't interrupt the merge session if
2 a file-level merge failed
2 a file-level merge failed
3
3
4 $ hg init repo
4 $ hg init repo
5 $ cd repo
5 $ cd repo
6
6
7 $ echo foo > foo
7 $ echo foo > foo
8 $ echo a > bar
8 $ echo a > bar
9 $ hg ci -Am 'add foo'
9 $ hg ci -Am 'add foo'
10 adding bar
10 adding bar
11 adding foo
11 adding foo
12
12
13 $ hg mv foo baz
13 $ hg mv foo baz
14 $ echo b >> bar
14 $ echo b >> bar
15 $ echo quux > quux1
15 $ echo quux > quux1
16 $ hg ci -Am 'mv foo baz'
16 $ hg ci -Am 'mv foo baz'
17 adding quux1
17 adding quux1
18
18
19 $ hg up -qC 0
19 $ hg up -qC 0
20 $ echo >> foo
20 $ echo >> foo
21 $ echo c >> bar
21 $ echo c >> bar
22 $ echo quux > quux2
22 $ echo quux > quux2
23 $ hg ci -Am 'change foo'
23 $ hg ci -Am 'change foo'
24 adding quux2
24 adding quux2
25 created new head
25 created new head
26
26
27 test with the rename on the remote side
27 test with the rename on the remote side
28 $ HGMERGE=false hg merge
28 $ HGMERGE=false hg merge
29 merging bar
29 merging bar
30 merging bar failed!
30 merging bar failed!
31 merging foo and baz to baz
31 merging foo and baz to baz
32 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
32 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
33 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
33 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
34 [1]
34 [1]
35 $ hg resolve -l
35 $ hg resolve -l
36 U bar
36 U bar
37 R baz
37 R baz
38
38
39 test with the rename on the local side
39 test with the rename on the local side
40 $ hg up -C 1
40 $ hg up -C 1
41 3 files updated, 0 files merged, 1 files removed, 0 files unresolved
41 3 files updated, 0 files merged, 1 files removed, 0 files unresolved
42 $ HGMERGE=false hg merge
42 $ HGMERGE=false hg merge
43 merging bar
43 merging bar
44 merging bar failed!
44 merging bar failed!
45 merging baz and foo to baz
45 merging baz and foo to baz
46 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
46 1 files updated, 1 files merged, 0 files removed, 1 files unresolved
47 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
47 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
48 [1]
48 [1]
49
49
50 show unresolved
50 show unresolved
51 $ hg resolve -l
51 $ hg resolve -l
52 U bar
52 U bar
53 R baz
53 R baz
54
54
55 unmark baz
55 unmark baz
56 $ hg resolve -u baz
56 $ hg resolve -u baz
57
57
58 show
58 show
59 $ hg resolve -l
59 $ hg resolve -l
60 U bar
60 U bar
61 U baz
61 U baz
62 $ hg st
62 $ hg st
63 M bar
63 M bar
64 M baz
64 M baz
65 M quux2
65 M quux2
66 ? bar.orig
66 ? bar.orig
67
67
68 re-resolve baz
68 re-resolve baz
69 $ hg resolve baz
69 $ hg resolve baz
70 merging baz and foo to baz
70 merging baz and foo to baz
71
71
72 after resolve
72 after resolve
73 $ hg resolve -l
73 $ hg resolve -l
74 U bar
74 U bar
75 R baz
75 R baz
76
76
77 resolve all warning
77 resolve all warning
78 $ hg resolve
78 $ hg resolve
79 abort: no files or directories specified; use --all to remerge all files
79 abort: no files or directories specified; use --all to remerge all files
80 [255]
80 [255]
81
81
82 resolve all
82 resolve all
83 $ hg resolve -a
83 $ hg resolve -a
84 merging bar
84 merging bar
85 warning: conflicts during merge.
85 warning: conflicts during merge.
86 merging bar failed!
86 merging bar failed!
87 [1]
87 [1]
88
88
89 after
89 after
90 $ hg resolve -l
90 $ hg resolve -l
91 U bar
91 U bar
92 R baz
92 R baz
93
94 $ true
@@ -1,17 +1,16
1 $ hg init a
1 $ hg init a
2 $ hg clone a b
2 $ hg clone a b
3 updating to branch default
3 updating to branch default
4 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 $ cd a
5 $ cd a
6 $ echo '[paths]' >> .hg/hgrc
6 $ echo '[paths]' >> .hg/hgrc
7 $ echo 'dupe = ../b' >> .hg/hgrc
7 $ echo 'dupe = ../b' >> .hg/hgrc
8 $ hg in dupe
8 $ hg in dupe
9 comparing with .*/test-paths.t/b
9 comparing with .*/test-paths.t/b
10 no changes found
10 no changes found
11 [1]
11 [1]
12 $ cd ..
12 $ cd ..
13 $ hg -R a in dupe
13 $ hg -R a in dupe
14 comparing with .*/test-paths.t/b
14 comparing with .*/test-paths.t/b
15 no changes found
15 no changes found
16 [1]
16 [1]
17 $ true
@@ -1,54 +1,52
1 $ hg init test
1 $ hg init test
2 $ cd test
2 $ cd test
3
3
4 $ cat > .hg/hgrc <<EOF
4 $ cat > .hg/hgrc <<EOF
5 > [server]
5 > [server]
6 > validate=1
6 > validate=1
7 > EOF
7 > EOF
8
8
9 $ echo alpha > alpha
9 $ echo alpha > alpha
10 $ echo beta > beta
10 $ echo beta > beta
11 $ hg addr
11 $ hg addr
12 adding alpha
12 adding alpha
13 adding beta
13 adding beta
14 $ hg ci -m 1
14 $ hg ci -m 1
15
15
16 $ cd ..
16 $ cd ..
17 $ hg clone test test-clone
17 $ hg clone test test-clone
18 updating to branch default
18 updating to branch default
19 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
19 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
20
20
21 $ cd test-clone
21 $ cd test-clone
22 $ cp .hg/store/data/beta.i tmp
22 $ cp .hg/store/data/beta.i tmp
23 $ echo blah >> beta
23 $ echo blah >> beta
24 $ hg ci -m '2 (corrupt)'
24 $ hg ci -m '2 (corrupt)'
25 $ mv tmp .hg/store/data/beta.i
25 $ mv tmp .hg/store/data/beta.i
26
26
27 Expected to fail:
27 Expected to fail:
28
28
29 $ hg verify
29 $ hg verify
30 checking changesets
30 checking changesets
31 checking manifests
31 checking manifests
32 crosschecking files in changesets and manifests
32 crosschecking files in changesets and manifests
33 checking files
33 checking files
34 beta@1: dddc47b3ba30 in manifests not found
34 beta@1: dddc47b3ba30 in manifests not found
35 2 files, 2 changesets, 2 total revisions
35 2 files, 2 changesets, 2 total revisions
36 1 integrity errors encountered!
36 1 integrity errors encountered!
37 (first damaged changeset appears to be 1)
37 (first damaged changeset appears to be 1)
38 [1]
38 [1]
39
39
40 Expected to fail:
40 Expected to fail:
41
41
42 $ hg push
42 $ hg push
43 pushing to .*
43 pushing to .*
44 searching for changes
44 searching for changes
45 adding changesets
45 adding changesets
46 adding manifests
46 adding manifests
47 adding file changes
47 adding file changes
48 transaction abort!
48 transaction abort!
49 rollback completed
49 rollback completed
50 abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify
50 abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify
51 [255]
51 [255]
52
52
53 $ true
54
@@ -1,16 +1,14
1 $ mkdir t
1 $ mkdir t
2 $ cd t
2 $ cd t
3 $ hg init
3 $ hg init
4 $ echo a > a
4 $ echo a > a
5 $ hg add a
5 $ hg add a
6 $ hg commit -m test
6 $ hg commit -m test
7 $ rm .hg/requires
7 $ rm .hg/requires
8 $ hg tip
8 $ hg tip
9 abort: index 00changelog.i unknown format 2!
9 abort: index 00changelog.i unknown format 2!
10 [255]
10 [255]
11 $ echo indoor-pool > .hg/requires
11 $ echo indoor-pool > .hg/requires
12 $ hg tip
12 $ hg tip
13 abort: requirement 'indoor-pool' not supported!
13 abort: requirement 'indoor-pool' not supported!
14 [255]
14 [255]
15
16 $ true
@@ -1,27 +1,25
1 $ hg init
1 $ hg init
2 $ touch a
2 $ touch a
3
3
4 $ unset HGUSER
4 $ unset HGUSER
5 $ echo "[ui]" >> .hg/hgrc
5 $ echo "[ui]" >> .hg/hgrc
6 $ echo "username= foo" >> .hg/hgrc
6 $ echo "username= foo" >> .hg/hgrc
7 $ echo " bar1" >> .hg/hgrc
7 $ echo " bar1" >> .hg/hgrc
8
8
9 $ hg ci -Am m
9 $ hg ci -Am m
10 adding a
10 adding a
11 abort: username 'foo\nbar1' contains a newline
11 abort: username 'foo\nbar1' contains a newline
12
12
13 [255]
13 [255]
14 $ rm .hg/hgrc
14 $ rm .hg/hgrc
15
15
16 $ HGUSER=`(echo foo; echo bar2)` hg ci -Am m
16 $ HGUSER=`(echo foo; echo bar2)` hg ci -Am m
17 abort: username 'foo\nbar2' contains a newline
17 abort: username 'foo\nbar2' contains a newline
18
18
19 [255]
19 [255]
20 $ hg ci -Am m -u "`(echo foo; echo bar3)`"
20 $ hg ci -Am m -u "`(echo foo; echo bar3)`"
21 transaction abort!
21 transaction abort!
22 rollback completed
22 rollback completed
23 abort: username 'foo\nbar3' contains a newline!
23 abort: username 'foo\nbar3' contains a newline!
24 [255]
24 [255]
25
25
26 $ true
27
General Comments 0
You need to be logged in to leave comments. Login now