##// END OF EJS Templates
perf: add command for measuring revlog chunk operations...
perf: add command for measuring revlog chunk operations Upcoming commits will teach revlogs to leverage the new compression engine API so that new compression formats can more easily be leveraged in revlogs. We want to be sure this refactoring doesn't regress performance. So this commit introduces "perfrevchunks" to explicitly test performance of reading, decompressing, and recompressing revlog chunks. Here is output when run on the mozilla-unified repo: $ hg perfrevlogchunks -c ! read ! wall 0.346603 comb 0.350000 user 0.340000 sys 0.010000 (best of 28) ! read w/ reused fd ! wall 0.337707 comb 0.340000 user 0.320000 sys 0.020000 (best of 30) ! read batch ! wall 0.013206 comb 0.020000 user 0.000000 sys 0.020000 (best of 221) ! read batch w/ reused fd ! wall 0.013259 comb 0.030000 user 0.010000 sys 0.020000 (best of 222) ! chunk ! wall 1.909939 comb 1.910000 user 1.900000 sys 0.010000 (best of 6) ! chunk batch ! wall 1.750677 comb 1.760000 user 1.740000 sys 0.020000 (best of 6) ! compress ! wall 5.668004 comb 5.670000 user 5.670000 sys 0.000000 (best of 3) $ hg perfrevlogchunks -m ! read ! wall 0.365834 comb 0.370000 user 0.350000 sys 0.020000 (best of 26) ! read w/ reused fd ! wall 0.350160 comb 0.350000 user 0.320000 sys 0.030000 (best of 28) ! read batch ! wall 0.024777 comb 0.020000 user 0.000000 sys 0.020000 (best of 119) ! read batch w/ reused fd ! wall 0.024895 comb 0.030000 user 0.000000 sys 0.030000 (best of 118) ! chunk ! wall 2.514061 comb 2.520000 user 2.480000 sys 0.040000 (best of 4) ! chunk batch ! wall 2.380788 comb 2.380000 user 2.360000 sys 0.020000 (best of 5) ! compress ! wall 9.815297 comb 9.820000 user 9.820000 sys 0.000000 (best of 3) We already see some interesting data, such as how much slower non-batched chunk reading is and that zlib compression appears to be >2x slower than decompression. I didn't have the data when I wrote this commit message, but I ran this on Mozilla's NFS-based Mercurial server and the time for reading with a reused file descriptor was faster. So I think it is worth testing both with and without file descriptor reuse so we can make informed decisions about recycling file descriptors.

File last commit:

