[PATCH 2 of 5 json-style] templates: add a stub template for json

Gregory Szorc gregory.szorc at gmail.com
Tue Mar 31 16:56:05 CDT 2015


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1427771703 25200
#      Mon Mar 30 20:15:03 2015 -0700
# Node ID fae0544da181b17059db39b6012c761886de6248
# Parent  b2bd63cc9745e161f5249c467aeb871308b20d43
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.

diff --git a/mercurial/templates/json/map b/mercurial/templates/json/map
new file mode 100644
--- /dev/null
+++ b/mercurial/templates/json/map
@@ -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 = ''
diff --git a/tests/test-hgweb-json.t b/tests/test-hgweb-json.t
new file mode 100644
--- /dev/null
+++ b/tests/test-hgweb-json.t
@@ -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"


More information about the Mercurial-devel mailing list