##// END OF EJS Templates
test-serve: make the 'listening at *' lines optional...
Matt Harbison -
r31769:594dd384 default
parent child Browse files
Show More
@@ -1,1729 +1,1729 b''
1 1 #require serve
2 2
3 3 hide outer repo and work in dir without '.hg'
4 4 $ hg init
5 5 $ mkdir dir
6 6 $ cd dir
7 7
8 8 Tests some basic hgwebdir functionality. Tests setting up paths and
9 9 collection, different forms of 404s and the subdirectory support.
10 10
11 11 $ mkdir webdir
12 12 $ cd webdir
13 13 $ hg init a
14 14 $ echo a > a/a
15 15 $ hg --cwd a ci -Ama -d'1 0'
16 16 adding a
17 17
18 18 create a mercurial queue repository
19 19
20 20 $ hg --cwd a qinit --config extensions.hgext.mq= -c
21 21 $ hg init b
22 22 $ echo b > b/b
23 23 $ hg --cwd b ci -Amb -d'2 0'
24 24 adding b
25 25
26 26 create a nested repository
27 27
28 28 $ cd b
29 29 $ hg init d
30 30 $ echo d > d/d
31 31 $ hg --cwd d ci -Amd -d'3 0'
32 32 adding d
33 33 $ cd ..
34 34 $ hg init c
35 35 $ echo c > c/c
36 36 $ hg --cwd c ci -Amc -d'3 0'
37 37 adding c
38 38
39 39 create a subdirectory containing repositories and subrepositories
40 40
41 41 $ mkdir notrepo
42 42 $ cd notrepo
43 43 $ hg init e
44 44 $ echo e > e/e
45 45 $ hg --cwd e ci -Ame -d'4 0'
46 46 adding e
47 47 $ hg init e/e2
48 48 $ echo e2 > e/e2/e2
49 49 $ hg --cwd e/e2 ci -Ame2 -d '4 0'
50 50 adding e2
51 51 $ hg init f
52 52 $ echo f > f/f
53 53 $ hg --cwd f ci -Amf -d'4 0'
54 54 adding f
55 55 $ hg init f/f2
56 56 $ echo f2 > f/f2/f2
57 57 $ hg --cwd f/f2 ci -Amf2 -d '4 0'
58 58 adding f2
59 59 $ echo 'f2 = f2' > f/.hgsub
60 60 $ hg -R f ci -Am 'add subrepo' -d'4 0'
61 61 adding .hgsub
62 62 $ cat >> f/.hg/hgrc << EOF
63 63 > [web]
64 64 > name = fancy name for repo f
65 65 > labels = foo, bar
66 66 > EOF
67 67 $ cd ..
68 68
69 69 create repository without .hg/store
70 70
71 71 $ hg init nostore
72 72 $ rm -R nostore/.hg/store
73 73 $ root=`pwd`
74 74 $ cd ..
75 75
76 76 serve
77 77 $ cat > paths.conf <<EOF
78 78 > [paths]
79 79 > a=$root/a
80 80 > b=$root/b
81 81 > EOF
82 82 $ hg serve -p $HGPORT -d --pid-file=hg.pid --webdir-conf paths.conf \
83 83 > -A access-paths.log -E error-paths-1.log
84 84 $ cat hg.pid >> $DAEMON_PIDS
85 85
86 86 should give a 404 - file does not exist
87 87
88 88 $ get-with-headers.py localhost:$HGPORT 'a/file/tip/bork?style=raw'
89 89 404 Not Found
90 90
91 91
92 92 error: bork@8580ff50825a: not found in manifest
93 93 [1]
94 94
95 95 should succeed
96 96
97 97 $ get-with-headers.py localhost:$HGPORT '?style=raw'
98 98 200 Script output follows
99 99
100 100
101 101 /a/
102 102 /b/
103 103
104 104 $ get-with-headers.py localhost:$HGPORT '?style=json'
105 105 200 Script output follows
106 106
107 107 {
108 108 "entries": [{
109 109 "name": "a",
110 110 "description": "unknown",
111 111 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
112 112 "lastchange": [*, *], (glob)
113 113 "labels": []
114 114 }, {
115 115 "name": "b",
116 116 "description": "unknown",
117 117 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
118 118 "lastchange": [*, *], (glob)
119 119 "labels": []
120 120 }]
121 121 } (no-eol)
122 122
123 123 $ get-with-headers.py localhost:$HGPORT 'a/file/tip/a?style=raw'
124 124 200 Script output follows
125 125
126 126 a
127 127 $ get-with-headers.py localhost:$HGPORT 'b/file/tip/b?style=raw'
128 128 200 Script output follows
129 129
130 130 b
131 131
132 132 should give a 404 - repo is not published
133 133
134 134 $ get-with-headers.py localhost:$HGPORT 'c/file/tip/c?style=raw'
135 135 404 Not Found
136 136
137 137
138 138 error: repository c/file/tip/c not found
139 139 [1]
140 140
141 141 atom-log without basedir
142 142
143 143 $ get-with-headers.py localhost:$HGPORT 'a/atom-log' | grep '<link'
144 144 <link rel="self" href="http://*:$HGPORT/a/atom-log"/> (glob)
145 145 <link rel="alternate" href="http://*:$HGPORT/a/"/> (glob)
146 146 <link href="http://*:$HGPORT/a/rev/8580ff50825a"/> (glob)
147 147
148 148 rss-log without basedir
149 149
150 150 $ get-with-headers.py localhost:$HGPORT 'a/rss-log' | grep '<guid'
151 151 <guid isPermaLink="true">http://*:$HGPORT/a/rev/8580ff50825a</guid> (glob)
152 152 $ cat > paths.conf <<EOF
153 153 > [paths]
154 154 > t/a/=$root/a
155 155 > b=$root/b
156 156 > coll=$root/*
157 157 > rcoll=$root/**
158 158 > star=*
159 159 > starstar=**
160 160 > astar=webdir/a/*
161 161 > EOF
162 162 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
163 163 > -A access-paths.log -E error-paths-2.log
164 164 $ cat hg.pid >> $DAEMON_PIDS
165 165
166 166 should succeed, slashy names
167 167
168 168 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
169 169 200 Script output follows
170 170
171 171
172 172 /t/a/
173 173 /b/
174 174 /coll/a/
175 175 /coll/a/.hg/patches/
176 176 /coll/b/
177 177 /coll/c/
178 178 /coll/notrepo/e/
179 179 /coll/notrepo/f/
180 180 /rcoll/a/
181 181 /rcoll/a/.hg/patches/
182 182 /rcoll/b/
183 183 /rcoll/b/d/
184 184 /rcoll/c/
185 185 /rcoll/notrepo/e/
186 186 /rcoll/notrepo/e/e2/
187 187 /rcoll/notrepo/f/
188 188 /rcoll/notrepo/f/f2/
189 189 /star/webdir/a/
190 190 /star/webdir/a/.hg/patches/
191 191 /star/webdir/b/
192 192 /star/webdir/c/
193 193 /star/webdir/notrepo/e/
194 194 /star/webdir/notrepo/f/
195 195 /starstar/webdir/a/
196 196 /starstar/webdir/a/.hg/patches/
197 197 /starstar/webdir/b/
198 198 /starstar/webdir/b/d/
199 199 /starstar/webdir/c/
200 200 /starstar/webdir/notrepo/e/
201 201 /starstar/webdir/notrepo/e/e2/
202 202 /starstar/webdir/notrepo/f/
203 203 /starstar/webdir/notrepo/f/f2/
204 204 /astar/
205 205 /astar/.hg/patches/
206 206
207 207
208 208 $ get-with-headers.py localhost:$HGPORT1 '?style=json'
209 209 200 Script output follows
210 210
211 211 {
212 212 "entries": [{
213 213 "name": "t/a",
214 214 "description": "unknown",
215 215 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
216 216 "lastchange": [*, *], (glob)
217 217 "labels": []
218 218 }, {
219 219 "name": "b",
220 220 "description": "unknown",
221 221 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
222 222 "lastchange": [*, *], (glob)
223 223 "labels": []
224 224 }, {
225 225 "name": "coll/a",
226 226 "description": "unknown",
227 227 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
228 228 "lastchange": [*, *], (glob)
229 229 "labels": []
230 230 }, {
231 231 "name": "coll/a/.hg/patches",
232 232 "description": "unknown",
233 233 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
234 234 "lastchange": [*, *], (glob)
235 235 "labels": []
236 236 }, {
237 237 "name": "coll/b",
238 238 "description": "unknown",
239 239 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
240 240 "lastchange": [*, *], (glob)
241 241 "labels": []
242 242 }, {
243 243 "name": "coll/c",
244 244 "description": "unknown",
245 245 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
246 246 "lastchange": [*, *], (glob)
247 247 "labels": []
248 248 }, {
249 249 "name": "coll/notrepo/e",
250 250 "description": "unknown",
251 251 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
252 252 "lastchange": [*, *], (glob)
253 253 "labels": []
254 254 }, {
255 255 "name": "fancy name for repo f",
256 256 "description": "unknown",
257 257 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
258 258 "lastchange": [*, *], (glob)
259 259 "labels": ["foo", "bar"]
260 260 }, {
261 261 "name": "rcoll/a",
262 262 "description": "unknown",
263 263 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
264 264 "lastchange": [*, *], (glob)
265 265 "labels": []
266 266 }, {
267 267 "name": "rcoll/a/.hg/patches",
268 268 "description": "unknown",
269 269 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
270 270 "lastchange": [*, *], (glob)
271 271 "labels": []
272 272 }, {
273 273 "name": "rcoll/b",
274 274 "description": "unknown",
275 275 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
276 276 "lastchange": [*, *], (glob)
277 277 "labels": []
278 278 }, {
279 279 "name": "rcoll/b/d",
280 280 "description": "unknown",
281 281 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
282 282 "lastchange": [*, *], (glob)
283 283 "labels": []
284 284 }, {
285 285 "name": "rcoll/c",
286 286 "description": "unknown",
287 287 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
288 288 "lastchange": [*, *], (glob)
289 289 "labels": []
290 290 }, {
291 291 "name": "rcoll/notrepo/e",
292 292 "description": "unknown",
293 293 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
294 294 "lastchange": [*, *], (glob)
295 295 "labels": []
296 296 }, {
297 297 "name": "rcoll/notrepo/e/e2",
298 298 "description": "unknown",
299 299 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
300 300 "lastchange": [*, *], (glob)
301 301 "labels": []
302 302 }, {
303 303 "name": "fancy name for repo f",
304 304 "description": "unknown",
305 305 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
306 306 "lastchange": [*, *], (glob)
307 307 "labels": ["foo", "bar"]
308 308 }, {
309 309 "name": "rcoll/notrepo/f/f2",
310 310 "description": "unknown",
311 311 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
312 312 "lastchange": [*, *], (glob)
313 313 "labels": []
314 314 }, {
315 315 "name": "star/webdir/a",
316 316 "description": "unknown",
317 317 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
318 318 "lastchange": [*, *], (glob)
319 319 "labels": []
320 320 }, {
321 321 "name": "star/webdir/a/.hg/patches",
322 322 "description": "unknown",
323 323 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
324 324 "lastchange": [*, *], (glob)
325 325 "labels": []
326 326 }, {
327 327 "name": "star/webdir/b",
328 328 "description": "unknown",
329 329 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
330 330 "lastchange": [*, *], (glob)
331 331 "labels": []
332 332 }, {
333 333 "name": "star/webdir/c",
334 334 "description": "unknown",
335 335 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
336 336 "lastchange": [*, *], (glob)
337 337 "labels": []
338 338 }, {
339 339 "name": "star/webdir/notrepo/e",
340 340 "description": "unknown",
341 341 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
342 342 "lastchange": [*, *], (glob)
343 343 "labels": []
344 344 }, {
345 345 "name": "fancy name for repo f",
346 346 "description": "unknown",
347 347 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
348 348 "lastchange": [*, *], (glob)
349 349 "labels": ["foo", "bar"]
350 350 }, {
351 351 "name": "starstar/webdir/a",
352 352 "description": "unknown",
353 353 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
354 354 "lastchange": [*, *], (glob)
355 355 "labels": []
356 356 }, {
357 357 "name": "starstar/webdir/a/.hg/patches",
358 358 "description": "unknown",
359 359 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
360 360 "lastchange": [*, *], (glob)
361 361 "labels": []
362 362 }, {
363 363 "name": "starstar/webdir/b",
364 364 "description": "unknown",
365 365 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
366 366 "lastchange": [*, *], (glob)
367 367 "labels": []
368 368 }, {
369 369 "name": "starstar/webdir/b/d",
370 370 "description": "unknown",
371 371 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
372 372 "lastchange": [*, *], (glob)
373 373 "labels": []
374 374 }, {
375 375 "name": "starstar/webdir/c",
376 376 "description": "unknown",
377 377 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
378 378 "lastchange": [*, *], (glob)
379 379 "labels": []
380 380 }, {
381 381 "name": "starstar/webdir/notrepo/e",
382 382 "description": "unknown",
383 383 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
384 384 "lastchange": [*, *], (glob)
385 385 "labels": []
386 386 }, {
387 387 "name": "starstar/webdir/notrepo/e/e2",
388 388 "description": "unknown",
389 389 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
390 390 "lastchange": [*, *], (glob)
391 391 "labels": []
392 392 }, {
393 393 "name": "fancy name for repo f",
394 394 "description": "unknown",
395 395 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
396 396 "lastchange": [*, *], (glob)
397 397 "labels": ["foo", "bar"]
398 398 }, {
399 399 "name": "starstar/webdir/notrepo/f/f2",
400 400 "description": "unknown",
401 401 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
402 402 "lastchange": [*, *], (glob)
403 403 "labels": []
404 404 }, {
405 405 "name": "astar",
406 406 "description": "unknown",
407 407 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
408 408 "lastchange": [*, *], (glob)
409 409 "labels": []
410 410 }, {
411 411 "name": "astar/.hg/patches",
412 412 "description": "unknown",
413 413 "contact": "Foo Bar \u003cfoo.bar@example.com\u003e",
414 414 "lastchange": [*, *], (glob)
415 415 "labels": []
416 416 }]
417 417 } (no-eol)
418 418
419 419 $ get-with-headers.py localhost:$HGPORT1 '?style=paper'
420 420 200 Script output follows
421 421
422 422 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
423 423 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
424 424 <head>
425 425 <link rel="icon" href="/static/hgicon.png" type="image/png" />
426 426 <meta name="robots" content="index, nofollow" />
427 427 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
428 428 <script type="text/javascript" src="/static/mercurial.js"></script>
429 429
430 430 <title>Mercurial repositories index</title>
431 431 </head>
432 432 <body>
433 433
434 434 <div class="container">
435 435 <div class="menu">
436 436 <a href="https://mercurial-scm.org/">
437 437 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
438 438 </div>
439 439 <div class="main">
440 440 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
441 441
442 442 <table class="bigtable">
443 443 <thead>
444 444 <tr>
445 445 <th><a href="?sort=name">Name</a></th>
446 446 <th><a href="?sort=description">Description</a></th>
447 447 <th><a href="?sort=contact">Contact</a></th>
448 448 <th><a href="?sort=lastchange">Last modified</a></th>
449 449 <th>&nbsp;</th>
450 450 <th>&nbsp;</th>
451 451 </tr>
452 452 </thead>
453 453 <tbody class="stripes2">
454 454
455 455 <tr>
456 456 <td><a href="/t/a/?style=paper">t/a</a></td>
457 457 <td>unknown</td>
458 458 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
459 459 <td class="age">*</td> (glob)
460 460 <td class="indexlinks"></td>
461 461 <td>
462 462 <a href="/t/a/atom-log" title="subscribe to repository atom feed">
463 463 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
464 464 </a>
465 465 </td>
466 466 </tr>
467 467
468 468 <tr>
469 469 <td><a href="/b/?style=paper">b</a></td>
470 470 <td>unknown</td>
471 471 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
472 472 <td class="age">*</td> (glob)
473 473 <td class="indexlinks"></td>
474 474 <td>
475 475 <a href="/b/atom-log" title="subscribe to repository atom feed">
476 476 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
477 477 </a>
478 478 </td>
479 479 </tr>
480 480
481 481 <tr>
482 482 <td><a href="/coll/a/?style=paper">coll/a</a></td>
483 483 <td>unknown</td>
484 484 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
485 485 <td class="age">*</td> (glob)
486 486 <td class="indexlinks"></td>
487 487 <td>
488 488 <a href="/coll/a/atom-log" title="subscribe to repository atom feed">
489 489 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
490 490 </a>
491 491 </td>
492 492 </tr>
493 493
494 494 <tr>
495 495 <td><a href="/coll/a/.hg/patches/?style=paper">coll/a/.hg/patches</a></td>
496 496 <td>unknown</td>
497 497 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
498 498 <td class="age">*</td> (glob)
499 499 <td class="indexlinks"></td>
500 500 <td>
501 501 <a href="/coll/a/.hg/patches/atom-log" title="subscribe to repository atom feed">
502 502 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
503 503 </a>
504 504 </td>
505 505 </tr>
506 506
507 507 <tr>
508 508 <td><a href="/coll/b/?style=paper">coll/b</a></td>
509 509 <td>unknown</td>
510 510 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
511 511 <td class="age">*</td> (glob)
512 512 <td class="indexlinks"></td>
513 513 <td>
514 514 <a href="/coll/b/atom-log" title="subscribe to repository atom feed">
515 515 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
516 516 </a>
517 517 </td>
518 518 </tr>
519 519
520 520 <tr>
521 521 <td><a href="/coll/c/?style=paper">coll/c</a></td>
522 522 <td>unknown</td>
523 523 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
524 524 <td class="age">*</td> (glob)
525 525 <td class="indexlinks"></td>
526 526 <td>
527 527 <a href="/coll/c/atom-log" title="subscribe to repository atom feed">
528 528 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
529 529 </a>
530 530 </td>
531 531 </tr>
532 532
533 533 <tr>
534 534 <td><a href="/coll/notrepo/e/?style=paper">coll/notrepo/e</a></td>
535 535 <td>unknown</td>
536 536 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
537 537 <td class="age">*</td> (glob)
538 538 <td class="indexlinks"></td>
539 539 <td>
540 540 <a href="/coll/notrepo/e/atom-log" title="subscribe to repository atom feed">
541 541 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
542 542 </a>
543 543 </td>
544 544 </tr>
545 545
546 546 <tr>
547 547 <td><a href="/coll/notrepo/f/?style=paper">fancy name for repo f</a></td>
548 548 <td>unknown</td>
549 549 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
550 550 <td class="age">*</td> (glob)
551 551 <td class="indexlinks"></td>
552 552 <td>
553 553 <a href="/coll/notrepo/f/atom-log" title="subscribe to repository atom feed">
554 554 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
555 555 </a>
556 556 </td>
557 557 </tr>
558 558
559 559 <tr>
560 560 <td><a href="/rcoll/a/?style=paper">rcoll/a</a></td>
561 561 <td>unknown</td>
562 562 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
563 563 <td class="age">*</td> (glob)
564 564 <td class="indexlinks"></td>
565 565 <td>
566 566 <a href="/rcoll/a/atom-log" title="subscribe to repository atom feed">
567 567 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
568 568 </a>
569 569 </td>
570 570 </tr>
571 571
572 572 <tr>
573 573 <td><a href="/rcoll/a/.hg/patches/?style=paper">rcoll/a/.hg/patches</a></td>
574 574 <td>unknown</td>
575 575 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
576 576 <td class="age">*</td> (glob)
577 577 <td class="indexlinks"></td>
578 578 <td>
579 579 <a href="/rcoll/a/.hg/patches/atom-log" title="subscribe to repository atom feed">
580 580 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
581 581 </a>
582 582 </td>
583 583 </tr>
584 584
585 585 <tr>
586 586 <td><a href="/rcoll/b/?style=paper">rcoll/b</a></td>
587 587 <td>unknown</td>
588 588 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
589 589 <td class="age">*</td> (glob)
590 590 <td class="indexlinks"></td>
591 591 <td>
592 592 <a href="/rcoll/b/atom-log" title="subscribe to repository atom feed">
593 593 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
594 594 </a>
595 595 </td>
596 596 </tr>
597 597
598 598 <tr>
599 599 <td><a href="/rcoll/b/d/?style=paper">rcoll/b/d</a></td>
600 600 <td>unknown</td>
601 601 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
602 602 <td class="age">*</td> (glob)
603 603 <td class="indexlinks"></td>
604 604 <td>
605 605 <a href="/rcoll/b/d/atom-log" title="subscribe to repository atom feed">
606 606 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
607 607 </a>
608 608 </td>
609 609 </tr>
610 610
611 611 <tr>
612 612 <td><a href="/rcoll/c/?style=paper">rcoll/c</a></td>
613 613 <td>unknown</td>
614 614 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
615 615 <td class="age">*</td> (glob)
616 616 <td class="indexlinks"></td>
617 617 <td>
618 618 <a href="/rcoll/c/atom-log" title="subscribe to repository atom feed">
619 619 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
620 620 </a>
621 621 </td>
622 622 </tr>
623 623
624 624 <tr>
625 625 <td><a href="/rcoll/notrepo/e/?style=paper">rcoll/notrepo/e</a></td>
626 626 <td>unknown</td>
627 627 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
628 628 <td class="age">*</td> (glob)
629 629 <td class="indexlinks"></td>
630 630 <td>
631 631 <a href="/rcoll/notrepo/e/atom-log" title="subscribe to repository atom feed">
632 632 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
633 633 </a>
634 634 </td>
635 635 </tr>
636 636
637 637 <tr>
638 638 <td><a href="/rcoll/notrepo/e/e2/?style=paper">rcoll/notrepo/e/e2</a></td>
639 639 <td>unknown</td>
640 640 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
641 641 <td class="age">*</td> (glob)
642 642 <td class="indexlinks"></td>
643 643 <td>
644 644 <a href="/rcoll/notrepo/e/e2/atom-log" title="subscribe to repository atom feed">
645 645 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
646 646 </a>
647 647 </td>
648 648 </tr>
649 649
650 650 <tr>
651 651 <td><a href="/rcoll/notrepo/f/?style=paper">fancy name for repo f</a></td>
652 652 <td>unknown</td>
653 653 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
654 654 <td class="age">*</td> (glob)
655 655 <td class="indexlinks"></td>
656 656 <td>
657 657 <a href="/rcoll/notrepo/f/atom-log" title="subscribe to repository atom feed">
658 658 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
659 659 </a>
660 660 </td>
661 661 </tr>
662 662
663 663 <tr>
664 664 <td><a href="/rcoll/notrepo/f/f2/?style=paper">rcoll/notrepo/f/f2</a></td>
665 665 <td>unknown</td>
666 666 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
667 667 <td class="age">*</td> (glob)
668 668 <td class="indexlinks"></td>
669 669 <td>
670 670 <a href="/rcoll/notrepo/f/f2/atom-log" title="subscribe to repository atom feed">
671 671 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
672 672 </a>
673 673 </td>
674 674 </tr>
675 675
676 676 <tr>
677 677 <td><a href="/star/webdir/a/?style=paper">star/webdir/a</a></td>
678 678 <td>unknown</td>
679 679 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
680 680 <td class="age">*</td> (glob)
681 681 <td class="indexlinks"></td>
682 682 <td>
683 683 <a href="/star/webdir/a/atom-log" title="subscribe to repository atom feed">
684 684 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
685 685 </a>
686 686 </td>
687 687 </tr>
688 688
689 689 <tr>
690 690 <td><a href="/star/webdir/a/.hg/patches/?style=paper">star/webdir/a/.hg/patches</a></td>
691 691 <td>unknown</td>
692 692 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
693 693 <td class="age">*</td> (glob)
694 694 <td class="indexlinks"></td>
695 695 <td>
696 696 <a href="/star/webdir/a/.hg/patches/atom-log" title="subscribe to repository atom feed">
697 697 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
698 698 </a>
699 699 </td>
700 700 </tr>
701 701
702 702 <tr>
703 703 <td><a href="/star/webdir/b/?style=paper">star/webdir/b</a></td>
704 704 <td>unknown</td>
705 705 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
706 706 <td class="age">*</td> (glob)
707 707 <td class="indexlinks"></td>
708 708 <td>
709 709 <a href="/star/webdir/b/atom-log" title="subscribe to repository atom feed">
710 710 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
711 711 </a>
712 712 </td>
713 713 </tr>
714 714
715 715 <tr>
716 716 <td><a href="/star/webdir/c/?style=paper">star/webdir/c</a></td>
717 717 <td>unknown</td>
718 718 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
719 719 <td class="age">*</td> (glob)
720 720 <td class="indexlinks"></td>
721 721 <td>
722 722 <a href="/star/webdir/c/atom-log" title="subscribe to repository atom feed">
723 723 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
724 724 </a>
725 725 </td>
726 726 </tr>
727 727
728 728 <tr>
729 729 <td><a href="/star/webdir/notrepo/e/?style=paper">star/webdir/notrepo/e</a></td>
730 730 <td>unknown</td>
731 731 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
732 732 <td class="age">*</td> (glob)
733 733 <td class="indexlinks"></td>
734 734 <td>
735 735 <a href="/star/webdir/notrepo/e/atom-log" title="subscribe to repository atom feed">
736 736 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
737 737 </a>
738 738 </td>
739 739 </tr>
740 740
741 741 <tr>
742 742 <td><a href="/star/webdir/notrepo/f/?style=paper">fancy name for repo f</a></td>
743 743 <td>unknown</td>
744 744 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
745 745 <td class="age">*</td> (glob)
746 746 <td class="indexlinks"></td>
747 747 <td>
748 748 <a href="/star/webdir/notrepo/f/atom-log" title="subscribe to repository atom feed">
749 749 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
750 750 </a>
751 751 </td>
752 752 </tr>
753 753
754 754 <tr>
755 755 <td><a href="/starstar/webdir/a/?style=paper">starstar/webdir/a</a></td>
756 756 <td>unknown</td>
757 757 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
758 758 <td class="age">*</td> (glob)
759 759 <td class="indexlinks"></td>
760 760 <td>
761 761 <a href="/starstar/webdir/a/atom-log" title="subscribe to repository atom feed">
762 762 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
763 763 </a>
764 764 </td>
765 765 </tr>
766 766
767 767 <tr>
768 768 <td><a href="/starstar/webdir/a/.hg/patches/?style=paper">starstar/webdir/a/.hg/patches</a></td>
769 769 <td>unknown</td>
770 770 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
771 771 <td class="age">*</td> (glob)
772 772 <td class="indexlinks"></td>
773 773 <td>
774 774 <a href="/starstar/webdir/a/.hg/patches/atom-log" title="subscribe to repository atom feed">
775 775 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
776 776 </a>
777 777 </td>
778 778 </tr>
779 779
780 780 <tr>
781 781 <td><a href="/starstar/webdir/b/?style=paper">starstar/webdir/b</a></td>
782 782 <td>unknown</td>
783 783 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
784 784 <td class="age">*</td> (glob)
785 785 <td class="indexlinks"></td>
786 786 <td>
787 787 <a href="/starstar/webdir/b/atom-log" title="subscribe to repository atom feed">
788 788 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
789 789 </a>
790 790 </td>
791 791 </tr>
792 792
793 793 <tr>
794 794 <td><a href="/starstar/webdir/b/d/?style=paper">starstar/webdir/b/d</a></td>
795 795 <td>unknown</td>
796 796 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
797 797 <td class="age">*</td> (glob)
798 798 <td class="indexlinks"></td>
799 799 <td>
800 800 <a href="/starstar/webdir/b/d/atom-log" title="subscribe to repository atom feed">
801 801 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
802 802 </a>
803 803 </td>
804 804 </tr>
805 805
806 806 <tr>
807 807 <td><a href="/starstar/webdir/c/?style=paper">starstar/webdir/c</a></td>
808 808 <td>unknown</td>
809 809 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
810 810 <td class="age">*</td> (glob)
811 811 <td class="indexlinks"></td>
812 812 <td>
813 813 <a href="/starstar/webdir/c/atom-log" title="subscribe to repository atom feed">
814 814 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
815 815 </a>
816 816 </td>
817 817 </tr>
818 818
819 819 <tr>
820 820 <td><a href="/starstar/webdir/notrepo/e/?style=paper">starstar/webdir/notrepo/e</a></td>
821 821 <td>unknown</td>
822 822 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
823 823 <td class="age">*</td> (glob)
824 824 <td class="indexlinks"></td>
825 825 <td>
826 826 <a href="/starstar/webdir/notrepo/e/atom-log" title="subscribe to repository atom feed">
827 827 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
828 828 </a>
829 829 </td>
830 830 </tr>
831 831
832 832 <tr>
833 833 <td><a href="/starstar/webdir/notrepo/e/e2/?style=paper">starstar/webdir/notrepo/e/e2</a></td>
834 834 <td>unknown</td>
835 835 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
836 836 <td class="age">*</td> (glob)
837 837 <td class="indexlinks"></td>
838 838 <td>
839 839 <a href="/starstar/webdir/notrepo/e/e2/atom-log" title="subscribe to repository atom feed">
840 840 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
841 841 </a>
842 842 </td>
843 843 </tr>
844 844
845 845 <tr>
846 846 <td><a href="/starstar/webdir/notrepo/f/?style=paper">fancy name for repo f</a></td>
847 847 <td>unknown</td>
848 848 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
849 849 <td class="age">*</td> (glob)
850 850 <td class="indexlinks"></td>
851 851 <td>
852 852 <a href="/starstar/webdir/notrepo/f/atom-log" title="subscribe to repository atom feed">
853 853 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
854 854 </a>
855 855 </td>
856 856 </tr>
857 857
858 858 <tr>
859 859 <td><a href="/starstar/webdir/notrepo/f/f2/?style=paper">starstar/webdir/notrepo/f/f2</a></td>
860 860 <td>unknown</td>
861 861 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
862 862 <td class="age">*</td> (glob)
863 863 <td class="indexlinks"></td>
864 864 <td>
865 865 <a href="/starstar/webdir/notrepo/f/f2/atom-log" title="subscribe to repository atom feed">
866 866 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
867 867 </a>
868 868 </td>
869 869 </tr>
870 870
871 871 <tr>
872 872 <td><a href="/astar/?style=paper">astar</a></td>
873 873 <td>unknown</td>
874 874 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
875 875 <td class="age">*</td> (glob)
876 876 <td class="indexlinks"></td>
877 877 <td>
878 878 <a href="/astar/atom-log" title="subscribe to repository atom feed">
879 879 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
880 880 </a>
881 881 </td>
882 882 </tr>
883 883
884 884 <tr>
885 885 <td><a href="/astar/.hg/patches/?style=paper">astar/.hg/patches</a></td>
886 886 <td>unknown</td>
887 887 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
888 888 <td class="age">*</td> (glob)
889 889 <td class="indexlinks"></td>
890 890 <td>
891 891 <a href="/astar/.hg/patches/atom-log" title="subscribe to repository atom feed">
892 892 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
893 893 </a>
894 894 </td>
895 895 </tr>
896 896
897 897 </tbody>
898 898 </table>
899 899 </div>
900 900 </div>
901 901
902 902
903 903 </body>
904 904 </html>
905 905
906 906 $ get-with-headers.py localhost:$HGPORT1 't?style=raw'
907 907 200 Script output follows
908 908
909 909
910 910 /t/a/
911 911
912 912 $ get-with-headers.py localhost:$HGPORT1 't/?style=raw'
913 913 200 Script output follows
914 914
915 915
916 916 /t/a/
917 917
918 918 $ get-with-headers.py localhost:$HGPORT1 't/?style=paper'
919 919 200 Script output follows
920 920
921 921 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
922 922 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
923 923 <head>
924 924 <link rel="icon" href="/static/hgicon.png" type="image/png" />
925 925 <meta name="robots" content="index, nofollow" />
926 926 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
927 927 <script type="text/javascript" src="/static/mercurial.js"></script>
928 928
929 929 <title>Mercurial repositories index</title>
930 930 </head>
931 931 <body>
932 932
933 933 <div class="container">
934 934 <div class="menu">
935 935 <a href="https://mercurial-scm.org/">
936 936 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
937 937 </div>
938 938 <div class="main">
939 939 <h2 class="breadcrumb"><a href="/">Mercurial</a> &gt; <a href="/t">t</a> </h2>
940 940
941 941 <table class="bigtable">
942 942 <thead>
943 943 <tr>
944 944 <th><a href="?sort=name">Name</a></th>
945 945 <th><a href="?sort=description">Description</a></th>
946 946 <th><a href="?sort=contact">Contact</a></th>
947 947 <th><a href="?sort=lastchange">Last modified</a></th>
948 948 <th>&nbsp;</th>
949 949 <th>&nbsp;</th>
950 950 </tr>
951 951 </thead>
952 952 <tbody class="stripes2">
953 953
954 954 <tr>
955 955 <td><a href="/t/a/?style=paper">a</a></td>
956 956 <td>unknown</td>
957 957 <td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
958 958 <td class="age">*</td> (glob)
959 959 <td class="indexlinks"></td>
960 960 <td>
961 961 <a href="/t/a/atom-log" title="subscribe to repository atom feed">
962 962 <img class="atom-logo" src="/static/feed-icon-14x14.png" alt="subscribe to repository atom feed">
963 963 </a>
964 964 </td>
965 965 </tr>
966 966
967 967 </tbody>
968 968 </table>
969 969 </div>
970 970 </div>
971 971
972 972
973 973 </body>
974 974 </html>
975 975
976 976 $ get-with-headers.py localhost:$HGPORT1 't/a?style=atom'
977 977 200 Script output follows
978 978
979 979 <?xml version="1.0" encoding="ascii"?>
980 980 <feed xmlns="http://www.w3.org/2005/Atom">
981 981 <!-- Changelog -->
982 982 <id>http://*:$HGPORT1/t/a/</id> (glob)
983 983 <link rel="self" href="http://*:$HGPORT1/t/a/atom-log"/> (glob)
984 984 <link rel="alternate" href="http://*:$HGPORT1/t/a/"/> (glob)
985 985 <title>t/a Changelog</title>
986 986 <updated>1970-01-01T00:00:01+00:00</updated>
987 987
988 988 <entry>
989 989 <title>[default] a</title>
990 990 <id>http://*:$HGPORT1/t/a/#changeset-8580ff50825a50c8f716709acdf8de0deddcd6ab</id> (glob)
991 991 <link href="http://*:$HGPORT1/t/a/rev/8580ff50825a"/> (glob)
992 992 <author>
993 993 <name>test</name>
994 994 <email>&#116;&#101;&#115;&#116;</email>
995 995 </author>
996 996 <updated>1970-01-01T00:00:01+00:00</updated>
997 997 <published>1970-01-01T00:00:01+00:00</published>
998 998 <content type="xhtml">
999 999 <table xmlns="http://www.w3.org/1999/xhtml">
1000 1000 <tr>
1001 1001 <th style="text-align:left;">changeset</th>
1002 1002 <td>8580ff50825a</td>
1003 1003 </tr>
1004 1004 <tr>
1005 1005 <th style="text-align:left;">branch</th>
1006 1006 <td>default</td>
1007 1007 </tr>
1008 1008 <tr>
1009 1009 <th style="text-align:left;">bookmark</th>
1010 1010 <td></td>
1011 1011 </tr>
1012 1012 <tr>
1013 1013 <th style="text-align:left;">tag</th>
1014 1014 <td>tip</td>
1015 1015 </tr>
1016 1016 <tr>
1017 1017 <th style="text-align:left;">user</th>
1018 1018 <td>&#116;&#101;&#115;&#116;</td>
1019 1019 </tr>
1020 1020 <tr>
1021 1021 <th style="text-align:left;vertical-align:top;">description</th>
1022 1022 <td>a</td>
1023 1023 </tr>
1024 1024 <tr>
1025 1025 <th style="text-align:left;vertical-align:top;">files</th>
1026 1026 <td>a<br /></td>
1027 1027 </tr>
1028 1028 </table>
1029 1029 </content>
1030 1030 </entry>
1031 1031
1032 1032 </feed>
1033 1033 $ get-with-headers.py localhost:$HGPORT1 't/a/?style=atom'
1034 1034 200 Script output follows
1035 1035
1036 1036 <?xml version="1.0" encoding="ascii"?>
1037 1037 <feed xmlns="http://www.w3.org/2005/Atom">
1038 1038 <!-- Changelog -->
1039 1039 <id>http://*:$HGPORT1/t/a/</id> (glob)
1040 1040 <link rel="self" href="http://*:$HGPORT1/t/a/atom-log"/> (glob)
1041 1041 <link rel="alternate" href="http://*:$HGPORT1/t/a/"/> (glob)
1042 1042 <title>t/a Changelog</title>
1043 1043 <updated>1970-01-01T00:00:01+00:00</updated>
1044 1044
1045 1045 <entry>
1046 1046 <title>[default] a</title>
1047 1047 <id>http://*:$HGPORT1/t/a/#changeset-8580ff50825a50c8f716709acdf8de0deddcd6ab</id> (glob)
1048 1048 <link href="http://*:$HGPORT1/t/a/rev/8580ff50825a"/> (glob)
1049 1049 <author>
1050 1050 <name>test</name>
1051 1051 <email>&#116;&#101;&#115;&#116;</email>
1052 1052 </author>
1053 1053 <updated>1970-01-01T00:00:01+00:00</updated>
1054 1054 <published>1970-01-01T00:00:01+00:00</published>
1055 1055 <content type="xhtml">
1056 1056 <table xmlns="http://www.w3.org/1999/xhtml">
1057 1057 <tr>
1058 1058 <th style="text-align:left;">changeset</th>
1059 1059 <td>8580ff50825a</td>
1060 1060 </tr>
1061 1061 <tr>
1062 1062 <th style="text-align:left;">branch</th>
1063 1063 <td>default</td>
1064 1064 </tr>
1065 1065 <tr>
1066 1066 <th style="text-align:left;">bookmark</th>
1067 1067 <td></td>
1068 1068 </tr>
1069 1069 <tr>
1070 1070 <th style="text-align:left;">tag</th>
1071 1071 <td>tip</td>
1072 1072 </tr>
1073 1073 <tr>
1074 1074 <th style="text-align:left;">user</th>
1075 1075 <td>&#116;&#101;&#115;&#116;</td>
1076 1076 </tr>
1077 1077 <tr>
1078 1078 <th style="text-align:left;vertical-align:top;">description</th>
1079 1079 <td>a</td>
1080 1080 </tr>
1081 1081 <tr>
1082 1082 <th style="text-align:left;vertical-align:top;">files</th>
1083 1083 <td>a<br /></td>
1084 1084 </tr>
1085 1085 </table>
1086 1086 </content>
1087 1087 </entry>
1088 1088
1089 1089 </feed>
1090 1090 $ get-with-headers.py localhost:$HGPORT1 't/a/file/tip/a?style=raw'
1091 1091 200 Script output follows
1092 1092
1093 1093 a
1094 1094
1095 1095 Test [paths] '*' extension
1096 1096
1097 1097 $ get-with-headers.py localhost:$HGPORT1 'coll/?style=raw'
1098 1098 200 Script output follows
1099 1099
1100 1100
1101 1101 /coll/a/
1102 1102 /coll/a/.hg/patches/
1103 1103 /coll/b/
1104 1104 /coll/c/
1105 1105 /coll/notrepo/e/
1106 1106 /coll/notrepo/f/
1107 1107
1108 1108 $ get-with-headers.py localhost:$HGPORT1 'coll/a/file/tip/a?style=raw'
1109 1109 200 Script output follows
1110 1110
1111 1111 a
1112 1112
1113 1113 Test [paths] '**' extension
1114 1114
1115 1115 $ get-with-headers.py localhost:$HGPORT1 'rcoll/?style=raw'
1116 1116 200 Script output follows
1117 1117
1118 1118
1119 1119 /rcoll/a/
1120 1120 /rcoll/a/.hg/patches/
1121 1121 /rcoll/b/
1122 1122 /rcoll/b/d/
1123 1123 /rcoll/c/
1124 1124 /rcoll/notrepo/e/
1125 1125 /rcoll/notrepo/e/e2/
1126 1126 /rcoll/notrepo/f/
1127 1127 /rcoll/notrepo/f/f2/
1128 1128
1129 1129 $ get-with-headers.py localhost:$HGPORT1 'rcoll/b/d/file/tip/d?style=raw'
1130 1130 200 Script output follows
1131 1131
1132 1132 d
1133 1133
1134 1134 Test collapse = True
1135 1135
1136 1136 $ killdaemons.py
1137 1137 $ cat >> paths.conf <<EOF
1138 1138 > [web]
1139 1139 > collapse=true
1140 1140 > descend = true
1141 1141 > EOF
1142 1142 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
1143 1143 > -A access-paths.log -E error-paths-3.log
1144 1144 $ cat hg.pid >> $DAEMON_PIDS
1145 1145 $ get-with-headers.py localhost:$HGPORT1 'coll/?style=raw'
1146 1146 200 Script output follows
1147 1147
1148 1148
1149 1149 /coll/a/
1150 1150 /coll/a/.hg/patches/
1151 1151 /coll/b/
1152 1152 /coll/c/
1153 1153 /coll/notrepo/
1154 1154
1155 1155 $ get-with-headers.py localhost:$HGPORT1 'coll/a/file/tip/a?style=raw'
1156 1156 200 Script output follows
1157 1157
1158 1158 a
1159 1159 $ get-with-headers.py localhost:$HGPORT1 'rcoll/?style=raw'
1160 1160 200 Script output follows
1161 1161
1162 1162
1163 1163 /rcoll/a/
1164 1164 /rcoll/a/.hg/patches/
1165 1165 /rcoll/b/
1166 1166 /rcoll/b/d/
1167 1167 /rcoll/c/
1168 1168 /rcoll/notrepo/
1169 1169
1170 1170 $ get-with-headers.py localhost:$HGPORT1 'rcoll/b/d/file/tip/d?style=raw'
1171 1171 200 Script output follows
1172 1172
1173 1173 d
1174 1174
1175 1175 Test intermediate directories
1176 1176
1177 1177 Hide the subrepo parent
1178 1178
1179 1179 $ cp $root/notrepo/f/.hg/hgrc $root/notrepo/f/.hg/hgrc.bak
1180 1180 $ cat >> $root/notrepo/f/.hg/hgrc << EOF
1181 1181 > [web]
1182 1182 > hidden = True
1183 1183 > EOF
1184 1184
1185 1185 $ get-with-headers.py localhost:$HGPORT1 'rcoll/notrepo/?style=raw'
1186 1186 200 Script output follows
1187 1187
1188 1188
1189 1189 /rcoll/notrepo/e/
1190 1190 /rcoll/notrepo/e/e2/
1191 1191
1192 1192
1193 1193 Subrepo parent not hidden
1194 1194 $ mv $root/notrepo/f/.hg/hgrc.bak $root/notrepo/f/.hg/hgrc
1195 1195
1196 1196 $ get-with-headers.py localhost:$HGPORT1 'rcoll/notrepo/?style=raw'
1197 1197 200 Script output follows
1198 1198
1199 1199
1200 1200 /rcoll/notrepo/e/
1201 1201 /rcoll/notrepo/e/e2/
1202 1202 /rcoll/notrepo/f/
1203 1203 /rcoll/notrepo/f/f2/
1204 1204
1205 1205
1206 1206 Test repositories inside intermediate directories
1207 1207
1208 1208 $ get-with-headers.py localhost:$HGPORT1 'rcoll/notrepo/e/file/tip/e?style=raw'
1209 1209 200 Script output follows
1210 1210
1211 1211 e
1212 1212
1213 1213 Test subrepositories inside intermediate directories
1214 1214
1215 1215 $ get-with-headers.py localhost:$HGPORT1 'rcoll/notrepo/f/f2/file/tip/f2?style=raw'
1216 1216 200 Script output follows
1217 1217
1218 1218 f2
1219 1219
1220 1220 Test descend = False
1221 1221
1222 1222 $ killdaemons.py
1223 1223 $ cat >> paths.conf <<EOF
1224 1224 > descend=false
1225 1225 > EOF
1226 1226 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
1227 1227 > -A access-paths.log -E error-paths-4.log
1228 1228 $ cat hg.pid >> $DAEMON_PIDS
1229 1229 $ get-with-headers.py localhost:$HGPORT1 'coll/?style=raw'
1230 1230 200 Script output follows
1231 1231
1232 1232
1233 1233 /coll/a/
1234 1234 /coll/b/
1235 1235 /coll/c/
1236 1236
1237 1237 $ get-with-headers.py localhost:$HGPORT1 'coll/a/file/tip/a?style=raw'
1238 1238 200 Script output follows
1239 1239
1240 1240 a
1241 1241 $ get-with-headers.py localhost:$HGPORT1 'rcoll/?style=raw'
1242 1242 200 Script output follows
1243 1243
1244 1244
1245 1245 /rcoll/a/
1246 1246 /rcoll/b/
1247 1247 /rcoll/c/
1248 1248
1249 1249 $ get-with-headers.py localhost:$HGPORT1 'rcoll/b/d/file/tip/d?style=raw'
1250 1250 200 Script output follows
1251 1251
1252 1252 d
1253 1253
1254 1254 Test intermediate directories
1255 1255
1256 1256 $ get-with-headers.py localhost:$HGPORT1 'rcoll/notrepo/?style=raw'
1257 1257 200 Script output follows
1258 1258
1259 1259
1260 1260 /rcoll/notrepo/e/
1261 1261 /rcoll/notrepo/f/
1262 1262
1263 1263
1264 1264 Test repositories inside intermediate directories
1265 1265
1266 1266 $ get-with-headers.py localhost:$HGPORT1 'rcoll/notrepo/e/file/tip/e?style=raw'
1267 1267 200 Script output follows
1268 1268
1269 1269 e
1270 1270
1271 1271 Test subrepositories inside intermediate directories
1272 1272
1273 1273 $ get-with-headers.py localhost:$HGPORT1 'rcoll/notrepo/f/f2/file/tip/f2?style=raw'
1274 1274 200 Script output follows
1275 1275
1276 1276 f2
1277 1277
1278 1278 Test [paths] '*' in a repo root
1279 1279
1280 1280 $ hg id http://localhost:$HGPORT1/astar
1281 1281 8580ff50825a
1282 1282
1283 1283 $ killdaemons.py
1284 1284 $ cat > paths.conf <<EOF
1285 1285 > [paths]
1286 1286 > t/a = $root/a
1287 1287 > t/b = $root/b
1288 1288 > c = $root/c
1289 1289 > EOF
1290 1290 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
1291 1291 > -A access-paths.log -E error-paths-5.log
1292 1292 $ cat hg.pid >> $DAEMON_PIDS
1293 1293 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
1294 1294 200 Script output follows
1295 1295
1296 1296
1297 1297 /t/a/
1298 1298 /t/b/
1299 1299 /c/
1300 1300
1301 1301 $ get-with-headers.py localhost:$HGPORT1 't/?style=raw'
1302 1302 200 Script output follows
1303 1303
1304 1304
1305 1305 /t/a/
1306 1306 /t/b/
1307 1307
1308 1308
1309 1309 Test collapse = True
1310 1310
1311 1311 $ killdaemons.py
1312 1312 $ cat >> paths.conf <<EOF
1313 1313 > [web]
1314 1314 > collapse=true
1315 1315 > EOF
1316 1316 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
1317 1317 > -A access-paths.log -E error-paths-6.log
1318 1318 $ cat hg.pid >> $DAEMON_PIDS
1319 1319 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
1320 1320 200 Script output follows
1321 1321
1322 1322
1323 1323 /t/
1324 1324 /c/
1325 1325
1326 1326 $ get-with-headers.py localhost:$HGPORT1 't/?style=raw'
1327 1327 200 Script output follows
1328 1328
1329 1329
1330 1330 /t/a/
1331 1331 /t/b/
1332 1332
1333 1333
1334 1334 test descend = False
1335 1335
1336 1336 $ killdaemons.py
1337 1337 $ cat >> paths.conf <<EOF
1338 1338 > descend=false
1339 1339 > EOF
1340 1340 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
1341 1341 > -A access-paths.log -E error-paths-7.log
1342 1342 $ cat hg.pid >> $DAEMON_PIDS
1343 1343 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
1344 1344 200 Script output follows
1345 1345
1346 1346
1347 1347 /c/
1348 1348
1349 1349 $ get-with-headers.py localhost:$HGPORT1 't/?style=raw'
1350 1350 200 Script output follows
1351 1351
1352 1352
1353 1353 /t/a/
1354 1354 /t/b/
1355 1355
1356 1356 $ killdaemons.py
1357 1357 $ cat > paths.conf <<EOF
1358 1358 > [paths]
1359 1359 > nostore = $root/nostore
1360 1360 > inexistent = $root/inexistent
1361 1361 > EOF
1362 1362 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --webdir-conf paths.conf \
1363 1363 > -A access-paths.log -E error-paths-8.log
1364 1364 $ cat hg.pid >> $DAEMON_PIDS
1365 1365
1366 1366 test inexistent and inaccessible repo should be ignored silently
1367 1367
1368 1368 $ get-with-headers.py localhost:$HGPORT1 ''
1369 1369 200 Script output follows
1370 1370
1371 1371 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1372 1372 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
1373 1373 <head>
1374 1374 <link rel="icon" href="/static/hgicon.png" type="image/png" />
1375 1375 <meta name="robots" content="index, nofollow" />
1376 1376 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
1377 1377 <script type="text/javascript" src="/static/mercurial.js"></script>
1378 1378
1379 1379 <title>Mercurial repositories index</title>
1380 1380 </head>
1381 1381 <body>
1382 1382
1383 1383 <div class="container">
1384 1384 <div class="menu">
1385 1385 <a href="https://mercurial-scm.org/">
1386 1386 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
1387 1387 </div>
1388 1388 <div class="main">
1389 1389 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
1390 1390
1391 1391 <table class="bigtable">
1392 1392 <thead>
1393 1393 <tr>
1394 1394 <th><a href="?sort=name">Name</a></th>
1395 1395 <th><a href="?sort=description">Description</a></th>
1396 1396 <th><a href="?sort=contact">Contact</a></th>
1397 1397 <th><a href="?sort=lastchange">Last modified</a></th>
1398 1398 <th>&nbsp;</th>
1399 1399 <th>&nbsp;</th>
1400 1400 </tr>
1401 1401 </thead>
1402 1402 <tbody class="stripes2">
1403 1403
1404 1404 </tbody>
1405 1405 </table>
1406 1406 </div>
1407 1407 </div>
1408 1408
1409 1409
1410 1410 </body>
1411 1411 </html>
1412 1412
1413 1413
1414 1414 test listening address/port specified by web-conf (issue4699):
1415 1415
1416 1416 $ killdaemons.py
1417 1417 $ cat >> paths.conf <<EOF
1418 1418 > [web]
1419 1419 > address = localhost
1420 1420 > port = $HGPORT1
1421 1421 > EOF
1422 1422 $ hg serve -d --pid-file=hg.pid --web-conf paths.conf \
1423 1423 > -A access-paths.log -E error-paths-9.log
1424 listening at http://*:$HGPORT1/ (bound to *$LOCALIP*:$HGPORT1) (glob)
1424 listening at http://*:$HGPORT1/ (bound to *$LOCALIP*:$HGPORT1) (glob) (?)
1425 1425 $ cat hg.pid >> $DAEMON_PIDS
1426 1426 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
1427 1427 200 Script output follows
1428 1428
1429 1429
1430 1430
1431 1431 test --port option overrides web.port:
1432 1432
1433 1433 $ killdaemons.py
1434 1434 $ hg serve -p $HGPORT2 -d -v --pid-file=hg.pid --web-conf paths.conf \
1435 1435 > -A access-paths.log -E error-paths-10.log
1436 listening at http://*:$HGPORT2/ (bound to *$LOCALIP*:$HGPORT2) (glob)
1436 listening at http://*:$HGPORT2/ (bound to *$LOCALIP*:$HGPORT2) (glob) (?)
1437 1437 $ cat hg.pid >> $DAEMON_PIDS
1438 1438 $ get-with-headers.py localhost:$HGPORT2 '?style=raw'
1439 1439 200 Script output follows
1440 1440
1441 1441
1442 1442
1443 1443
1444 1444 $ killdaemons.py
1445 1445 $ cat > collections.conf <<EOF
1446 1446 > [collections]
1447 1447 > $root=$root
1448 1448 > EOF
1449 1449 $ hg serve --config web.baseurl=http://hg.example.com:8080/ -p $HGPORT2 -d \
1450 1450 > --pid-file=hg.pid --webdir-conf collections.conf \
1451 1451 > -A access-collections.log -E error-collections.log
1452 1452 $ cat hg.pid >> $DAEMON_PIDS
1453 1453
1454 1454 collections: should succeed
1455 1455
1456 1456 $ get-with-headers.py localhost:$HGPORT2 '?style=raw'
1457 1457 200 Script output follows
1458 1458
1459 1459
1460 1460 /a/
1461 1461 /a/.hg/patches/
1462 1462 /b/
1463 1463 /c/
1464 1464 /notrepo/e/
1465 1465 /notrepo/f/
1466 1466
1467 1467 $ get-with-headers.py localhost:$HGPORT2 'a/file/tip/a?style=raw'
1468 1468 200 Script output follows
1469 1469
1470 1470 a
1471 1471 $ get-with-headers.py localhost:$HGPORT2 'b/file/tip/b?style=raw'
1472 1472 200 Script output follows
1473 1473
1474 1474 b
1475 1475 $ get-with-headers.py localhost:$HGPORT2 'c/file/tip/c?style=raw'
1476 1476 200 Script output follows
1477 1477
1478 1478 c
1479 1479
1480 1480 atom-log with basedir /
1481 1481
1482 1482 $ get-with-headers.py localhost:$HGPORT2 'a/atom-log' | grep '<link'
1483 1483 <link rel="self" href="http://hg.example.com:8080/a/atom-log"/>
1484 1484 <link rel="alternate" href="http://hg.example.com:8080/a/"/>
1485 1485 <link href="http://hg.example.com:8080/a/rev/8580ff50825a"/>
1486 1486
1487 1487 rss-log with basedir /
1488 1488
1489 1489 $ get-with-headers.py localhost:$HGPORT2 'a/rss-log' | grep '<guid'
1490 1490 <guid isPermaLink="true">http://hg.example.com:8080/a/rev/8580ff50825a</guid>
1491 1491 $ killdaemons.py
1492 1492 $ hg serve --config web.baseurl=http://hg.example.com:8080/foo/ -p $HGPORT2 -d \
1493 1493 > --pid-file=hg.pid --webdir-conf collections.conf \
1494 1494 > -A access-collections-2.log -E error-collections-2.log
1495 1495 $ cat hg.pid >> $DAEMON_PIDS
1496 1496
1497 1497 atom-log with basedir /foo/
1498 1498
1499 1499 $ get-with-headers.py localhost:$HGPORT2 'a/atom-log' | grep '<link'
1500 1500 <link rel="self" href="http://hg.example.com:8080/foo/a/atom-log"/>
1501 1501 <link rel="alternate" href="http://hg.example.com:8080/foo/a/"/>
1502 1502 <link href="http://hg.example.com:8080/foo/a/rev/8580ff50825a"/>
1503 1503
1504 1504 rss-log with basedir /foo/
1505 1505
1506 1506 $ get-with-headers.py localhost:$HGPORT2 'a/rss-log' | grep '<guid'
1507 1507 <guid isPermaLink="true">http://hg.example.com:8080/foo/a/rev/8580ff50825a</guid>
1508 1508
1509 1509 Path refreshing works as expected
1510 1510
1511 1511 $ killdaemons.py
1512 1512 $ mkdir $root/refreshtest
1513 1513 $ hg init $root/refreshtest/a
1514 1514 $ cat > paths.conf << EOF
1515 1515 > [paths]
1516 1516 > / = $root/refreshtest/*
1517 1517 > EOF
1518 1518 $ hg serve -p $HGPORT1 -d --pid-file hg.pid --webdir-conf paths.conf
1519 1519 $ cat hg.pid >> $DAEMON_PIDS
1520 1520
1521 1521 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
1522 1522 200 Script output follows
1523 1523
1524 1524
1525 1525 /a/
1526 1526
1527 1527
1528 1528 By default refreshing occurs every 20s and a new repo won't be listed
1529 1529 immediately.
1530 1530
1531 1531 $ hg init $root/refreshtest/b
1532 1532 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
1533 1533 200 Script output follows
1534 1534
1535 1535
1536 1536 /a/
1537 1537
1538 1538
1539 1539 Restart the server with no refresh interval. New repo should appear
1540 1540 immediately.
1541 1541
1542 1542 $ killdaemons.py
1543 1543 $ cat > paths.conf << EOF
1544 1544 > [web]
1545 1545 > refreshinterval = -1
1546 1546 > [paths]
1547 1547 > / = $root/refreshtest/*
1548 1548 > EOF
1549 1549 $ hg serve -p $HGPORT1 -d --pid-file hg.pid --webdir-conf paths.conf
1550 1550 $ cat hg.pid >> $DAEMON_PIDS
1551 1551
1552 1552 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
1553 1553 200 Script output follows
1554 1554
1555 1555
1556 1556 /a/
1557 1557 /b/
1558 1558
1559 1559
1560 1560 $ hg init $root/refreshtest/c
1561 1561 $ get-with-headers.py localhost:$HGPORT1 '?style=raw'
1562 1562 200 Script output follows
1563 1563
1564 1564
1565 1565 /a/
1566 1566 /b/
1567 1567 /c/
1568 1568
1569 1569 $ killdaemons.py
1570 1570 $ cat > paths.conf << EOF
1571 1571 > [paths]
1572 1572 > /dir1/a_repo = $root/a
1573 1573 > /dir1/a_repo/b_repo = $root/b
1574 1574 > /dir1/dir2/index = $root/b
1575 1575 > EOF
1576 1576 $ hg serve -p $HGPORT1 -d --pid-file hg.pid --webdir-conf paths.conf
1577 1577 $ cat hg.pid >> $DAEMON_PIDS
1578 1578
1579 1579 $ echo 'index file' > $root/a/index
1580 1580 $ hg --cwd $root/a ci -Am 'add index file'
1581 1581 adding index
1582 1582
1583 1583 $ get-with-headers.py localhost:$HGPORT1 '' | grep 'a_repo'
1584 1584 <td><a href="/dir1/a_repo/">dir1/a_repo</a></td>
1585 1585 <a href="/dir1/a_repo/atom-log" title="subscribe to repository atom feed">
1586 1586 <td><a href="/dir1/a_repo/b_repo/">dir1/a_repo/b_repo</a></td>
1587 1587 <a href="/dir1/a_repo/b_repo/atom-log" title="subscribe to repository atom feed">
1588 1588
1589 1589 $ get-with-headers.py localhost:$HGPORT1 'index' | grep 'a_repo'
1590 1590 <td><a href="/dir1/a_repo/">dir1/a_repo</a></td>
1591 1591 <a href="/dir1/a_repo/atom-log" title="subscribe to repository atom feed">
1592 1592 <td><a href="/dir1/a_repo/b_repo/">dir1/a_repo/b_repo</a></td>
1593 1593 <a href="/dir1/a_repo/b_repo/atom-log" title="subscribe to repository atom feed">
1594 1594
1595 1595 $ get-with-headers.py localhost:$HGPORT1 'dir1' | grep 'a_repo'
1596 1596 <td><a href="/dir1/a_repo/">a_repo</a></td>
1597 1597 <a href="/dir1/a_repo/atom-log" title="subscribe to repository atom feed">
1598 1598 <td><a href="/dir1/a_repo/b_repo/">a_repo/b_repo</a></td>
1599 1599 <a href="/dir1/a_repo/b_repo/atom-log" title="subscribe to repository atom feed">
1600 1600
1601 1601 $ get-with-headers.py localhost:$HGPORT1 'dir1/index' | grep 'a_repo'
1602 1602 <td><a href="/dir1/a_repo/">a_repo</a></td>
1603 1603 <a href="/dir1/a_repo/atom-log" title="subscribe to repository atom feed">
1604 1604 <td><a href="/dir1/a_repo/b_repo/">a_repo/b_repo</a></td>
1605 1605 <a href="/dir1/a_repo/b_repo/atom-log" title="subscribe to repository atom feed">
1606 1606
1607 1607 $ get-with-headers.py localhost:$HGPORT1 'dir1/a_repo' | grep 'a_repo'
1608 1608 <link rel="icon" href="/dir1/a_repo/static/hgicon.png" type="image/png" />
1609 1609 <link rel="stylesheet" href="/dir1/a_repo/static/style-paper.css" type="text/css" />
1610 1610 <script type="text/javascript" src="/dir1/a_repo/static/mercurial.js"></script>
1611 1611 <title>dir1/a_repo: log</title>
1612 1612 href="/dir1/a_repo/atom-log" title="Atom feed for dir1/a_repo" />
1613 1613 href="/dir1/a_repo/rss-log" title="RSS feed for dir1/a_repo" />
1614 1614 <img src="/dir1/a_repo/static/hglogo.png" alt="mercurial" /></a>
1615 1615 <li><a href="/dir1/a_repo/graph/tip">graph</a></li>
1616 1616 <li><a href="/dir1/a_repo/tags">tags</a></li>
1617 1617 <li><a href="/dir1/a_repo/bookmarks">bookmarks</a></li>
1618 1618 <li><a href="/dir1/a_repo/branches">branches</a></li>
1619 1619 <li><a href="/dir1/a_repo/rev/tip">changeset</a></li>
1620 1620 <li><a href="/dir1/a_repo/file/tip">browse</a></li>
1621 1621 <li><a href="/dir1/a_repo/help">help</a></li>
1622 1622 <a href="/dir1/a_repo/atom-log" title="subscribe to atom feed">
1623 1623 <img class="atom-logo" src="/dir1/a_repo/static/feed-icon-14x14.png" alt="atom feed" />
1624 1624 <h2 class="breadcrumb"><a href="/">Mercurial</a> &gt; <a href="/dir1">dir1</a> &gt; <a href="/dir1/a_repo">a_repo</a> </h2>
1625 1625 <form class="search" action="/dir1/a_repo/log">
1626 1626 number or hash, or <a href="/dir1/a_repo/help/revsets">revset expression</a>.</div>
1627 1627 <a href="/dir1/a_repo/shortlog/tip?revcount=30">less</a>
1628 1628 <a href="/dir1/a_repo/shortlog/tip?revcount=120">more</a>
1629 1629 | rev 1: <a href="/dir1/a_repo/shortlog/8580ff50825a">(0)</a> <a href="/dir1/a_repo/shortlog/tip">tip</a>
1630 1630 <a href="/dir1/a_repo/rev/71a89161f014">add index file</a>
1631 1631 <a href="/dir1/a_repo/rev/8580ff50825a">a</a>
1632 1632 <a href="/dir1/a_repo/shortlog/tip?revcount=30">less</a>
1633 1633 <a href="/dir1/a_repo/shortlog/tip?revcount=120">more</a>
1634 1634 | rev 1: <a href="/dir1/a_repo/shortlog/8580ff50825a">(0)</a> <a href="/dir1/a_repo/shortlog/tip">tip</a>
1635 1635 '/dir1/a_repo/shortlog/%next%',
1636 1636
1637 1637 $ get-with-headers.py localhost:$HGPORT1 'dir1/a_repo/index' | grep 'a_repo'
1638 1638 <h2 class="breadcrumb"><a href="/">Mercurial</a> &gt; <a href="/dir1">dir1</a> &gt; <a href="/dir1/a_repo">a_repo</a> </h2>
1639 1639 <td><a href="/dir1/a_repo/b_repo/">b_repo</a></td>
1640 1640 <a href="/dir1/a_repo/b_repo/atom-log" title="subscribe to repository atom feed">
1641 1641
1642 1642 Files named 'index' are not blocked
1643 1643
1644 1644 $ get-with-headers.py localhost:$HGPORT1 'dir1/a_repo/raw-file/tip/index'
1645 1645 200 Script output follows
1646 1646
1647 1647 index file
1648 1648
1649 1649 Repos named 'index' take precedence over the index file
1650 1650
1651 1651 $ get-with-headers.py localhost:$HGPORT1 'dir1/dir2/index' | grep 'index'
1652 1652 <link rel="icon" href="/dir1/dir2/index/static/hgicon.png" type="image/png" />
1653 1653 <meta name="robots" content="index, nofollow" />
1654 1654 <link rel="stylesheet" href="/dir1/dir2/index/static/style-paper.css" type="text/css" />
1655 1655 <script type="text/javascript" src="/dir1/dir2/index/static/mercurial.js"></script>
1656 1656 <title>dir1/dir2/index: log</title>
1657 1657 href="/dir1/dir2/index/atom-log" title="Atom feed for dir1/dir2/index" />
1658 1658 href="/dir1/dir2/index/rss-log" title="RSS feed for dir1/dir2/index" />
1659 1659 <img src="/dir1/dir2/index/static/hglogo.png" alt="mercurial" /></a>
1660 1660 <li><a href="/dir1/dir2/index/graph/tip">graph</a></li>
1661 1661 <li><a href="/dir1/dir2/index/tags">tags</a></li>
1662 1662 <li><a href="/dir1/dir2/index/bookmarks">bookmarks</a></li>
1663 1663 <li><a href="/dir1/dir2/index/branches">branches</a></li>
1664 1664 <li><a href="/dir1/dir2/index/rev/tip">changeset</a></li>
1665 1665 <li><a href="/dir1/dir2/index/file/tip">browse</a></li>
1666 1666 <li><a href="/dir1/dir2/index/help">help</a></li>
1667 1667 <a href="/dir1/dir2/index/atom-log" title="subscribe to atom feed">
1668 1668 <img class="atom-logo" src="/dir1/dir2/index/static/feed-icon-14x14.png" alt="atom feed" />
1669 1669 <h2 class="breadcrumb"><a href="/">Mercurial</a> &gt; <a href="/dir1">dir1</a> &gt; <a href="/dir1/dir2">dir2</a> &gt; <a href="/dir1/dir2/index">index</a> </h2>
1670 1670 <form class="search" action="/dir1/dir2/index/log">
1671 1671 number or hash, or <a href="/dir1/dir2/index/help/revsets">revset expression</a>.</div>
1672 1672 <a href="/dir1/dir2/index/shortlog/tip?revcount=30">less</a>
1673 1673 <a href="/dir1/dir2/index/shortlog/tip?revcount=120">more</a>
1674 1674 | rev 0: <a href="/dir1/dir2/index/shortlog/39505516671b">(0)</a> <a href="/dir1/dir2/index/shortlog/tip">tip</a>
1675 1675 <a href="/dir1/dir2/index/rev/39505516671b">b</a>
1676 1676 <a href="/dir1/dir2/index/shortlog/tip?revcount=30">less</a>
1677 1677 <a href="/dir1/dir2/index/shortlog/tip?revcount=120">more</a>
1678 1678 | rev 0: <a href="/dir1/dir2/index/shortlog/39505516671b">(0)</a> <a href="/dir1/dir2/index/shortlog/tip">tip</a>
1679 1679 '/dir1/dir2/index/shortlog/%next%',
1680 1680
1681 1681 $ killdaemons.py
1682 1682
1683 1683 paths errors 1
1684 1684
1685 1685 $ cat error-paths-1.log
1686 1686
1687 1687 paths errors 2
1688 1688
1689 1689 $ cat error-paths-2.log
1690 1690
1691 1691 paths errors 3
1692 1692
1693 1693 $ cat error-paths-3.log
1694 1694
1695 1695 paths errors 4
1696 1696
1697 1697 $ cat error-paths-4.log
1698 1698
1699 1699 paths errors 5
1700 1700
1701 1701 $ cat error-paths-5.log
1702 1702
1703 1703 paths errors 6
1704 1704
1705 1705 $ cat error-paths-6.log
1706 1706
1707 1707 paths errors 7
1708 1708
1709 1709 $ cat error-paths-7.log
1710 1710
1711 1711 paths errors 8
1712 1712
1713 1713 $ cat error-paths-8.log
1714 1714
1715 1715 paths errors 9
1716 1716
1717 1717 $ cat error-paths-9.log
1718 1718
1719 1719 paths errors 10
1720 1720
1721 1721 $ cat error-paths-10.log
1722 1722
1723 1723 collections errors
1724 1724
1725 1725 $ cat error-collections.log
1726 1726
1727 1727 collections errors 2
1728 1728
1729 1729 $ cat error-collections-2.log
@@ -1,124 +1,124 b''
1 1 #require serve ssl
2 2
3 3 Set up SMTP server:
4 4
5 5 $ CERTSDIR="$TESTDIR/sslcerts"
6 6 $ cat "$CERTSDIR/priv.pem" "$CERTSDIR/pub.pem" >> server.pem
7 7
8 8 $ python "$TESTDIR/dummysmtpd.py" -p $HGPORT --pid-file a.pid -d \
9 9 > --tls smtps --certificate `pwd`/server.pem
10 listening at localhost:$HGPORT
10 listening at localhost:$HGPORT (?)
11 11 $ cat a.pid >> $DAEMON_PIDS
12 12
13 13 Set up repository:
14 14
15 15 $ hg init t
16 16 $ cd t
17 17 $ cat <<EOF >> .hg/hgrc
18 18 > [extensions]
19 19 > patchbomb =
20 20 > [email]
21 21 > method = smtp
22 22 > [smtp]
23 23 > host = localhost
24 24 > port = $HGPORT
25 25 > tls = smtps
26 26 > EOF
27 27
28 28 $ echo a > a
29 29 $ hg commit -Ama -d '1 0'
30 30 adding a
31 31
32 32 Utility functions:
33 33
34 34 $ DISABLECACERTS=
35 35 $ try () {
36 36 > hg email $DISABLECACERTS -f quux -t foo -c bar -r tip "$@"
37 37 > }
38 38
39 39 Our test cert is not signed by a trusted CA. It should fail to verify if
40 40 we are able to load CA certs:
41 41
42 42 #if sslcontext defaultcacerts no-defaultcacertsloaded
43 43 $ try
44 44 this patch series consists of 1 patches.
45 45
46 46
47 47 (an attempt was made to load CA certificates but none were loaded; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error)
48 48 (?i)abort: .*?certificate.verify.failed.* (re)
49 49 [255]
50 50 #endif
51 51
52 52 #if no-sslcontext defaultcacerts
53 53 $ try
54 54 this patch series consists of 1 patches.
55 55
56 56
57 57 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info
58 58 (using CA certificates from *; if you see this message, your Mercurial install is not properly configured; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this message) (glob) (?)
59 59 (?i)abort: .*?certificate.verify.failed.* (re)
60 60 [255]
61 61 #endif
62 62
63 63 #if defaultcacertsloaded
64 64 $ try
65 65 this patch series consists of 1 patches.
66 66
67 67
68 68 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
69 69 (using CA certificates from *; if you see this message, your Mercurial install is not properly configured; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this message) (glob) (?)
70 70 (?i)abort: .*?certificate.verify.failed.* (re)
71 71 [255]
72 72
73 73 #endif
74 74
75 75 #if no-defaultcacerts
76 76 $ try
77 77 this patch series consists of 1 patches.
78 78
79 79
80 80 (unable to load * certificates; see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this message) (glob) (?)
81 81 abort: localhost certificate error: no certificate received
82 82 (set hostsecurity.localhost:certfingerprints=sha256:62:09:97:2f:97:60:e3:65:8f:12:5d:78:9e:35:a1:36:7a:65:4b:0e:9f:ac:db:c3:bc:6e:b6:a3:c0:16:e0:30 config setting or use --insecure to connect insecurely)
83 83 [255]
84 84 #endif
85 85
86 86 $ DISABLECACERTS="--config devel.disableloaddefaultcerts=true"
87 87
88 88 Without certificates:
89 89
90 90 $ try --debug
91 91 this patch series consists of 1 patches.
92 92
93 93
94 94 (using smtps)
95 95 sending mail: smtp host localhost, port * (glob)
96 96 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
97 97 (verifying remote certificate)
98 98 abort: unable to verify security of localhost (no loaded CA certificates); refusing to connect
99 99 (see https://mercurial-scm.org/wiki/SecureConnections for how to configure Mercurial to avoid this error or set hostsecurity.localhost:fingerprints=sha256:20:de:b3:ad:b4:cd:a5:42:f0:74:41:1c:a2:70:1e:da:6e:c0:5c:16:9e:e7:22:0f:f1:b7:e5:6e:e4:92:af:7e to trust this server)
100 100 [255]
101 101
102 102 With global certificates:
103 103
104 104 $ try --debug --config web.cacerts="$CERTSDIR/pub.pem"
105 105 this patch series consists of 1 patches.
106 106
107 107
108 108 (using smtps)
109 109 sending mail: smtp host localhost, port * (glob)
110 110 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
111 111 (verifying remote certificate)
112 112 sending [PATCH] a ...
113 113
114 114 With invalid certificates:
115 115
116 116 $ try --config web.cacerts="$CERTSDIR/pub-other.pem"
117 117 this patch series consists of 1 patches.
118 118
119 119
120 120 warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
121 121 (?i)abort: .*?certificate.verify.failed.* (re)
122 122 [255]
123 123
124 124 $ cd ..
@@ -1,81 +1,81 b''
1 1 #require serve
2 2
3 3 $ hgserve()
4 4 > {
5 5 > hg serve -a localhost -d --pid-file=hg.pid -E errors.log -v $@ \
6 6 > | sed -e "s/:$HGPORT1\\([^0-9]\\)/:HGPORT1\1/g" \
7 7 > -e "s/:$HGPORT2\\([^0-9]\\)/:HGPORT2\1/g" \
8 8 > -e 's/http:\/\/[^/]*\//http:\/\/localhost\//'
9 9 > cat hg.pid >> "$DAEMON_PIDS"
10 10 > echo % errors
11 11 > cat errors.log
12 12 > killdaemons.py hg.pid
13 13 > }
14 14
15 15 $ hg init test
16 16 $ cd test
17 17 $ echo '[web]' > .hg/hgrc
18 18 $ echo 'accesslog = access.log' >> .hg/hgrc
19 19 $ echo "port = $HGPORT1" >> .hg/hgrc
20 20
21 21 Without -v
22 22
23 23 $ hg serve -a localhost -p $HGPORT -d --pid-file=hg.pid -E errors.log
24 24 $ cat hg.pid >> "$DAEMON_PIDS"
25 25 $ if [ -f access.log ]; then
26 26 > echo 'access log created - .hg/hgrc respected'
27 27 > fi
28 28 access log created - .hg/hgrc respected
29 29
30 30 errors
31 31
32 32 $ cat errors.log
33 33
34 34 With -v
35 35
36 36 $ hgserve
37 listening at http://localhost/ (bound to *$LOCALIP*:HGPORT1) (glob)
37 listening at http://localhost/ (bound to *$LOCALIP*:HGPORT1) (glob) (?)
38 38 % errors
39 39
40 40 With -v and -p HGPORT2
41 41
42 42 $ hgserve -p "$HGPORT2"
43 listening at http://localhost/ (bound to *$LOCALIP*:HGPORT2) (glob)
43 listening at http://localhost/ (bound to *$LOCALIP*:HGPORT2) (glob) (?)
44 44 % errors
45 45
46 46 With -v and -p daytime (should fail because low port)
47 47
48 48 #if no-root
49 49 $ KILLQUIETLY=Y
50 50 $ hgserve -p daytime
51 51 abort: cannot start server at 'localhost:13': Permission denied
52 52 abort: child process failed to start
53 53 % errors
54 54 $ KILLQUIETLY=N
55 55 #endif
56 56
57 57 With --prefix foo
58 58
59 59 $ hgserve --prefix foo
60 listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob)
60 listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob) (?)
61 61 % errors
62 62
63 63 With --prefix /foo
64 64
65 65 $ hgserve --prefix /foo
66 listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob)
66 listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob) (?)
67 67 % errors
68 68
69 69 With --prefix foo/
70 70
71 71 $ hgserve --prefix foo/
72 listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob)
72 listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob) (?)
73 73 % errors
74 74
75 75 With --prefix /foo/
76 76
77 77 $ hgserve --prefix /foo/
78 listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob)
78 listening at http://localhost/foo/ (bound to *$LOCALIP*:HGPORT1) (glob) (?)
79 79 % errors
80 80
81 81 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now