r30009:7fa01155 stable
r30451:94ca0e13 default
Show More
test-hgweb-json.t
1642 lines | 35.8 KiB | text/troff | Tads3Lexer
/ tests / test-hgweb-json.t
Gregory Szorc
templates: add a stub template for json...
r24544 #require serve
$ request() {
Matt Mackall
tests: drop explicit $TESTDIR from executables...
r25472 > get-with-headers.py --json localhost:$HGPORT "$1"
Gregory Szorc
templates: add a stub template for json...
r24544 > }
$ hg init test
$ cd test
$ mkdir da
$ echo foo > da/foo
$ echo foo > foo
$ hg -q ci -A -m initial
$ echo bar > foo
$ hg ci -m 'modify foo'
$ echo bar > da/foo
$ hg ci -m 'modify da/foo'
$ hg bookmark bookmark1
$ hg up default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
(leaving bookmark bookmark1)
$ hg mv foo foo-new
$ hg commit -m 'move foo'
$ hg tag -m 'create tag' tag1
Gregory Szorc
hgweb: add phase to {changeset} template...
r24564 $ hg phase --public -r .
Gregory Szorc
templates: add a stub template for json...
r24544 $ echo baz > da/foo
$ hg commit -m 'another commit to da/foo'
$ hg tag -m 'create tag2' tag2
$ hg bookmark bookmark2
$ hg -q up -r 0
$ hg -q branch test-branch
$ echo branch > foo
$ hg commit -m 'create test branch'
Gregory Szorc
json: implement {changeset} template...
r24563 $ echo branch_commit_2 > foo
$ hg commit -m 'another commit in test-branch'
$ hg -q up default
$ hg merge --tool :local test-branch
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m 'merge test-branch into default'
Gregory Szorc
templates: add a stub template for json...
r24544
$ hg log -G
Gregory Szorc
json: implement {changeset} template...
r24563 @ changeset: 9:cc725e08502a
|\ tag: tip
| | parent: 6:ceed296fe500
| | parent: 8:ed66c30e87eb
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: merge test-branch into default
| |
| o changeset: 8:ed66c30e87eb
| | branch: test-branch
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: another commit in test-branch
| |
| o changeset: 7:6ab967a8ab34
| | branch: test-branch
| | parent: 0:06e557f3edf6
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: create test branch
| |
o | changeset: 6:ceed296fe500
Gregory Szorc
templates: add a stub template for json...
r24544 | | bookmark: bookmark2
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: create tag2
| |
Gregory Szorc
json: implement {changeset} template...
r24563 o | changeset: 5:f2890a05fea4
Gregory Szorc
templates: add a stub template for json...
r24544 | | tag: tag2
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: another commit to da/foo
| |
Gregory Szorc
json: implement {changeset} template...
r24563 o | changeset: 4:93a8ce14f891
Gregory Szorc
templates: add a stub template for json...
r24544 | | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: create tag
| |
Gregory Szorc
json: implement {changeset} template...
r24563 o | changeset: 3:78896eb0e102
Gregory Szorc
templates: add a stub template for json...
r24544 | | tag: tag1
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: move foo
| |
Gregory Szorc
json: implement {changeset} template...
r24563 o | changeset: 2:8d7c456572ac
Gregory Szorc
templates: add a stub template for json...
r24544 | | bookmark: bookmark1
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: modify da/foo
| |
Gregory Szorc
json: implement {changeset} template...
r24563 o | changeset: 1:f8bbb9024b10
Gregory Szorc
templates: add a stub template for json...
r24544 |/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: modify foo
|
o changeset: 0:06e557f3edf6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: initial
av6
tests: allow bz2 archives in test-hgweb-json.t...
r29457 $ echo '[web]' >> .hg/hgrc
$ echo 'allow_archive = bz2' >> .hg/hgrc
Gregory Szorc
templates: add a stub template for json...
r24544 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E error.log
$ cat hg.pid >> $DAEMON_PIDS
(Try to keep these in roughly the order they are defined in webcommands.py)
(log is handled by filelog/ and changelog/ - ignore it)
(rawfile/ doesn't use templating - nothing to test)
file/{revision}/{path} shows file revision
Laura Médioni
templates: add support for filerevision webcommand in json style
r29381 $ request json-file/78896eb0e102/foo-new
Gregory Szorc
templates: add a stub template for json...
r24544 200 Script output follows
Laura Médioni
templates: add support for filerevision webcommand in json style
r29381 {
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "move foo",
"lines": [
{
"line": "bar\n"
}
],
"node": "78896eb0e102174ce9278438a95e12543e4367a7",
"parents": [
"f8bbb9024b10f93cdbb8d940337398291d40dea8"
],
"path": "foo-new",
"phase": "public",
"tags": [
"tag1"
],
"user": "test"
}
Gregory Szorc
templates: add a stub template for json...
r24544
file/{revision} shows root directory info
Gregory Szorc
json: implement {manifest} template...
r24589 $ request json-file/cc725e08502a
Gregory Szorc
templates: add a stub template for json...
r24544 200 Script output follows
Gregory Szorc
json: implement {manifest} template...
r24589 {
"abspath": "/",
"bookmarks": [],
"directories": [
{
"abspath": "/da",
"basename": "da",
"emptydirs": ""
}
],
"files": [
{
"abspath": ".hgtags",
"basename": ".hgtags",
"date": [
0.0,
0
],
"flags": "",
"size": 92
},
{
"abspath": "foo-new",
"basename": "foo-new",
"date": [
0.0,
0
],
"flags": "",
"size": 4
}
],
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
"tags": [
"tip"
]
}
Gregory Szorc
templates: add a stub template for json...
r24544
changelog/ shows information about several changesets
$ request json-changelog
200 Script output follows
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 {
"changeset_count": 10,
"changesets": [
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "merge test-branch into default",
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"ceed296fe500c3fac9541e31dad860cb49c89e45",
"ed66c30e87eb65337c05a4229efaa5f1d5285a90"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [
"tip"
],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "test-branch",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "another commit in test-branch",
"node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"6ab967a8ab3489227a83f80e920faa039a71819f"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "test-branch",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "create test branch",
"node": "6ab967a8ab3489227a83f80e920faa039a71819f",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [
"bookmark2"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "create tag2",
"node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"f2890a05fea49bfaf9fb27ed5490894eba32da78"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "another commit to da/foo",
"node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"93a8ce14f89156426b7fa981af8042da53f03aa0"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [
"tag2"
],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "create tag",
"node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"78896eb0e102174ce9278438a95e12543e4367a7"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "move foo",
"node": "78896eb0e102174ce9278438a95e12543e4367a7",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"8d7c456572acf3557e8ed8a07286b10c408bcec5"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [
"tag1"
],
"user": "test"
},
{
"bookmarks": [
"bookmark1"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "modify da/foo",
"node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"f8bbb9024b10f93cdbb8d940337398291d40dea8"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "modify foo",
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "initial",
"node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
}
],
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
}
Gregory Szorc
templates: add a stub template for json...
r24544
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 changelog/{revision} shows information starting at a specific changeset
Gregory Szorc
templates: add a stub template for json...
r24544
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 $ request json-changelog/f8bbb9024b10
Gregory Szorc
templates: add a stub template for json...
r24544 200 Script output follows
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 {
"changeset_count": 10,
"changesets": [
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "modify foo",
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "initial",
"node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
}
],
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8"
}
Gregory Szorc
templates: add a stub template for json...
r24544
shortlog/ shows information about a set of changesets
$ request json-shortlog
200 Script output follows
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 {
"changeset_count": 10,
"changesets": [
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "merge test-branch into default",
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"ceed296fe500c3fac9541e31dad860cb49c89e45",
"ed66c30e87eb65337c05a4229efaa5f1d5285a90"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [
"tip"
],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "test-branch",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "another commit in test-branch",
"node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"6ab967a8ab3489227a83f80e920faa039a71819f"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "test-branch",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "create test branch",
"node": "6ab967a8ab3489227a83f80e920faa039a71819f",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [
"bookmark2"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "create tag2",
"node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"f2890a05fea49bfaf9fb27ed5490894eba32da78"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "another commit to da/foo",
"node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"93a8ce14f89156426b7fa981af8042da53f03aa0"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "draft",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [
"tag2"
],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "create tag",
"node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"78896eb0e102174ce9278438a95e12543e4367a7"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "move foo",
"node": "78896eb0e102174ce9278438a95e12543e4367a7",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"8d7c456572acf3557e8ed8a07286b10c408bcec5"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [
"tag1"
],
"user": "test"
},
{
"bookmarks": [
"bookmark1"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "modify da/foo",
"node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"f8bbb9024b10f93cdbb8d940337398291d40dea8"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "modify foo",
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
},
{
"bookmarks": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "branch": "default",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "date": [
0.0,
0
],
"desc": "initial",
"node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
av6
hgweb: add parents to json-log (issue5074)...
r28709 "parents": [],
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 "phase": "public",
Gregory Szorc
json: implement {shortlog} and {changelog} templates...
r24588 "tags": [],
"user": "test"
}
],
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
}
Gregory Szorc
templates: add a stub template for json...
r24544
changeset/ renders the tip changeset
$ request json-rev
200 Script output follows
Gregory Szorc
json: implement {changeset} template...
r24563 {
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "merge test-branch into default",
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
"parents": [
"ceed296fe500c3fac9541e31dad860cb49c89e45",
"ed66c30e87eb65337c05a4229efaa5f1d5285a90"
],
Gregory Szorc
hgweb: add phase to {changeset} template...
r24564 "phase": "draft",
Gregory Szorc
json: implement {changeset} template...
r24563 "tags": [
"tip"
],
"user": "test"
}
Gregory Szorc
templates: add a stub template for json...
r24544
changeset/{revision} shows tags
$ request json-rev/78896eb0e102
200 Script output follows
Gregory Szorc
json: implement {changeset} template...
r24563 {
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "move foo",
"node": "78896eb0e102174ce9278438a95e12543e4367a7",
"parents": [
"8d7c456572acf3557e8ed8a07286b10c408bcec5"
],
Gregory Szorc
hgweb: add phase to {changeset} template...
r24564 "phase": "public",
Gregory Szorc
json: implement {changeset} template...
r24563 "tags": [
"tag1"
],
"user": "test"
}
Gregory Szorc
templates: add a stub template for json...
r24544
changeset/{revision} shows bookmarks
$ request json-rev/8d7c456572ac
200 Script output follows
Gregory Szorc
json: implement {changeset} template...
r24563 {
"bookmarks": [
"bookmark1"
],
"branch": "default",
"date": [
0.0,
0
],
"desc": "modify da/foo",
"node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
"parents": [
"f8bbb9024b10f93cdbb8d940337398291d40dea8"
],
Gregory Szorc
hgweb: add phase to {changeset} template...
r24564 "phase": "public",
Gregory Szorc
json: implement {changeset} template...
r24563 "tags": [],
"user": "test"
}
Gregory Szorc
templates: add a stub template for json...
r24544
changeset/{revision} shows branches
$ request json-rev/6ab967a8ab34
200 Script output follows
Gregory Szorc
json: implement {changeset} template...
r24563 {
"bookmarks": [],
"branch": "test-branch",
"date": [
0.0,
0
],
"desc": "create test branch",
"node": "6ab967a8ab3489227a83f80e920faa039a71819f",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
Gregory Szorc
hgweb: add phase to {changeset} template...
r24564 "phase": "draft",
Gregory Szorc
json: implement {changeset} template...
r24563 "tags": [],
"user": "test"
}
Gregory Szorc
templates: add a stub template for json...
r24544
manifest/{revision}/{path} shows info about a directory at a revision
$ request json-manifest/06e557f3edf6/
200 Script output follows
Gregory Szorc
json: implement {manifest} template...
r24589 {
"abspath": "/",
"bookmarks": [],
"directories": [
{
"abspath": "/da",
"basename": "da",
"emptydirs": ""
}
],
"files": [
{
"abspath": "foo",
"basename": "foo",
"date": [
0.0,
0
],
"flags": "",
"size": 4
}
],
"node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
"tags": []
}
Gregory Szorc
templates: add a stub template for json...
r24544
tags/ shows tags info
$ request json-tags
200 Script output follows
Gregory Szorc
json: implement {tags} template...
r24545 {
Gregory Szorc
json: implement {changeset} template...
r24563 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
Gregory Szorc
json: implement {tags} template...
r24545 "tags": [
{
"date": [
0.0,
0
],
"node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
"tag": "tag2"
},
{
"date": [
0.0,
0
],
"node": "78896eb0e102174ce9278438a95e12543e4367a7",
"tag": "tag1"
}
]
}
Gregory Szorc
templates: add a stub template for json...
r24544
bookmarks/ shows bookmarks info
$ request json-bookmarks
200 Script output follows
Gregory Szorc
json: implement {bookmarks} template
r24546 {
"bookmarks": [
{
av6
hgweb: sort bookmarks in revlog order of their nodes...
r28711 "bookmark": "bookmark2",
"date": [
0.0,
0
],
"node": "ceed296fe500c3fac9541e31dad860cb49c89e45"
},
{
Gregory Szorc
json: implement {bookmarks} template
r24546 "bookmark": "bookmark1",
"date": [
0.0,
0
],
"node": "8d7c456572acf3557e8ed8a07286b10c408bcec5"
}
],
Gregory Szorc
json: implement {changeset} template...
r24563 "node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7"
Gregory Szorc
json: implement {bookmarks} template
r24546 }
Gregory Szorc
templates: add a stub template for json...
r24544
branches/ shows branches info
$ request json-branches
200 Script output follows
Gregory Szorc
json: implement {branches} template
r24547 {
"branches": [
{
Gregory Szorc
json: implement {changeset} template...
r24563 "branch": "default",
"date": [
0.0,
0
],
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
"status": "open"
},
{
Gregory Szorc
json: implement {branches} template
r24547 "branch": "test-branch",
"date": [
0.0,
0
],
Gregory Szorc
json: implement {changeset} template...
r24563 "node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
"status": "inactive"
Gregory Szorc
json: implement {branches} template
r24547 }
]
}
Gregory Szorc
templates: add a stub template for json...
r24544
summary/ shows a summary of repository state
$ request json-summary
200 Script output follows
Laura Médioni
templates: add support for summary webcommand in json style...
r29382 {
av6
tests: allow bz2 archives in test-hgweb-json.t...
r29457 "archives": [
{
"extension": ".tar.bz2",
"node": "tip",
av6
hgweb: add absolute urls for archives in json-summary
r29458 "type": "bz2",
"url": "http://*:$HGPORT/archive/tip.tar.bz2" (glob)
av6
tests: allow bz2 archives in test-hgweb-json.t...
r29457 }
],
Laura Médioni
templates: add support for summary webcommand in json style...
r29382 "bookmarks": [
{
"bookmark": "bookmark2",
"date": [
0.0,
0
],
"node": "ceed296fe500c3fac9541e31dad860cb49c89e45"
},
{
"bookmark": "bookmark1",
"date": [
0.0,
0
],
"node": "8d7c456572acf3557e8ed8a07286b10c408bcec5"
}
],
"branches": [
{
"branch": "default",
"date": [
0.0,
0
],
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
"status": "open"
},
{
"branch": "test-branch",
"date": [
0.0,
0
],
"node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
"status": "inactive"
}
],
Gregory Szorc
hgweb: expose list of per-repo labels to templates...
r29471 "labels": [],
Laura Médioni
templates: add support for summary webcommand in json style...
r29382 "lastchange": [
0.0,
0
],
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
"shortlog": [
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "merge test-branch into default",
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
"parents": [
"ceed296fe500c3fac9541e31dad860cb49c89e45",
"ed66c30e87eb65337c05a4229efaa5f1d5285a90"
],
"phase": "draft",
"tags": [
"tip"
],
"user": "test"
},
{
"bookmarks": [],
"branch": "test-branch",
"date": [
0.0,
0
],
"desc": "another commit in test-branch",
"node": "ed66c30e87eb65337c05a4229efaa5f1d5285a90",
"parents": [
"6ab967a8ab3489227a83f80e920faa039a71819f"
],
"phase": "draft",
"tags": [],
"user": "test"
},
{
"bookmarks": [],
"branch": "test-branch",
"date": [
0.0,
0
],
"desc": "create test branch",
"node": "6ab967a8ab3489227a83f80e920faa039a71819f",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
"phase": "draft",
"tags": [],
"user": "test"
},
{
"bookmarks": [
"bookmark2"
],
"branch": "default",
"date": [
0.0,
0
],
"desc": "create tag2",
"node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
"parents": [
"f2890a05fea49bfaf9fb27ed5490894eba32da78"
],
"phase": "draft",
"tags": [],
"user": "test"
},
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "another commit to da/foo",
"node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
"parents": [
"93a8ce14f89156426b7fa981af8042da53f03aa0"
],
"phase": "draft",
"tags": [
"tag2"
],
"user": "test"
},
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "create tag",
"node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
"parents": [
"78896eb0e102174ce9278438a95e12543e4367a7"
],
"phase": "public",
"tags": [],
"user": "test"
},
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "move foo",
"node": "78896eb0e102174ce9278438a95e12543e4367a7",
"parents": [
"8d7c456572acf3557e8ed8a07286b10c408bcec5"
],
"phase": "public",
"tags": [
"tag1"
],
"user": "test"
},
{
"bookmarks": [
"bookmark1"
],
"branch": "default",
"date": [
0.0,
0
],
"desc": "modify da/foo",
"node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
"parents": [
"f8bbb9024b10f93cdbb8d940337398291d40dea8"
],
"phase": "public",
"tags": [],
"user": "test"
},
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "modify foo",
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
"phase": "public",
"tags": [],
"user": "test"
},
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "initial",
"node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
"parents": [],
"phase": "public",
"tags": [],
"user": "test"
}
],
"tags": [
{
"date": [
0.0,
0
],
"node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
"tag": "tag2"
},
{
"date": [
0.0,
0
],
"node": "78896eb0e102174ce9278438a95e12543e4367a7",
"tag": "tag1"
}
]
}
Gregory Szorc
templates: add a stub template for json...
r24544
Laura Médioni
templates: add support for search webcommand in json style
r29383 $ request json-changelog?rev=create
200 Script output follows
{
"entries": [
{
"bookmarks": [],
"branch": "test-branch",
"date": [
0.0,
0
],
"desc": "create test branch",
"node": "6ab967a8ab3489227a83f80e920faa039a71819f",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
"phase": "draft",
"tags": [],
"user": "test"
},
{
"bookmarks": [
"bookmark2"
],
"branch": "default",
"date": [
0.0,
0
],
"desc": "create tag2",
"node": "ceed296fe500c3fac9541e31dad860cb49c89e45",
"parents": [
"f2890a05fea49bfaf9fb27ed5490894eba32da78"
],
"phase": "draft",
"tags": [],
"user": "test"
},
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "create tag",
"node": "93a8ce14f89156426b7fa981af8042da53f03aa0",
"parents": [
"78896eb0e102174ce9278438a95e12543e4367a7"
],
"phase": "public",
"tags": [],
"user": "test"
}
],
"node": "cc725e08502a79dd1eda913760fbe06ed7a9abc7",
"query": "create"
}
Gregory Szorc
templates: add a stub template for json...
r24544 filediff/{revision}/{path} shows changes to a file in a revision
$ request json-diff/f8bbb9024b10/foo
200 Script output follows
Gregory Szorc
json: implement {filediff} template...
r24713 {
"author": "test",
"children": [],
"date": [
0.0,
0
],
"desc": "modify foo",
"diff": [
{
"blockno": 1,
"lines": [
{
"l": "--- a/foo\tThu Jan 01 00:00:00 1970 +0000\n",
"n": 1,
"t": "-"
},
{
"l": "+++ b/foo\tThu Jan 01 00:00:00 1970 +0000\n",
"n": 2,
"t": "+"
},
{
"l": "@@ -1,1 +1,1 @@\n",
"n": 3,
"t": "@"
},
{
"l": "-foo\n",
"n": 4,
"t": "-"
},
{
"l": "+bar\n",
"n": 5,
"t": "+"
}
]
}
],
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
"path": "foo"
}
Gregory Szorc
templates: add a stub template for json...
r24544
comparison/{revision}/{path} shows information about before and after for a file
$ request json-comparison/f8bbb9024b10/foo
200 Script output follows
Gregory Szorc
json: implement {comparison} template...
r24714 {
"author": "test",
"children": [],
"comparison": [
{
"lines": [
{
"ll": "foo",
"ln": 1,
"rl": "bar",
"rn": 1,
"t": "replace"
}
]
}
],
"date": [
0.0,
0
],
"desc": "modify foo",
"leftnode": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
"path": "foo",
"rightnode": "f8bbb9024b10f93cdbb8d940337398291d40dea8"
}
Gregory Szorc
templates: add a stub template for json...
r24544
annotate/{revision}/{path} shows annotations for each line
$ request json-annotate/f8bbb9024b10/foo
200 Script output follows
Gregory Szorc
json: implement {fileannotate} template
r24715 {
"abspath": "foo",
"annotate": [
{
"abspath": "foo",
"author": "test",
"desc": "modify foo",
"line": "bar\n",
"lineno": 1,
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
"revdate": [
0.0,
0
],
"targetline": 1
}
],
"author": "test",
"children": [],
"date": [
0.0,
0
],
"desc": "modify foo",
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
"permissions": ""
}
Gregory Szorc
templates: add a stub template for json...
r24544
filelog/{revision}/{path} shows history of a single file
$ request json-filelog/f8bbb9024b10/foo
200 Script output follows
Laura Médioni
templates: add support for filelog webcommand in json style...
r29380 {
"entries": [
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "modify foo",
"node": "f8bbb9024b10f93cdbb8d940337398291d40dea8",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
"phase": "public",
"tags": [],
"user": "test"
},
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "initial",
"node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
"parents": [],
"phase": "public",
"tags": [],
"user": "test"
}
]
}
$ request json-filelog/cc725e08502a/da/foo
200 Script output follows
{
"entries": [
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "another commit to da/foo",
"node": "f2890a05fea49bfaf9fb27ed5490894eba32da78",
"parents": [
"8d7c456572acf3557e8ed8a07286b10c408bcec5"
],
"phase": "draft",
"tags": [
"tag2"
],
"user": "test"
},
{
"bookmarks": [
"bookmark1"
],
"branch": "default",
"date": [
0.0,
0
],
"desc": "modify da/foo",
"node": "8d7c456572acf3557e8ed8a07286b10c408bcec5",
"parents": [
"06e557f3edf66faa1ccaba5dd8c203c21cc79f1e"
],
"phase": "public",
"tags": [],
"user": "test"
},
{
"bookmarks": [],
"branch": "default",
"date": [
0.0,
0
],
"desc": "initial",
"node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
"parents": [],
"phase": "public",
"tags": [],
"user": "test"
}
]
}
Gregory Szorc
templates: add a stub template for json...
r24544
(archive/ doesn't use templating, so ignore it)
(static/ doesn't use templating, so ignore it)
graph/ shows information that can be used to render a graph of the DAG
$ request json-graph
200 Script output follows
"not yet implemented"
help/ shows help topics
$ request json-help
200 Script output follows
Gregory Szorc
json: implement {helptopics} template
r24590 {
"earlycommands": [
{
"summary": "add the specified files on the next commit",
"topic": "add"
},
{
"summary": "show changeset information by line for each file",
"topic": "annotate"
},
{
"summary": "make a copy of an existing repository",
"topic": "clone"
},
{
"summary": "commit the specified files or all outstanding changes",
"topic": "commit"
},
{
"summary": "diff repository (or selected files)",
"topic": "diff"
},
{
"summary": "dump the header and diffs for one or more changesets",
"topic": "export"
},
{
"summary": "forget the specified files on the next commit",
"topic": "forget"
},
{
"summary": "create a new repository in the given directory",
"topic": "init"
},
{
"summary": "show revision history of entire repository or files",
"topic": "log"
},
{
"summary": "merge another revision into working directory",
"topic": "merge"
},
{
"summary": "pull changes from the specified source",
"topic": "pull"
},
{
"summary": "push changes to the specified destination",
"topic": "push"
},
{
"summary": "remove the specified files on the next commit",
"topic": "remove"
},
{
"summary": "start stand-alone webserver",
"topic": "serve"
},
{
"summary": "show changed files in the working directory",
"topic": "status"
},
{
"summary": "summarize working directory state",
"topic": "summary"
},
{
"summary": "update working directory (or switch revisions)",
"topic": "update"
}
],
"othercommands": [
{
"summary": "add all new files, delete all missing files",
"topic": "addremove"
},
{
"summary": "create an unversioned archive of a repository revision",
"topic": "archive"
},
{
"summary": "reverse effect of earlier changeset",
"topic": "backout"
},
{
"summary": "subdivision search of changesets",
"topic": "bisect"
},
{
"summary": "create a new bookmark or list existing bookmarks",
"topic": "bookmarks"
},
{
"summary": "set or show the current branch name",
"topic": "branch"
},
{
"summary": "list repository named branches",
"topic": "branches"
},
{
"summary": "create a changegroup file",
"topic": "bundle"
},
{
"summary": "output the current or given revision of files",
"topic": "cat"
},
{
"summary": "show combined config settings from all hgrc files",
"topic": "config"
},
{
"summary": "mark files as copied for the next commit",
"topic": "copy"
},
{
"summary": "list tracked files",
"topic": "files"
},
{
"summary": "copy changes from other branches onto the current branch",
"topic": "graft"
},
{
Kevin Bullock
grep: rewrite help to better document current (confusing) behavior
r30009 "summary": "search revision history for a pattern in specified files",
Gregory Szorc
json: implement {helptopics} template
r24590 "topic": "grep"
},
{
"summary": "show branch heads",
"topic": "heads"
},
{
"summary": "show help for a given topic or a help overview",
"topic": "help"
},
{
"summary": "identify the working directory or specified revision",
"topic": "identify"
},
{
"summary": "import an ordered set of patches",
"topic": "import"
},
{
"summary": "show new changesets found in source",
"topic": "incoming"
},
{
"summary": "output the current or given revision of the project manifest",
"topic": "manifest"
},
{
"summary": "show changesets not found in the destination",
"topic": "outgoing"
},
{
"summary": "show aliases for remote repositories",
"topic": "paths"
},
{
"summary": "set or show the current phase name",
"topic": "phase"
},
{
"summary": "roll back an interrupted transaction",
"topic": "recover"
},
{
"summary": "rename files; equivalent of copy + remove",
"topic": "rename"
},
{
"summary": "redo merges or set/view the merge status of files",
"topic": "resolve"
},
{
"summary": "restore files to their checkout state",
"topic": "revert"
},
{
"summary": "print the root (top) of the current working directory",
"topic": "root"
},
{
"summary": "add one or more tags for the current or given revision",
"topic": "tag"
},
{
"summary": "list repository tags",
"topic": "tags"
},
{
"summary": "apply one or more changegroup files",
"topic": "unbundle"
},
{
"summary": "verify the integrity of the repository",
"topic": "verify"
},
{
"summary": "output version and copyright information",
"topic": "version"
}
],
"topics": [
{
"summary": "Configuration Files",
"topic": "config"
},
{
"summary": "Date Formats",
"topic": "dates"
},
{
"summary": "Diff Formats",
"topic": "diffs"
},
{
"summary": "Environment Variables",
"topic": "environment"
},
{
"summary": "Using Additional Features",
"topic": "extensions"
},
{
"summary": "Specifying File Sets",
"topic": "filesets"
},
{
"summary": "Glossary",
"topic": "glossary"
},
{
"summary": "Syntax for Mercurial Ignore Files",
"topic": "hgignore"
},
{
"summary": "Configuring hgweb",
"topic": "hgweb"
},
{
Gregory Szorc
help: add "internals" topic...
r27376 "summary": "Technical implementation topics",
"topic": "internals"
},
{
Gregory Szorc
json: implement {helptopics} template
r24590 "summary": "Merge Tools",
"topic": "merge-tools"
},
{
"summary": "Specifying Multiple Revisions",
"topic": "multirevs"
},
{
"summary": "File Name Patterns",
"topic": "patterns"
},
{
"summary": "Working with Phases",
"topic": "phases"
},
{
"summary": "Specifying Single Revisions",
"topic": "revisions"
},
{
"summary": "Specifying Revision Sets",
"topic": "revsets"
},
{
Gregory Szorc
help: scripting help topic...
r25881 "summary": "Using Mercurial from scripts and automation",
"topic": "scripting"
},
{
Gregory Szorc
json: implement {helptopics} template
r24590 "summary": "Subrepositories",
"topic": "subrepos"
},
{
"summary": "Template Usage",
"topic": "templating"
},
{
"summary": "URL Paths",
"topic": "urls"
}
]
}
Gregory Szorc
templates: add a stub template for json...
r24544
help/{topic} shows an individual help topic
$ request json-help/phases
200 Script output follows
Gregory Szorc
json: implement {help} template...
r24591 {
"rawdoc": "Working with Phases\n*", (glob)
"topic": "phases"
}