# HG changeset patch
# User Jordi GutiƩrrez Hermoso <jordigh@octave.org>
# Date 2019-11-15 20:58:56
# Node ID d155bf11cf22483e4fef62ec5cc10db16b394260
# Parent  6feaee05bac5fb08d3a536f2a3f4c78859ead260

hgweb: add diffs to the json changeset template

While it's possible to get the diff for each file individually via an
obscure url that I'm not even sure is documented, (e.g.
diff/{rev}/{filename}?style=json ), it is more convenient to provide
the full diff from the changeset view. This is already normally
computed for other non-JSON templates, so it seems like an oversight
to omit it for the JSON one.

The output format is a bit unwieldy but it's consistent with the
existing format output by the aforementioned obscure url.

diff --git a/mercurial/templates/json/map b/mercurial/templates/json/map
--- a/mercurial/templates/json/map
+++ b/mercurial/templates/json/map
@@ -66,6 +66,7 @@ changeset = '\{
   "user": {author|utf8|json},
   "parents": [{join(parent%changesetparent, ", ")}],
   "files": [{join(files, ", ")}],
+  "diff": [{join(diff, ", ")}],
   "phase": {phase|json}
   }'
 changesetbranch = '{name|utf8|json}'
diff --git a/tests/test-hgweb-json.t b/tests/test-hgweb-json.t
--- a/tests/test-hgweb-json.t
+++ b/tests/test-hgweb-json.t
@@ -782,6 +782,7 @@ changeset/ renders the tip changeset
       0
     ],
     "desc": "merge test-branch into default",
+    "diff": [],
     "files": [
       {
         "file": "foo-new",
@@ -813,6 +814,58 @@ changeset/{revision} shows tags
       0
     ],
     "desc": "move foo",
+    "diff": [
+      {
+        "blockno": 1,
+        "lines": [
+          {
+            "l": "--- a/foo\tThu Jan 01 00:00:00 1970 +0000\n",
+            "n": 1,
+            "t": "-"
+          },
+          {
+            "l": "+++ /dev/null\tThu Jan 01 00:00:00 1970 +0000\n",
+            "n": 2,
+            "t": "+"
+          },
+          {
+            "l": "@@ -1,1 +0,0 @@\n",
+            "n": 3,
+            "t": "@"
+          },
+          {
+            "l": "-bar\n",
+            "n": 4,
+            "t": "-"
+          }
+        ]
+      },
+      {
+        "blockno": 2,
+        "lines": [
+          {
+            "l": "--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n",
+            "n": 1,
+            "t": "-"
+          },
+          {
+            "l": "+++ b/foo-new\tThu Jan 01 00:00:00 1970 +0000\n",
+            "n": 2,
+            "t": "+"
+          },
+          {
+            "l": "@@ -0,0 +1,1 @@\n",
+            "n": 3,
+            "t": "@"
+          },
+          {
+            "l": "+bar\n",
+            "n": 4,
+            "t": "+"
+          }
+        ]
+      }
+    ],
     "files": [
       {
         "file": "foo",
@@ -849,6 +902,38 @@ changeset/{revision} shows bookmarks
       0
     ],
     "desc": "modify da/foo",
+    "diff": [
+      {
+        "blockno": 1,
+        "lines": [
+          {
+            "l": "--- a/da/foo\tThu Jan 01 00:00:00 1970 +0000\n",
+            "n": 1,
+            "t": "-"
+          },
+          {
+            "l": "+++ b/da/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": "+"
+          }
+        ]
+      }
+    ],
     "files": [
       {
         "file": "da/foo",
@@ -877,6 +962,38 @@ changeset/{revision} shows branches
       0
     ],
     "desc": "create test branch",
+    "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": "+branch\n",
+            "n": 5,
+            "t": "+"
+          }
+        ]
+      }
+    ],
     "files": [
       {
         "file": "foo",