changeset 24544:71e96b9fd3fd

templates: add a stub template for json Many have long wanted hgweb to emit a common machine readable output. We start the process by defining a stub json template. Right now, each endpoint returns a stub "not yet implemented" string. Individual templates will be implemented in subsequent patches. Basic tests for templates have been included. Coverage isn't perfect, but it is better than nothing.
author Gregory Szorc <gregory.szorc@gmail.com>
date Mon, 30 Mar 2015 20:15:03 -0700
parents 747401086a38
children 9e0c67e84896
files mercurial/templates/json/map tests/test-hgweb-json.t
diffstat 2 files changed, 261 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/json/map	Mon Mar 30 20:15:03 2015 -0700
@@ -0,0 +1,20 @@
+mimetype = 'application/json'
+filerevision = '"not yet implemented"'
+search = '"not yet implemented"'
+shortlog = '"not yet implemented"'
+changelog = '"not yet implemented"'
+changeset = '"not yet implemented"'
+manifest = '"not yet implemented"'
+tags = '"not yet implemented"'
+bookmarks = '"not yet implemented"'
+branches = '"not yet implemented"'
+summary = '"not yet implemented"'
+filediff = '"not yet implemented"'
+filecomparison = '"not yet implemented"'
+fileannotate = '"not yet implemented"'
+filelog = '"not yet implemented"'
+graph = '"not yet implemented"'
+helptopics = '"not yet implemented"'
+help = '"not yet implemented"'
+filenodelink = ''
+filenolink = ''
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-hgweb-json.t	Mon Mar 30 20:15:03 2015 -0700
@@ -0,0 +1,241 @@
+#require json
+#require serve
+
+  $ request() {
+  >   $TESTDIR/get-with-headers.py --json localhost:$HGPORT "$1"
+  > }
+
+  $ 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
+  $ 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'
+
+  $ hg log -G
+  @  changeset:   7:6ab967a8ab34
+  |  branch:      test-branch
+  |  tag:         tip
+  |  parent:      0:06e557f3edf6
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     create test branch
+  |
+  | o  changeset:   6:ceed296fe500
+  | |  bookmark:    bookmark2
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     create tag2
+  | |
+  | o  changeset:   5:f2890a05fea4
+  | |  tag:         tag2
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     another commit to da/foo
+  | |
+  | o  changeset:   4:93a8ce14f891
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     create tag
+  | |
+  | o  changeset:   3:78896eb0e102
+  | |  tag:         tag1
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     move foo
+  | |
+  | o  changeset:   2:8d7c456572ac
+  | |  bookmark:    bookmark1
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     modify da/foo
+  | |
+  | o  changeset:   1:f8bbb9024b10
+  |/   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
+  
+
+  $ 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
+
+  $ request json-rev/06e557f3edf6/foo
+  200 Script output follows
+  
+  "not yet implemented"
+
+file/{revision} shows root directory info
+
+  $ request json-rev/06e557f3edf6
+  200 Script output follows
+  
+  "not yet implemented"
+
+changelog/ shows information about several changesets
+
+  $ request json-changelog
+  200 Script output follows
+  
+  "not yet implemented"
+
+changelog/{revision} shows information about a single changeset
+
+  $ request json-changelog/06e557f3edf6
+  200 Script output follows
+  
+  "not yet implemented"
+
+shortlog/ shows information about a set of changesets
+
+  $ request json-shortlog
+  200 Script output follows
+  
+  "not yet implemented"
+
+changeset/ renders the tip changeset
+
+  $ request json-rev
+  200 Script output follows
+  
+  "not yet implemented"
+
+changeset/{revision} shows tags
+
+  $ request json-rev/78896eb0e102
+  200 Script output follows
+  
+  "not yet implemented"
+
+changeset/{revision} shows bookmarks
+
+  $ request json-rev/8d7c456572ac
+  200 Script output follows
+  
+  "not yet implemented"
+
+changeset/{revision} shows branches
+
+  $ request json-rev/6ab967a8ab34
+  200 Script output follows
+  
+  "not yet implemented"
+
+manifest/{revision}/{path} shows info about a directory at a revision
+
+  $ request json-manifest/06e557f3edf6/
+  200 Script output follows
+  
+  "not yet implemented"
+
+tags/ shows tags info
+
+  $ request json-tags
+  200 Script output follows
+  
+  "not yet implemented"
+
+bookmarks/ shows bookmarks info
+
+  $ request json-bookmarks
+  200 Script output follows
+  
+  "not yet implemented"
+
+branches/ shows branches info
+
+  $ request json-branches
+  200 Script output follows
+  
+  "not yet implemented"
+
+summary/ shows a summary of repository state
+
+  $ request json-summary
+  200 Script output follows
+  
+  "not yet implemented"
+
+filediff/{revision}/{path} shows changes to a file in a revision
+
+  $ request json-diff/f8bbb9024b10/foo
+  200 Script output follows
+  
+  "not yet implemented"
+
+comparison/{revision}/{path} shows information about before and after for a file
+
+  $ request json-comparison/f8bbb9024b10/foo
+  200 Script output follows
+  
+  "not yet implemented"
+
+annotate/{revision}/{path} shows annotations for each line
+
+  $ request json-annotate/f8bbb9024b10/foo
+  200 Script output follows
+  
+  "not yet implemented"
+
+filelog/{revision}/{path} shows history of a single file
+
+  $ request json-filelog/f8bbb9024b10/foo
+  200 Script output follows
+  
+  "not yet implemented"
+
+(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
+  
+  "not yet implemented"
+
+help/{topic} shows an individual help topic
+
+  $ request json-help/phases
+  200 Script output follows
+  
+  "not yet implemented"