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.
--- /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"