json: implement {manifest} template
Property naming was borrowed from `hg files -Tjson`.
We omit branch because, again, representation of branches in this
template is wonky.
--- a/mercurial/templates/json/map Tue Mar 31 22:53:48 2015 -0700
+++ b/mercurial/templates/json/map Wed Apr 01 22:04:03 2015 -0700
@@ -29,7 +29,27 @@
changesetbookmark = '{bookmark|json}'
changesettag = '{tag|json}'
changesetparent = '{node|json}'
-manifest = '"not yet implemented"'
+manifest = '\{
+ "node": {node|json},
+ "abspath": {path|json},
+ "directories": [{join(dentries%direntry, ", ")}],
+ "files": [{join(fentries%fileentry, ", ")}],
+ "bookmarks": [{join(bookmarks%name, ", ")}],
+ "tags": [{join(tags%name, ", ")}]
+ }'
+name = '{name|json}'
+direntry = '\{
+ "abspath": {path|json},
+ "basename": {basename|json},
+ "emptydirs": {emptydirs|json}
+ }'
+fileentry = '\{
+ "abspath": {file|json},
+ "basename": {basename|json},
+ "date": {date|json},
+ "size": {size|json},
+ "flags": {permissions|json}
+ }'
tags = '\{
"node": {node|json},
"tags": [{join(entriesnotip%tagentry, ", ")}]
--- a/tests/test-hgweb-json.t Tue Mar 31 22:53:48 2015 -0700
+++ b/tests/test-hgweb-json.t Wed Apr 01 22:04:03 2015 -0700
@@ -119,10 +119,46 @@
file/{revision} shows root directory info
- $ request json-file/06e557f3edf6
+ $ request json-file/cc725e08502a
200 Script output follows
- "not yet implemented"
+ {
+ "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"
+ ]
+ }
changelog/ shows information about several changesets
@@ -522,7 +558,31 @@
$ request json-manifest/06e557f3edf6/
200 Script output follows
- "not yet implemented"
+ {
+ "abspath": "/",
+ "bookmarks": [],
+ "directories": [
+ {
+ "abspath": "/da",
+ "basename": "da",
+ "emptydirs": ""
+ }
+ ],
+ "files": [
+ {
+ "abspath": "foo",
+ "basename": "foo",
+ "date": [
+ 0.0,
+ 0
+ ],
+ "flags": "",
+ "size": 4
+ }
+ ],
+ "node": "06e557f3edf66faa1ccaba5dd8c203c21cc79f1e",
+ "tags": []
+ }
tags/ shows tags info