D8314: phabricator: add an option to fold several commits into one review (issue6244)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

D8314: phabricator: add an option to fold several commits into one review (issue6244)

valentin.gatienbaron (Valentin Gatien-Baron)
mharbison72 created this revision.
Herald added subscribers: mercurial-devel, Kwan.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Now that all of the pieces are in place, alter the user facing command to allow
  it.  This is the default behavior when using `arc`, but I much prefer the 1:1
  approach, and I'm tempted to mark this advanced to limit its abuse.  I started
  out calling this `--no-stack` like the feature request suggested, but I found it
  less obvious (especially when writing the code), so I went with the `hg fold`
  analogue.
 
  This will populate the `Commits` tab in the web UI with the hash of each commit
  folded into the review.  From experimentation, it seems to list them in the
  order they are received from the extension instead of the actual parent/child
  relationship.  The extension sends them in sorted order, thanks to
  `templatefilters.json()`.  Since there's enough info there for them to put
  things in the right order, JSON is unordered aside from lists (IIUC), and there
  doesn't seem to be any harmful side effects, I guess we write this off as their
  bug.  It is simple enough to workaround by putting a check for `util.sortdict`
  into `templatefilters.json()`, and don't resort in that case.
 
  There are a handful of restrictions that are documented in the code, which
  somebody could probably fix if they're interested.  Notably, this requires the
  (default) `--amend` option, because there's not an easy way to apply a local tag
  across several commits.  This also doesn't do preflight checking to ensure that
  all previous commits that were part of a single review are selected when
  updating.  That seems expensive.  What happens is the excluded commit is dropped
  from the review, but it keeps the Differential Revision line in the commit
  message.  Not everything can be edited, so it doesn't seem worth making the code
  even more complicated to handle this edge case.
 
  The tests were run against an internal Docker container.  Once I get the sense
  that everyone is happy with the behavior and test coverage, I'll rerun it
  against the usual server to avoid spamming it in the meantime.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D8314

AFFECTED FILES
  hgext/phabricator.py
  tests/phabricator/phabsend-fold-extend-end.json
  tests/phabricator/phabsend-fold-extend-front.json
  tests/phabricator/phabsend-fold-no-changes.json
  tests/phabricator/phabsend-fold-updated.json
  tests/phabricator/phabsend-initial-fold.json
  tests/test-phabricator.t

CHANGE DETAILS

diff --git a/tests/test-phabricator.t b/tests/test-phabricator.t
--- a/tests/test-phabricator.t
+++ b/tests/test-phabricator.t
@@ -2,6 +2,9 @@
   $ cat >> $HGRCPATH <<EOF
   > [extensions]
   > phabricator =
+  >
+  > [phabricator]
+  > debug = True
   > EOF
   $ hg init repo
   $ cd repo
@@ -312,6 +315,7 @@
   $ hg config phabricator --debug
   invalid JSON in $TESTTMP/repo/.arcconfig
   read config from: */.hgrc (glob)
+  */.hgrc:*: phabricator.debug=True (glob)
   $TESTTMP/repo/.hg/hgrc:*: phabricator.url=https://phab.mercurial-scm.org/ (glob)
   $TESTTMP/repo/.hg/hgrc:*: phabricator.callsign=HG (glob)
 
@@ -325,6 +329,7 @@
   $ mv .hg/hgrc .hg/hgrc.bak
   $ hg config phabricator --debug
   read config from: */.hgrc (glob)
+  */.hgrc:*: phabricator.debug=True (glob)
   $TESTTMP/repo/.arcconfig: phabricator.callsign=HG
   $TESTTMP/repo/.arcconfig: phabricator.url=https://phab.mercurial-scm.org/
 
@@ -336,6 +341,7 @@
   > EOF
   $ hg config phabricator --debug
   read config from: */.hgrc (glob)
+  */.hgrc:*: phabricator.debug=True (glob)
   $TESTTMP/repo/.hg/hgrc:*: phabricator.url=local (glob)
   $TESTTMP/repo/.hg/hgrc:*: phabricator.callsign=local (glob)
   $ mv .hg/hgrc.bak .hg/hgrc
@@ -395,4 +401,244 @@
   applying patch from D7917
   applying patch from D7918
 
+Validate arguments with --fold
+
+  $ hg phabsend --fold -r 1
+  abort: cannot fold a single revision
+  [255]
+  $ hg phabsend --fold --no-amend -r 1::
+  abort: cannot fold with --no-amend
+  [255]
+  $ hg phabsend --fold -r 0+3
+  abort: cannot fold non-linear revisions
+  [255]
+  $ hg phabsend --fold -r 1::
+  abort: cannot fold revisions with different DREV values
+  [255]
+
+Setup a series of commits to be folded, and include the Test Plan field multiple
+times to test the concatenation logic.  No Test Plan field in the last one to
+ensure missing fields are skipped.
+
+  $ hg init ../folded
+  $ cd ../folded
+
+  $ echo 'added' > file.txt
+  $ hg ci -Aqm 'added file'
+
+  $ cat > log.txt <<EOF
+  > one: first commit to review
+  >
+  > This file was modified with 'mod1' as its contents.
+  >
+  > Test Plan:
+  > LOL!  What testing?!
+  > EOF
+  $ echo mod1 > file.txt
+  $ hg ci -l log.txt
+
+  $ cat > log.txt <<EOF
+  > two: second commit to review
+  >
+  > This file was modified with 'mod2' as its contents.
+  >
+  > Test Plan:
+  > Haha! yeah, right.
+  >
+  > EOF
+  $ echo mod2 > file.txt
+  $ hg ci -l log.txt
+
+  $ echo mod3 > file.txt
+  $ hg ci -m '3: a commit with no detailed message'
+
+The initial fold works...
+
+  $ echo y | hg phabsend --fold --confirm -r 1:: \
+  >          --test-vcr "$VCR/phabsend-initial-fold.json" \
+  >          --config phabricator.url=http://seg.attotech.com:18080
+  NEW - a959a3f69d8d: one: first commit to review
+  NEW - 24a4438154ba: two: second commit to review
+  NEW - d235829e802c: 3: a commit with no detailed message
+  Send the above changes to http://seg.attotech.com:18080 (yn)? y
+  D228 - created - a959a3f69d8d: one: first commit to review
+  D228 - created - 24a4438154ba: two: second commit to review
+  D228 - created - d235829e802c: 3: a commit with no detailed message
+  updating local commit list for D228
+  saved backup bundle to $TESTTMP/folded/.hg/strip-backup/a959a3f69d8d-a4a24136-phabsend.hg
+
+... and doesn't mangle the local commits.
+
+  $ hg log -T '{rev}:{node|short}\n{indent(desc, "  ")}\n'
+  3:18aa8410c577
+    3: a commit with no detailed message
+  
+    Differential Revision: http://seg.attotech.com:18080/D228
+  2:f4b7df7b9116
+    two: second commit to review
+  
+    This file was modified with 'mod2' as its contents.
+  
+    Test Plan:
+    Haha! yeah, right.
+  
+    Differential Revision: http://seg.attotech.com:18080/D228
+  1:ebffa7dae1fc
+    one: first commit to review
+  
+    This file was modified with 'mod1' as its contents.
+  
+    Test Plan:
+    LOL!  What testing?!
+  
+    Differential Revision: http://seg.attotech.com:18080/D228
+  0:98d480e0d494
+    added file
+
+Setup some obsmarkers by adding a file to the middle commit.  This stress tests
+getoldnodedrevmap() in later phabsends.
+
+  $ hg up '.^'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo 'modified' > file2.txt
+  $ hg add file2.txt
+  $ hg amend --config experimental.evolution=all --config extensions.amend=
+  1 new orphan changesets
+  $ hg up 3
+  obsolete feature not enabled but 1 markers found!
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg rebase --config experimental.evolution=all --config extensions.rebase=
+  note: not rebasing 2:f4b7df7b9116 "two: second commit to review", already in destination as 4:1c403ed53e5c "two: second commit to review" (tip)
+  rebasing 3:18aa8410c577 "3: a commit with no detailed message"
+
+When commits have changed locally, the local commit list on Phabricator is
+updated.
+
+  $ echo y | hg phabsend --fold --confirm -r 1:: \
+  >          --test-vcr "$VCR/phabsend-fold-updated.json" \
+  >          --config phabricator.url=http://seg.attotech.com:18080
+  obsolete feature not enabled but 2 markers found!
+  D228 - ebffa7dae1fc: one: first commit to review
+  D228 - 1c403ed53e5c: two: second commit to review
+  D228 - 5bc45b43505f: 3: a commit with no detailed message
+  Send the above changes to http://seg.attotech.com:18080 (yn)? y
+  D228 - updated - ebffa7dae1fc: one: first commit to review
+  D228 - updated - 1c403ed53e5c: two: second commit to review
+  D228 - updated - 5bc45b43505f: 3: a commit with no detailed message
+  obsolete feature not enabled but 2 markers found!
+  updating local commit list for D228
+  $ hg log -Tcompact
+  obsolete feature not enabled but 2 markers found!
+  5[tip]   5bc45b43505f   1970-01-01 00:00 +0000   test
+    3: a commit with no detailed message
+  
+  4:1   1c403ed53e5c   1970-01-01 00:00 +0000   test
+    two: second commit to review
+  
+  1   ebffa7dae1fc   1970-01-01 00:00 +0000   test
+    one: first commit to review
+  
+  0   98d480e0d494   1970-01-01 00:00 +0000   test
+    added file
+  
+When nothing has changed locally since the last phabsend, the commit list isn't
+updated, and nothing is changed locally afterward.
+
+  $ hg phabsend --fold -r 1:: --test-vcr "$VCR/phabsend-fold-no-changes.json" \
+  >          --config phabricator.url=http://seg.attotech.com:18080
+  obsolete feature not enabled but 2 markers found!
+  D228 - updated - ebffa7dae1fc: one: first commit to review
+  D228 - updated - 1c403ed53e5c: two: second commit to review
+  D228 - updated - 5bc45b43505f: 3: a commit with no detailed message
+  obsolete feature not enabled but 2 markers found!
+  local commit list for D228 is already up-to-date
+  $ hg log -Tcompact
+  obsolete feature not enabled but 2 markers found!
+  5[tip]   5bc45b43505f   1970-01-01 00:00 +0000   test
+    3: a commit with no detailed message
+  
+  4:1   1c403ed53e5c   1970-01-01 00:00 +0000   test
+    two: second commit to review
+  
+  1   ebffa7dae1fc   1970-01-01 00:00 +0000   test
+    one: first commit to review
+  
+  0   98d480e0d494   1970-01-01 00:00 +0000   test
+    added file
+  
+Fold will accept new revisions at the end...
+
+  $ echo 'another mod' > file2.txt
+  $ hg ci -m 'four: extend the fold range'
+  obsolete feature not enabled but 2 markers found!
+  $ hg phabsend --fold -r 1:: --test-vcr "$VCR/phabsend-fold-extend-end.json" \
+  >             --config experimental.evolution=all \
+  >             --config phabricator.url=http://seg.attotech.com:18080
+  D228 - updated - ebffa7dae1fc: one: first commit to review
+  D228 - updated - 1c403ed53e5c: two: second commit to review
+  D228 - updated - 5bc45b43505f: 3: a commit with no detailed message
+  D228 - created - 730a13e820f3: four: extend the fold range
+  updating local commit list for D228
+  $ hg log -r . -T '{desc}\n'
+  four: extend the fold range
+  
+  Differential Revision: http://seg.attotech.com:18080/D228
+  $ hg log -T'{rev} {if(phabreview, "{phabreview.url} {phabreview.id}")}\n' -r 1::
+  obsolete feature not enabled but 3 markers found!
+  1 http://seg.attotech.com:18080/D228 D228
+  4 http://seg.attotech.com:18080/D228 D228
+  5 http://seg.attotech.com:18080/D228 D228
+  7 http://seg.attotech.com:18080/D228 D228
+
+... and also accepts new revisions at the beginning of the range
+
+It's a bit unfortunate that not having a Differential URL on the first commit
+causes a new Differential Revision to be created, though it isn't *entirely*
+unreasonable.  At least this updates the subsequent commits.
+
+TODO: See if it can reuse the existing Differential.
+
+  $ hg phabsend --fold -r 0:: --test-vcr "$VCR/phabsend-fold-extend-front.json" \
+  >             --config experimental.evolution=all \
+  >             --config phabricator.url=http://seg.attotech.com:18080
+  D229 - created - 98d480e0d494: added file
+  D229 - updated - ebffa7dae1fc: one: first commit to review
+  D229 - updated - 1c403ed53e5c: two: second commit to review
+  D229 - updated - 5bc45b43505f: 3: a commit with no detailed message
+  D229 - updated - 5e38a7505725: four: extend the fold range
+  updating local commit list for D229
+
+  $ hg log -T '{rev}:{node|short}\n{indent(desc, "  ")}\n'
+  obsolete feature not enabled but 8 markers found!
+  12:769df1547476
+    four: extend the fold range
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+  11:13b0c920c66e
+    3: a commit with no detailed message
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+  10:c4255dd7ca15
+    two: second commit to review
+  
+    This file was modified with 'mod2' as its contents.
+  
+    Test Plan:
+    Haha! yeah, right.
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+  9:fe3e0d15e78d
+    one: first commit to review
+  
+    This file was modified with 'mod1' as its contents.
+  
+    Test Plan:
+    LOL!  What testing?!
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+  8:530dc5eeba61
+    added file
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+
   $ cd ..
diff --git a/tests/phabricator/phabsend-initial-fold.json b/tests/phabricator/phabsend-initial-fold.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-initial-fold.json
@@ -0,0 +1,753 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "187"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:05 GMT"
+                    ],
+                    "content-length": [
+                        "157"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+1%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22-added%5Cn%2Bmod3%5Cn%22%2C+%22delLines%22%3A+1%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+1%2C+%22oldOffset%22%3A+1%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%7D%2C+%22oldPath%22%3A+%22file.txt%22%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+2%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%2298d480e0d494906d9758c44c622951b429afd862%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1128"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:05 GMT"
+                    ],
+                    "content-length": [
+                        "168"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":297,\"phid\":\"PHID-DIFF-qxjpy75yihlwt6q4lb4u\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/297\\/\"},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%22d235829e802c98c0171dac4a265b4b9bad07093a%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+297%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%2224a4438154bad90603d53a4dd31d8daff7844b36%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%2224a4438154bad90603d53a4dd31d8daff7844b36%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22a959a3f69d8d498d96102cda0bc03ed89706891e%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22a959a3f69d8d498d96102cda0bc03ed89706891e%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22a959a3f69d8d498d96102cda0bc03ed89706891e%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22d235829e802c98c0171dac4a265b4b9bad07093a%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22d235829e802c98c0171dac4a265b4b9bad07093a%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2224a4438154bad90603d53a4dd31d8daff7844b36%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+297%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "287"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "496"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "284"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "494"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "183"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "284"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-qxjpy75yihlwt6q4lb4u%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22This+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%22%7D%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "710"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "335"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":228,\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-kzah5v4mj3ftxy5\"},{\"phid\":\"PHID-XACT-DREV-l2hv4lv2yh5tpkn\"},{\"phid\":\"PHID-XACT-DREV-zuuejsihb5lpsfz\"},{\"phid\":\"PHID-XACT-DREV-llwoazew35vhu7x\"},{\"phid\":\"PHID-XACT-DREV-clxozpgqgmf6l3s\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "145"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:07 GMT"
+                    ],
+                    "content-length": [
+                        "1659"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"228\",\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\",\"title\":\"one: first commit to review\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":1,\"lines.removed\":1},\"branch\":\"default\",\"summary\":\"This file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"2\",\"activeDiffPHID\":\"PHID-DIFF-qxjpy75yihlwt6q4lb4u\",\"diffs\":[\"297\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%2218aa8410c577ee9a972c3011d2c9ed2bac9e6df1%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+297%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:07 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%2218aa8410c577ee9a972c3011d2c9ed2bac9e6df1%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%2218aa8410c577ee9a972c3011d2c9ed2bac9e6df1%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22f4b7df7b9116d260efdf8ec41cfd2b269e0529df%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22f4b7df7b9116d260efdf8ec41cfd2b269e0529df%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22f4b7df7b9116d260efdf8ec41cfd2b269e0529df%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+297%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:07 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/phabricator/phabsend-fold-updated.json b/tests/phabricator/phabsend-fold-updated.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-fold-updated.json
@@ -0,0 +1,821 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22revisionIDs%22%3A+%5B228%2C+228%2C+228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "167"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.querydiffs"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:09 GMT"
+                    ],
+                    "content-length": [
+                        "1709"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"297\":{\"id\":\"297\",\"revisionID\":\"228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"406\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parents\":[\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0},\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "187"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:09 GMT"
+                    ],
+                    "content-length": [
+                        "157"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+1%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22-added%5Cn%2Bmod3%5Cn%22%2C+%22delLines%22%3A+1%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+1%2C+%22oldOffset%22%3A+1%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%7D%2C+%22oldPath%22%3A+%22file.txt%22%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+2%7D%2C+%22file2.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file2.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Bmodified%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%2298d480e0d494906d9758c44c622951b429afd862%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1704"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:09 GMT"
+                    ],
+                    "content-length": [
+                        "168"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":298,\"phid\":\"PHID-DIFF-cs6d4zo5njeejvzk46l4\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/298\\/\"},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+298%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:09 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+298%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "364"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "512"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "361"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "510"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "260"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "300"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22objectIdentifier%22%3A+228%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-cs6d4zo5njeejvzk46l4%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22This+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%22%7D%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "743"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "167"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":228,\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-xk6vxshjhsg3cj2\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "145"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "1665"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"228\",\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\",\"title\":\"one: first commit to review\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540670\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":2,\"lines.removed\":1},\"branch\":\"default\",\"summary\":\"This file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"3\",\"activeDiffPHID\":\"PHID-DIFF-cs6d4zo5njeejvzk46l4\",\"diffs\":[\"298\",\"297\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+298%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+298%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/phabricator/phabsend-fold-no-changes.json b/tests/phabricator/phabsend-fold-no-changes.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-fold-no-changes.json
@@ -0,0 +1,685 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22revisionIDs%22%3A+%5B228%2C+228%2C+228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "167"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.querydiffs"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "3817"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"298\":{\"id\":\"298\",\"revisionID\":\"228\",\"dateCreated\":\"1584540669\",\"dateModified\":\"1584540670\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"408\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"yXvxVg6uibwd\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+modified\\n\"}]},{\"id\":\"407\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"297\":{\"id\":\"297\",\"revisionID\":\"228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"406\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parents\":[\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0},\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "187"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "157"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+1%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22-added%5Cn%2Bmod3%5Cn%22%2C+%22delLines%22%3A+1%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+1%2C+%22oldOffset%22%3A+1%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%7D%2C+%22oldPath%22%3A+%22file.txt%22%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+2%7D%2C+%22file2.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file2.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Bmodified%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%2298d480e0d494906d9758c44c622951b429afd862%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1704"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "168"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":299,\"phid\":\"PHID-DIFF-wyhl4c7uc6hoynlzo3fb\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/299\\/\"},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+299%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+299%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "364"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "512"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "361"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "510"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "260"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:12 GMT"
+                    ],
+                    "content-length": [
+                        "300"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22objectIdentifier%22%3A+228%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-wyhl4c7uc6hoynlzo3fb%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22This+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%22%7D%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "743"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:12 GMT"
+                    ],
+                    "content-length": [
+                        "167"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":228,\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-5mixabe4z6cr5j2\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "145"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:12 GMT"
+                    ],
+                    "content-length": [
+                        "1671"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"228\",\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\",\"title\":\"one: first commit to review\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540672\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":2,\"lines.removed\":1},\"branch\":\"default\",\"summary\":\"This file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"3\",\"activeDiffPHID\":\"PHID-DIFF-wyhl4c7uc6hoynlzo3fb\",\"diffs\":[\"299\",\"298\",\"297\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/phabricator/phabsend-fold-extend-front.json b/tests/phabricator/phabsend-fold-extend-front.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-fold-extend-front.json
@@ -0,0 +1,957 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"300\":{\"id\":\"300\",\"revisionID\":\"228\",\"dateCreated\":\"1584546799\",\"dateModified\":\"1584546799\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"412\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"r1N4i770De9n\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+another mod\\n\"}]},{\"id\":\"411\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5e38a7505725b24df8c04c2a295c581c43b6a0b3\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"5e38a7505725b24df8c04c2a295c581c43b6a0b3\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5e38a7505725b24df8c04c2a295c581c43b6a0b3\",\"parents\":[\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"299\":{\"id\":\"299\",\"revisionID\":\"228\",\"dateCreated\":\"1584540671\",\"dateModified\":\"1584540672\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"410\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"yXvxVg6uibwd\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+modified\\n\"}]},{\"id\":\"409\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"298\":{\"id\":\"298\",\"revisionID\":\"228\",\"dateCreated\":\"1584540669\",\"dateModified\":\"1584540670\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"408\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"yXvxVg6uibwd\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+modified\\n\"}]},{\"id\":\"407\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"297\":{\"id\":\"297\",\"revisionID\":\"228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"406\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parents\":[\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0},\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"}},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:37:59 GMT"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "transfer-encoding": [
+                        "chunked"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.querydiffs",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22revisionIDs%22%3A+%5B228%2C+228%2C+228%2C+228%5D%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "174"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:37:59 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "157"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "187"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":301,\"phid\":\"PHID-DIFF-yw32d3ikk7xgrvokuybh\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/301\\/\"},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:37:59 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "168"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Bmod3%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%2C+%22file2.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file2.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Banother+mod%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%220000000000000000000000000000000000000000%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "1724"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:37:59 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "51"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%2C+%5C%22parent%5C%22%3A+%5C%220000000000000000000000000000000000000000%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+301%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "480"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "51"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%220000000000000000000000000000000000000000%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+301%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "2128"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"added file\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"added file\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "232"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22added+file%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "155"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "512"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "364"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "510"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "361"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "300"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "260"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"four: extend the fold range\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"four: extend the fold range\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "282"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22four%3A+extend+the+fold+range%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "251"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":229,\"phid\":\"PHID-DREV-y4ekpkv2gziziagi3mwz\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-llf5jpejbvnsni7\"},{\"phid\":\"PHID-XACT-DREV-o7wz3izqlh3f4wq\"},{\"phid\":\"PHID-XACT-DREV-7idntuw4bkhswt4\"},{\"phid\":\"PHID-XACT-DREV-aedznsiaxajtubn\"},{\"phid\":\"PHID-XACT-DREV-q3dvuhepha3n4ry\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "335"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-yw32d3ikk7xgrvokuybh%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22added+file%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%5Cn%5Cnfour%3A+extend+the+fold+range%22%7D%5D%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "765"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"229\",\"phid\":\"PHID-DREV-y4ekpkv2gziziagi3mwz\",\"title\":\"added file\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D229\",\"dateCreated\":\"1584553081\",\"dateModified\":\"1584553081\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":2,\"lines.removed\":0},\"branch\":\"default\",\"summary\":\"one: first commit to review\\n\\nThis file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\\n\\nfour: extend the fold range\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"2\",\"activeDiffPHID\":\"PHID-DIFF-yw32d3ikk7xgrvokuybh\",\"diffs\":[\"301\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:01 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "2208"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B229%5D%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "145"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:01 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "51"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%22769df1547476465dff8529eb6f951eb232d6a7ed%5C%22%2C+%5C%22parent%5C%22%3A+%5C%220000000000000000000000000000000000000000%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+301%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "480"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:01 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "51"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%2213b0c920c66eb2cde6f3dc7b6d758057999507ae%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%2213b0c920c66eb2cde6f3dc7b6d758057999507ae%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22c4255dd7ca157aeb97f7dddeab6e04d25823a336%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22530dc5eeba61133e4e8b58d820c9e1bbe0068e5a%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22530dc5eeba61133e4e8b58d820c9e1bbe0068e5a%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%220000000000000000000000000000000000000000%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22769df1547476465dff8529eb6f951eb232d6a7ed%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22769df1547476465dff8529eb6f951eb232d6a7ed%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2213b0c920c66eb2cde6f3dc7b6d758057999507ae%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22c4255dd7ca157aeb97f7dddeab6e04d25823a336%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22c4255dd7ca157aeb97f7dddeab6e04d25823a336%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22fe3e0d15e78d1e7973b43a0ddecb6212e6ea4b09%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22fe3e0d15e78d1e7973b43a0ddecb6212e6ea4b09%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22fe3e0d15e78d1e7973b43a0ddecb6212e6ea4b09%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22530dc5eeba61133e4e8b58d820c9e1bbe0068e5a%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+301%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "2128"
+                    ]
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/phabricator/phabsend-fold-extend-end.json b/tests/phabricator/phabsend-fold-extend-end.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-fold-extend-end.json
@@ -0,0 +1,889 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"299\":{\"id\":\"299\",\"revisionID\":\"228\",\"dateCreated\":\"1584540671\",\"dateModified\":\"1584540672\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"410\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"yXvxVg6uibwd\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+modified\\n\"}]},{\"id\":\"409\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"298\":{\"id\":\"298\",\"revisionID\":\"228\",\"dateCreated\":\"1584540669\",\"dateModified\":\"1584540670\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"408\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"yXvxVg6uibwd\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+modified\\n\"}]},{\"id\":\"407\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"297\":{\"id\":\"297\",\"revisionID\":\"228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"406\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parents\":[\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0},\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"}},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "5925"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:18 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22revisionIDs%22%3A+%5B228%2C+228%2C+228%5D%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "167"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.querydiffs"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "157"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "187"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":300,\"phid\":\"PHID-DIFF-wjuxqm4ki5qshuwjeslu\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/300\\/\"},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "168"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+1%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22-added%5Cn%2Bmod3%5Cn%22%2C+%22delLines%22%3A+1%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+1%2C+%22oldOffset%22%3A+1%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%7D%2C+%22oldPath%22%3A+%22file.txt%22%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+2%7D%2C+%22file2.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file2.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Banother+mod%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%2298d480e0d494906d9758c44c622951b429afd862%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "1707"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%22730a13e820f3d9b73e76f718d60f8212b72b9abc%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+300%2C+%22name%22%3A+%22hg%3Ameta%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "480"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22730a13e820f3d9b73e76f718d60f8212b72b9abc%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22730a13e820f3d9b73e76f718d60f8212b72b9abc%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+300%2C+%22name%22%3A+%22local%3Acommits%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "1744"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "512"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "364"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "510"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "361"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "300"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "260"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"four: extend the fold range\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"four: extend the fold range\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "266"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22four%3A+extend+the+fold+range%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "174"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":228,\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-pz4ol5chxf6oznh\"},{\"phid\":\"PHID-XACT-DREV-eawnjwh77uzb3qs\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "209"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:19 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22objectIdentifier%22%3A+228%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-wjuxqm4ki5qshuwjeslu%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22This+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%5Cn%5Cnfour%3A+extend+the+fold+range%22%7D%5D%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "780"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"228\",\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\",\"title\":\"one: first commit to review\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584546799\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":2,\"lines.removed\":1},\"branch\":\"default\",\"summary\":\"This file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\\n\\nfour: extend the fold range\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"3\",\"activeDiffPHID\":\"PHID-DIFF-wjuxqm4ki5qshuwjeslu\",\"diffs\":[\"300\",\"299\",\"298\",\"297\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "1960"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:20 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B228%5D%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "145"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:20 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+300%2C+%22name%22%3A+%22hg%3Ameta%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "480"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 15:53:20 GMT"
+                    ]
+                }
+            },
+            "request": {
+                "body": "output=json&__conduit__=1&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+300%2C+%22name%22%3A+%22local%3Acommits%22%7D",
+                "headers": {
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "content-length": [
+                        "1744"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hgext/phabricator.py b/hgext/phabricator.py
--- a/hgext/phabricator.py
+++ b/hgext/phabricator.py
@@ -115,6 +115,10 @@
 eh.configitem(
     b'phabricator', b'curlcmd', default=None,
 )
+# developer config: phabricator.debug
+eh.configitem(
+    b'phabricator', b'debug', default=False,
+)
 # developer config: phabricator.repophid
 eh.configitem(
     b'phabricator', b'repophid', default=None,
@@ -279,6 +283,21 @@
     return decorate
 
 
+def _debug(ui, *msg, **opts):
+    """write debug output for Phabricator if ``phabricator.debug`` is set
+
+    Specifically, this avoids dumping Conduit and HTTP auth chatter that is
+    printed with the --debug argument.
+    """
+    if ui.configbool(b"phabricator", b"debug"):
+        flag = ui.debugflag
+        try:
+            ui.debugflag = True
+            ui.write(*msg, **opts)
+        finally:
+            ui.debugflag = flag
+
+
 def urlencodenested(params):
     """like urlencode, but works with nested parameters.
 
@@ -1211,6 +1230,7 @@
             _(b'add a comment to Revisions with new/updated Diffs'),
         ),
         (b'', b'confirm', None, _(b'ask for confirmation before sending')),
+        (b'', b'fold', False, _(b'combine the revisions into one review')),
     ],
     _(b'REV [OPTIONS]'),
     helpcategory=command.CATEGORY_IMPORT_EXPORT,
@@ -1239,6 +1259,12 @@
         [phabsend]
         confirm = true
 
+    By default, a separate review will be created for each commit that is
+    selected, and will have the same parent/child relationship in Phabricator.
+    If ``--fold`` is set, multiple commits are rolled up into a single review
+    as if diffed from the parent of the first revision to the last.  The commit
+    messages are concatenated in the summary field on Phabricator.
+
     phabsend will check obsstore and the above association to decide whether to
     update an existing Differential Revision, or create a new one.
     """
@@ -1252,6 +1278,44 @@
     if opts.get(b'amend'):
         cmdutil.checkunfinished(repo)
 
+    ctxs = [repo[rev] for rev in revs]
+
+    fold = opts.get(b'fold')
+    if fold:
+        if len(revs) == 1:
+            # TODO: just switch to --no-fold instead?
+            raise error.Abort(_(b"cannot fold a single revision"))
+
+        # There's no clear way to manage multiple commits with a Dxxx tag, so
+        # require the amend option.  (We could append "_nnn", but then it
+        # becomes jumbled if earlier commits are added to an update.)  It should
+        # lock the repo and ensure that the range is editable, but that would
+        # make the code pretty convoluted.  The default behavior of `arc` is to
+        # create a new review anyway.
+        if not opts.get(b"amend"):
+            raise error.Abort(_(b"cannot fold with --no-amend"))
+
+        # Ensure the local commits are an unbroken range
+        revrange = repo.revs(b'(first(%ld)::last(%ld))', revs, revs)
+        if any(r for r in revs if r not in revrange) or any(
+            r for r in revrange if r not in revs
+        ):
+            raise error.Abort(_(b"cannot fold non-linear revisions"))
+
+        # It might be possible to bucketize the revisions by the DREV value, and
+        # iterate over those groups when posting, and then again when amending.
+        # But for simplicity, require all selected revisions to be for the same
+        # DREV (if present).  Adding local revisions to an existing DREV is
+        # acceptable.
+        drevmatchers = [
+            _differentialrevisiondescre.search(ctx.description())
+            for ctx in ctxs
+        ]
+        if len({m.group('url') for m in drevmatchers if m}) > 1:
+            raise error.Abort(
+                _(b"cannot fold revisions with different DREV values")
+            )
+
     # {newnode: (oldnode, olddiff, olddrev}
     oldmap = getoldnodedrevmap(repo, [repo[r].node() for r in revs])
 
@@ -1284,17 +1348,25 @@
     # Send patches one by one so we know their Differential Revision PHIDs and
     # can provide dependency relationship
     lastrevphid = None
-    for rev in revs:
-        ui.debug(b'sending rev %d\n' % rev)
-        ctx = repo[rev]
+    for ctx in ctxs:
+        if fold:
+            ui.debug(b'sending rev %d::%d\n' % (ctx.rev(), ctxs[-1].rev()))
+        else:
+            ui.debug(b'sending rev %d\n' % ctx.rev())
 
         # Get Differential Revision ID
         oldnode, olddiff, revid = oldmap.get(ctx.node(), (None, None, None))
-        oldbasenode = oldnode
+        oldbasenode, oldbasediff, oldbaserevid = oldnode, olddiff, revid
+
+        if fold:
+            oldbasenode, oldbasediff, oldbaserevid = oldmap.get(
+                ctxs[-1].node(), (None, None, None)
+            )
+
         if oldnode != ctx.node() or opts.get(b'amend'):
             # Create or update Differential Revision
             revision, diff = createdifferentialrevision(
-                [ctx],
+                ctxs if fold else [ctx],
                 revid,
                 lastrevphid,
                 oldbasenode,
@@ -1303,7 +1375,13 @@
                 actions,
                 opts.get(b'comment'),
             )
-            diffmap[ctx.node()] = diff
+
+            if fold:
+                for ctx in ctxs:
+                    diffmap[ctx.node()] = diff
+            else:
+                diffmap[ctx.node()] = diff
+
             newrevid = int(revision[b'object'][b'id'])
             newrevphid = revision[b'object'][b'phid']
             if revid:
@@ -1313,18 +1391,19 @@
 
             # Create a local tag to note the association, if commit message
             # does not have it already
-            m = _differentialrevisiondescre.search(ctx.description())
-            if not m or int(m.group('id')) != newrevid:
-                tagname = b'D%d' % newrevid
-                tags.tag(
-                    repo,
-                    tagname,
-                    ctx.node(),
-                    message=None,
-                    user=None,
-                    date=None,
-                    local=True,
-                )
+            if not fold:
+                m = _differentialrevisiondescre.search(ctx.description())
+                if not m or int(m.group('id')) != newrevid:
+                    tagname = b'D%d' % newrevid
+                    tags.tag(
+                        repo,
+                        tagname,
+                        ctx.node(),
+                        message=None,
+                        user=None,
+                        date=None,
+                        local=True,
+                    )
         else:
             # Nothing changed. But still set "newrevphid" so the next revision
             # could depend on this one and "newrevid" for the summary line.
@@ -1335,6 +1414,15 @@
         drevids.append(newrevid)
         lastrevphid = newrevphid
 
+        if fold:
+            for c in ctxs:
+                if oldmap.get(c.node(), (None, None, None)[2]):
+                    action = b'updated'
+                else:
+                    action = b'created'
+                _print_phabsend_action(ui, c, newrevid, action)
+            break
+
         _print_phabsend_action(ui, ctx, newrevid, action)
 
     # Update commit messages and remove tags
@@ -1344,11 +1432,17 @@
         with repo.wlock(), repo.lock(), repo.transaction(b'phabsend'):
             wnode = unfi[b'.'].node()
             mapping = {}  # {oldnode: [newnode]}
+            newnodes = []
+
+            drevid = drevids[0]
+
             for i, rev in enumerate(revs):
                 old = unfi[rev]
-                drevid = drevids[i]
+                if not fold:
+                    drevid = drevids[i]
                 drev = [d for d in drevs if int(d[b'id']) == drevid][0]
-                newdesc = get_amended_desc(drev, old, False)
+
+                newdesc = get_amended_desc(drev, old, fold)
                 # Make sure commit message contain "Differential Revision"
                 if old.description() != newdesc:
                     if old.phase() == phases.public:
@@ -1375,21 +1469,53 @@
 
                     mapping[old.node()] = [newnode]
 
+                    if fold:
+                        # Defer updating the (single) Diff until all nodes are
+                        # collected.  No tags were created, so none need to be
+                        # removed.
+                        newnodes.append(newnode)
+                        continue
+
                     _amend_diff_properties(
                         unfi, drevid, [newnode], diffmap[old.node()]
                     )
-                # Remove local tags since it's no longer necessary
-                tagname = b'D%d' % drevid
-                if tagname in repo.tags():
-                    tags.tag(
-                        repo,
-                        tagname,
-                        nullid,
-                        message=None,
-                        user=None,
-                        date=None,
-                        local=True,
+
+                    # Remove local tags since it's no longer necessary
+                    tagname = b'D%d' % drevid
+                    if tagname in repo.tags():
+                        tags.tag(
+                            repo,
+                            tagname,
+                            nullid,
+                            message=None,
+                            user=None,
+                            date=None,
+                            local=True,
+                        )
+                elif fold:
+                    # When folding multiple commits into one review with
+                    # --fold, track even the commits that weren't amended, so
+                    # that their association isn't lost if the properties are
+                    # rewritten below.
+                    newnodes.append(old.node())
+
+            if fold:
+                diff = diffmap[old.node()]
+
+                # The diff object in diffmap doesn't have the local commits
+                # because that could be returned from differential.creatediff,
+                # not differential.querydiffs.  So use the queried diff (if
+                # present), or force the amend (a new revision is being posted.)
+                if not olddiff or set(newnodes) != getlocalcommits(olddiff):
+                    _debug(ui, b"updating local commit list for D%d\n" % drevid)
+                    _amend_diff_properties(unfi, drevid, newnodes, diff)
+                else:
+                    _debug(
+                        ui,
+                        b"local commit list for D%d is already up-to-date\n"
+                        % drevid,
                     )
+
             scmutil.cleanupnodes(repo, mapping, b'phabsend', fixphase=True)
             if wnode in mapping:
                 unfi.setparents(mapping[wnode][0])



To: mharbison72, #hg-reviewers
Cc: Kwan, mercurial-devel
_______________________________________________
Mercurial-devel mailing list
[hidden email]
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Reply | Threaded
Open this post in threaded view
|

D8314: phabricator: add an option to fold several commits into one review (issue6244)

valentin.gatienbaron (Valentin Gatien-Baron)
mharbison72 updated this revision to Diff 20910.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D8314?vs=20854&id=20910

BRANCH
  default

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D8314/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D8314

AFFECTED FILES
  hgext/phabricator.py
  tests/phabricator/phabsend-fold-extend-end.json
  tests/phabricator/phabsend-fold-extend-front.json
  tests/phabricator/phabsend-fold-no-changes.json
  tests/phabricator/phabsend-fold-updated.json
  tests/phabricator/phabsend-initial-fold.json
  tests/test-phabricator.t

CHANGE DETAILS

diff --git a/tests/test-phabricator.t b/tests/test-phabricator.t
--- a/tests/test-phabricator.t
+++ b/tests/test-phabricator.t
@@ -2,6 +2,9 @@
   $ cat >> $HGRCPATH <<EOF
   > [extensions]
   > phabricator =
+  >
+  > [phabricator]
+  > debug = True
   > EOF
   $ hg init repo
   $ cd repo
@@ -312,6 +315,7 @@
   $ hg config phabricator --debug
   invalid JSON in $TESTTMP/repo/.arcconfig
   read config from: */.hgrc (glob)
+  */.hgrc:*: phabricator.debug=True (glob)
   $TESTTMP/repo/.hg/hgrc:*: phabricator.url=https://phab.mercurial-scm.org/ (glob)
   $TESTTMP/repo/.hg/hgrc:*: phabricator.callsign=HG (glob)
 
@@ -325,6 +329,7 @@
   $ mv .hg/hgrc .hg/hgrc.bak
   $ hg config phabricator --debug
   read config from: */.hgrc (glob)
+  */.hgrc:*: phabricator.debug=True (glob)
   $TESTTMP/repo/.arcconfig: phabricator.callsign=HG
   $TESTTMP/repo/.arcconfig: phabricator.url=https://phab.mercurial-scm.org/
 
@@ -336,6 +341,7 @@
   > EOF
   $ hg config phabricator --debug
   read config from: */.hgrc (glob)
+  */.hgrc:*: phabricator.debug=True (glob)
   $TESTTMP/repo/.hg/hgrc:*: phabricator.url=local (glob)
   $TESTTMP/repo/.hg/hgrc:*: phabricator.callsign=local (glob)
   $ mv .hg/hgrc.bak .hg/hgrc
@@ -395,4 +401,244 @@
   applying patch from D7917
   applying patch from D7918
 
+Validate arguments with --fold
+
+  $ hg phabsend --fold -r 1
+  abort: cannot fold a single revision
+  [255]
+  $ hg phabsend --fold --no-amend -r 1::
+  abort: cannot fold with --no-amend
+  [255]
+  $ hg phabsend --fold -r 0+3
+  abort: cannot fold non-linear revisions
+  [255]
+  $ hg phabsend --fold -r 1::
+  abort: cannot fold revisions with different DREV values
+  [255]
+
+Setup a series of commits to be folded, and include the Test Plan field multiple
+times to test the concatenation logic.  No Test Plan field in the last one to
+ensure missing fields are skipped.
+
+  $ hg init ../folded
+  $ cd ../folded
+
+  $ echo 'added' > file.txt
+  $ hg ci -Aqm 'added file'
+
+  $ cat > log.txt <<EOF
+  > one: first commit to review
+  >
+  > This file was modified with 'mod1' as its contents.
+  >
+  > Test Plan:
+  > LOL!  What testing?!
+  > EOF
+  $ echo mod1 > file.txt
+  $ hg ci -l log.txt
+
+  $ cat > log.txt <<EOF
+  > two: second commit to review
+  >
+  > This file was modified with 'mod2' as its contents.
+  >
+  > Test Plan:
+  > Haha! yeah, right.
+  >
+  > EOF
+  $ echo mod2 > file.txt
+  $ hg ci -l log.txt
+
+  $ echo mod3 > file.txt
+  $ hg ci -m '3: a commit with no detailed message'
+
+The initial fold works...
+
+  $ echo y | hg phabsend --fold --confirm -r 1:: \
+  >          --test-vcr "$VCR/phabsend-initial-fold.json" \
+  >          --config phabricator.url=http://seg.attotech.com:18080
+  NEW - a959a3f69d8d: one: first commit to review
+  NEW - 24a4438154ba: two: second commit to review
+  NEW - d235829e802c: 3: a commit with no detailed message
+  Send the above changes to http://seg.attotech.com:18080 (yn)? y
+  D228 - created - a959a3f69d8d: one: first commit to review
+  D228 - created - 24a4438154ba: two: second commit to review
+  D228 - created - d235829e802c: 3: a commit with no detailed message
+  updating local commit list for D228
+  saved backup bundle to $TESTTMP/folded/.hg/strip-backup/a959a3f69d8d-a4a24136-phabsend.hg
+
+... and doesn't mangle the local commits.
+
+  $ hg log -T '{rev}:{node|short}\n{indent(desc, "  ")}\n'
+  3:18aa8410c577
+    3: a commit with no detailed message
+  
+    Differential Revision: http://seg.attotech.com:18080/D228
+  2:f4b7df7b9116
+    two: second commit to review
+  
+    This file was modified with 'mod2' as its contents.
+  
+    Test Plan:
+    Haha! yeah, right.
+  
+    Differential Revision: http://seg.attotech.com:18080/D228
+  1:ebffa7dae1fc
+    one: first commit to review
+  
+    This file was modified with 'mod1' as its contents.
+  
+    Test Plan:
+    LOL!  What testing?!
+  
+    Differential Revision: http://seg.attotech.com:18080/D228
+  0:98d480e0d494
+    added file
+
+Setup some obsmarkers by adding a file to the middle commit.  This stress tests
+getoldnodedrevmap() in later phabsends.
+
+  $ hg up '.^'
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo 'modified' > file2.txt
+  $ hg add file2.txt
+  $ hg amend --config experimental.evolution=all --config extensions.amend=
+  1 new orphan changesets
+  $ hg up 3
+  obsolete feature not enabled but 1 markers found!
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg rebase --config experimental.evolution=all --config extensions.rebase=
+  note: not rebasing 2:f4b7df7b9116 "two: second commit to review", already in destination as 4:1c403ed53e5c "two: second commit to review" (tip)
+  rebasing 3:18aa8410c577 "3: a commit with no detailed message"
+
+When commits have changed locally, the local commit list on Phabricator is
+updated.
+
+  $ echo y | hg phabsend --fold --confirm -r 1:: \
+  >          --test-vcr "$VCR/phabsend-fold-updated.json" \
+  >          --config phabricator.url=http://seg.attotech.com:18080
+  obsolete feature not enabled but 2 markers found!
+  D228 - ebffa7dae1fc: one: first commit to review
+  D228 - 1c403ed53e5c: two: second commit to review
+  D228 - 5bc45b43505f: 3: a commit with no detailed message
+  Send the above changes to http://seg.attotech.com:18080 (yn)? y
+  D228 - updated - ebffa7dae1fc: one: first commit to review
+  D228 - updated - 1c403ed53e5c: two: second commit to review
+  D228 - updated - 5bc45b43505f: 3: a commit with no detailed message
+  obsolete feature not enabled but 2 markers found!
+  updating local commit list for D228
+  $ hg log -Tcompact
+  obsolete feature not enabled but 2 markers found!
+  5[tip]   5bc45b43505f   1970-01-01 00:00 +0000   test
+    3: a commit with no detailed message
+  
+  4:1   1c403ed53e5c   1970-01-01 00:00 +0000   test
+    two: second commit to review
+  
+  1   ebffa7dae1fc   1970-01-01 00:00 +0000   test
+    one: first commit to review
+  
+  0   98d480e0d494   1970-01-01 00:00 +0000   test
+    added file
+  
+When nothing has changed locally since the last phabsend, the commit list isn't
+updated, and nothing is changed locally afterward.
+
+  $ hg phabsend --fold -r 1:: --test-vcr "$VCR/phabsend-fold-no-changes.json" \
+  >          --config phabricator.url=http://seg.attotech.com:18080
+  obsolete feature not enabled but 2 markers found!
+  D228 - updated - ebffa7dae1fc: one: first commit to review
+  D228 - updated - 1c403ed53e5c: two: second commit to review
+  D228 - updated - 5bc45b43505f: 3: a commit with no detailed message
+  obsolete feature not enabled but 2 markers found!
+  local commit list for D228 is already up-to-date
+  $ hg log -Tcompact
+  obsolete feature not enabled but 2 markers found!
+  5[tip]   5bc45b43505f   1970-01-01 00:00 +0000   test
+    3: a commit with no detailed message
+  
+  4:1   1c403ed53e5c   1970-01-01 00:00 +0000   test
+    two: second commit to review
+  
+  1   ebffa7dae1fc   1970-01-01 00:00 +0000   test
+    one: first commit to review
+  
+  0   98d480e0d494   1970-01-01 00:00 +0000   test
+    added file
+  
+Fold will accept new revisions at the end...
+
+  $ echo 'another mod' > file2.txt
+  $ hg ci -m 'four: extend the fold range'
+  obsolete feature not enabled but 2 markers found!
+  $ hg phabsend --fold -r 1:: --test-vcr "$VCR/phabsend-fold-extend-end.json" \
+  >             --config experimental.evolution=all \
+  >             --config phabricator.url=http://seg.attotech.com:18080
+  D228 - updated - ebffa7dae1fc: one: first commit to review
+  D228 - updated - 1c403ed53e5c: two: second commit to review
+  D228 - updated - 5bc45b43505f: 3: a commit with no detailed message
+  D228 - created - 730a13e820f3: four: extend the fold range
+  updating local commit list for D228
+  $ hg log -r . -T '{desc}\n'
+  four: extend the fold range
+  
+  Differential Revision: http://seg.attotech.com:18080/D228
+  $ hg log -T'{rev} {if(phabreview, "{phabreview.url} {phabreview.id}")}\n' -r 1::
+  obsolete feature not enabled but 3 markers found!
+  1 http://seg.attotech.com:18080/D228 D228
+  4 http://seg.attotech.com:18080/D228 D228
+  5 http://seg.attotech.com:18080/D228 D228
+  7 http://seg.attotech.com:18080/D228 D228
+
+... and also accepts new revisions at the beginning of the range
+
+It's a bit unfortunate that not having a Differential URL on the first commit
+causes a new Differential Revision to be created, though it isn't *entirely*
+unreasonable.  At least this updates the subsequent commits.
+
+TODO: See if it can reuse the existing Differential.
+
+  $ hg phabsend --fold -r 0:: --test-vcr "$VCR/phabsend-fold-extend-front.json" \
+  >             --config experimental.evolution=all \
+  >             --config phabricator.url=http://seg.attotech.com:18080
+  D229 - created - 98d480e0d494: added file
+  D229 - updated - ebffa7dae1fc: one: first commit to review
+  D229 - updated - 1c403ed53e5c: two: second commit to review
+  D229 - updated - 5bc45b43505f: 3: a commit with no detailed message
+  D229 - updated - 5e38a7505725: four: extend the fold range
+  updating local commit list for D229
+
+  $ hg log -T '{rev}:{node|short}\n{indent(desc, "  ")}\n'
+  obsolete feature not enabled but 8 markers found!
+  12:769df1547476
+    four: extend the fold range
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+  11:13b0c920c66e
+    3: a commit with no detailed message
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+  10:c4255dd7ca15
+    two: second commit to review
+  
+    This file was modified with 'mod2' as its contents.
+  
+    Test Plan:
+    Haha! yeah, right.
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+  9:fe3e0d15e78d
+    one: first commit to review
+  
+    This file was modified with 'mod1' as its contents.
+  
+    Test Plan:
+    LOL!  What testing?!
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+  8:530dc5eeba61
+    added file
+  
+    Differential Revision: http://seg.attotech.com:18080/D229
+
   $ cd ..
diff --git a/tests/phabricator/phabsend-initial-fold.json b/tests/phabricator/phabsend-initial-fold.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-initial-fold.json
@@ -0,0 +1,753 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "187"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:05 GMT"
+                    ],
+                    "content-length": [
+                        "157"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+1%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22-added%5Cn%2Bmod3%5Cn%22%2C+%22delLines%22%3A+1%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+1%2C+%22oldOffset%22%3A+1%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%7D%2C+%22oldPath%22%3A+%22file.txt%22%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+2%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%2298d480e0d494906d9758c44c622951b429afd862%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1128"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:05 GMT"
+                    ],
+                    "content-length": [
+                        "168"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":297,\"phid\":\"PHID-DIFF-qxjpy75yihlwt6q4lb4u\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/297\\/\"},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%22d235829e802c98c0171dac4a265b4b9bad07093a%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+297%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%2224a4438154bad90603d53a4dd31d8daff7844b36%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%2224a4438154bad90603d53a4dd31d8daff7844b36%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22a959a3f69d8d498d96102cda0bc03ed89706891e%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22a959a3f69d8d498d96102cda0bc03ed89706891e%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22a959a3f69d8d498d96102cda0bc03ed89706891e%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22d235829e802c98c0171dac4a265b4b9bad07093a%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22d235829e802c98c0171dac4a265b4b9bad07093a%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2224a4438154bad90603d53a4dd31d8daff7844b36%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+297%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "287"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "496"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "284"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "494"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "183"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "284"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-qxjpy75yihlwt6q4lb4u%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22This+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%22%7D%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "710"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:06 GMT"
+                    ],
+                    "content-length": [
+                        "335"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":228,\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-kzah5v4mj3ftxy5\"},{\"phid\":\"PHID-XACT-DREV-l2hv4lv2yh5tpkn\"},{\"phid\":\"PHID-XACT-DREV-zuuejsihb5lpsfz\"},{\"phid\":\"PHID-XACT-DREV-llwoazew35vhu7x\"},{\"phid\":\"PHID-XACT-DREV-clxozpgqgmf6l3s\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "145"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:07 GMT"
+                    ],
+                    "content-length": [
+                        "1659"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"228\",\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\",\"title\":\"one: first commit to review\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":1,\"lines.removed\":1},\"branch\":\"default\",\"summary\":\"This file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"2\",\"activeDiffPHID\":\"PHID-DIFF-qxjpy75yihlwt6q4lb4u\",\"diffs\":[\"297\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%2218aa8410c577ee9a972c3011d2c9ed2bac9e6df1%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+297%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:07 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%2218aa8410c577ee9a972c3011d2c9ed2bac9e6df1%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%2218aa8410c577ee9a972c3011d2c9ed2bac9e6df1%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22f4b7df7b9116d260efdf8ec41cfd2b269e0529df%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22f4b7df7b9116d260efdf8ec41cfd2b269e0529df%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22f4b7df7b9116d260efdf8ec41cfd2b269e0529df%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+297%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:07 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/phabricator/phabsend-fold-updated.json b/tests/phabricator/phabsend-fold-updated.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-fold-updated.json
@@ -0,0 +1,821 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22revisionIDs%22%3A+%5B228%2C+228%2C+228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "167"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.querydiffs"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:09 GMT"
+                    ],
+                    "content-length": [
+                        "1709"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"297\":{\"id\":\"297\",\"revisionID\":\"228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"406\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parents\":[\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0},\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "187"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:09 GMT"
+                    ],
+                    "content-length": [
+                        "157"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+1%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22-added%5Cn%2Bmod3%5Cn%22%2C+%22delLines%22%3A+1%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+1%2C+%22oldOffset%22%3A+1%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%7D%2C+%22oldPath%22%3A+%22file.txt%22%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+2%7D%2C+%22file2.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file2.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Bmodified%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%2298d480e0d494906d9758c44c622951b429afd862%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1704"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:09 GMT"
+                    ],
+                    "content-length": [
+                        "168"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":298,\"phid\":\"PHID-DIFF-cs6d4zo5njeejvzk46l4\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/298\\/\"},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+298%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:09 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+298%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "364"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "512"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "361"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "510"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "260"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "300"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22objectIdentifier%22%3A+228%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-cs6d4zo5njeejvzk46l4%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22This+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%22%7D%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "743"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "167"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":228,\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-xk6vxshjhsg3cj2\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "145"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "1665"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"228\",\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\",\"title\":\"one: first commit to review\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540670\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":2,\"lines.removed\":1},\"branch\":\"default\",\"summary\":\"This file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"3\",\"activeDiffPHID\":\"PHID-DIFF-cs6d4zo5njeejvzk46l4\",\"diffs\":[\"298\",\"297\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+298%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+298%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:10 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/phabricator/phabsend-fold-no-changes.json b/tests/phabricator/phabsend-fold-no-changes.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-fold-no-changes.json
@@ -0,0 +1,685 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22revisionIDs%22%3A+%5B228%2C+228%2C+228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "167"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.querydiffs"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "3817"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"298\":{\"id\":\"298\",\"revisionID\":\"228\",\"dateCreated\":\"1584540669\",\"dateModified\":\"1584540670\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"408\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"yXvxVg6uibwd\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+modified\\n\"}]},{\"id\":\"407\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"297\":{\"id\":\"297\",\"revisionID\":\"228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"406\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parents\":[\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0},\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "187"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "157"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+1%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22-added%5Cn%2Bmod3%5Cn%22%2C+%22delLines%22%3A+1%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+1%2C+%22oldOffset%22%3A+1%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%7D%2C+%22oldPath%22%3A+%22file.txt%22%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+2%7D%2C+%22file2.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file2.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Bmodified%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%2298d480e0d494906d9758c44c622951b429afd862%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1704"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "168"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":299,\"phid\":\"PHID-DIFF-wyhl4c7uc6hoynlzo3fb\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/299\\/\"},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parent%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+299%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "480"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+299%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "1360"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "51"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "364"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "512"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "361"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:11 GMT"
+                    ],
+                    "content-length": [
+                        "510"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "260"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:12 GMT"
+                    ],
+                    "content-length": [
+                        "300"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22objectIdentifier%22%3A+228%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-wyhl4c7uc6hoynlzo3fb%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22This+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%22%7D%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "743"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:12 GMT"
+                    ],
+                    "content-length": [
+                        "167"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":228,\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-5mixabe4z6cr5j2\"}]},\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        },
+        {
+            "request": {
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B228%5D%7D&__conduit__=1",
+                "headers": {
+                    "content-length": [
+                        "145"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ]
+                },
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query"
+            },
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "headers": {
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 14:11:12 GMT"
+                    ],
+                    "content-length": [
+                        "1671"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"228\",\"phid\":\"PHID-DREV-ga3belnqbsuyn4tvmtaa\",\"title\":\"one: first commit to review\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540672\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":2,\"lines.removed\":1},\"branch\":\"default\",\"summary\":\"This file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"3\",\"activeDiffPHID\":\"PHID-DIFF-wyhl4c7uc6hoynlzo3fb\",\"diffs\":[\"299\",\"298\",\"297\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                }
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/phabricator/phabsend-fold-extend-front.json b/tests/phabricator/phabsend-fold-extend-front.json
new file mode 100644
--- /dev/null
+++ b/tests/phabricator/phabsend-fold-extend-front.json
@@ -0,0 +1,957 @@
+{
+    "version": 1,
+    "interactions": [
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"300\":{\"id\":\"300\",\"revisionID\":\"228\",\"dateCreated\":\"1584546799\",\"dateModified\":\"1584546799\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"412\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"r1N4i770De9n\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+another mod\\n\"}]},{\"id\":\"411\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5e38a7505725b24df8c04c2a295c581c43b6a0b3\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"5e38a7505725b24df8c04c2a295c581c43b6a0b3\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5e38a7505725b24df8c04c2a295c581c43b6a0b3\",\"parents\":[\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"299\":{\"id\":\"299\",\"revisionID\":\"228\",\"dateCreated\":\"1584540671\",\"dateModified\":\"1584540672\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"410\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"yXvxVg6uibwd\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+modified\\n\"}]},{\"id\":\"409\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"298\":{\"id\":\"298\",\"revisionID\":\"228\",\"dateCreated\":\"1584540669\",\"dateModified\":\"1584540670\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"408\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"yXvxVg6uibwd\"},\"oldPath\":null,\"currentPath\":\"file2.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":{\"unix:filemode\":\"100644\"},\"type\":\"1\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"0\",\"hunks\":[{\"oldOffset\":\"0\",\"newOffset\":\"1\",\"oldLength\":\"0\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"+modified\\n\"}]},{\"id\":\"407\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0},\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"5bc45b43505fa35b3e7e94a4c9985cda11f71ab7\",\"parents\":[\"1c403ed53e5cbc6d39b31feeb43459c0300bc377\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"},\"297\":{\"id\":\"297\",\"revisionID\":\"228\",\"dateCreated\":\"1584540666\",\"dateModified\":\"1584540666\",\"sourceControlBaseRevision\":\"98d480e0d494906d9758c44c622951b429afd862\",\"sourceControlPath\":\"\\/\",\"sourceControlSystem\":\"hg\",\"branch\":\"default\",\"bookmark\":null,\"creationMethod\":\"phabsend\",\"description\":null,\"unitStatus\":\"0\",\"lintStatus\":\"0\",\"changes\":[{\"id\":\"406\",\"metadata\":{\"line:first\":1,\"hash.effect\":\"cAKuVP31KNrx\"},\"oldPath\":\"file.txt\",\"currentPath\":\"file.txt\",\"awayPaths\":[],\"oldProperties\":[],\"newProperties\":[],\"type\":\"2\",\"fileType\":\"1\",\"commitHash\":null,\"addLines\":\"1\",\"delLines\":\"1\",\"hunks\":[{\"oldOffset\":\"1\",\"newOffset\":\"1\",\"oldLength\":\"1\",\"newLength\":\"1\",\"addLines\":null,\"delLines\":null,\"isMissingOldNewline\":null,\"isMissingNewNewline\":null,\"corpus\":\"-added\\n+mod3\\n\"}]}],\"properties\":{\"hg:meta\":{\"branch\":\"default\",\"date\":\"0 0\",\"node\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parent\":\"98d480e0d494906d9758c44c622951b429afd862\",\"user\":\"test\"},\"local:commits\":{\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"18aa8410c577ee9a972c3011d2c9ed2bac9e6df1\",\"parents\":[\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\"],\"time\":0},\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\",\"parents\":[\"98d480e0d494906d9758c44c622951b429afd862\"],\"time\":0},\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\":{\"author\":\"test\",\"authorEmail\":\"test\",\"branch\":\"default\",\"commit\":\"f4b7df7b9116d260efdf8ec41cfd2b269e0529df\",\"parents\":[\"ebffa7dae1fc179fd0f65df8368ea2a020156b50\"],\"time\":0}}},\"authorName\":\"test\",\"authorEmail\":\"test\"}},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:37:59 GMT"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "transfer-encoding": [
+                        "chunked"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.querydiffs",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22revisionIDs%22%3A+%5B228%2C+228%2C+228%2C+228%5D%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "174"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"data\":[],\"maps\":{},\"query\":{\"queryKey\":null},\"cursor\":{\"limit\":100,\"after\":null,\"before\":null,\"order\":null}},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:37:59 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "157"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/diffusion.repository.search",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22constraints%22%3A+%7B%22callsigns%22%3A+%5B%22global%22%5D%7D%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "187"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"diffid\":301,\"phid\":\"PHID-DIFF-yw32d3ikk7xgrvokuybh\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/differential\\/diff\\/301\\/\"},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:37:59 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "168"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.creatediff",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22bookmark%22%3A+null%2C+%22branch%22%3A+%22default%22%2C+%22changes%22%3A+%7B%22file.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Bmod3%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%2C+%22file2.txt%22%3A+%7B%22addLines%22%3A+1%2C+%22awayPaths%22%3A+%5B%5D%2C+%22commitHash%22%3A+null%2C+%22currentPath%22%3A+%22file2.txt%22%2C+%22delLines%22%3A+0%2C+%22fileType%22%3A+1%2C+%22hunks%22%3A+%5B%7B%22addLines%22%3A+1%2C+%22corpus%22%3A+%22%2Banother+mod%5Cn%22%2C+%22delLines%22%3A+0%2C+%22newLength%22%3A+1%2C+%22newOffset%22%3A+1%2C+%22oldLength%22%3A+0%2C+%22oldOffset%22%3A+0%7D%5D%2C+%22metadata%22%3A+%7B%7D%2C+%22newProperties%22%3A+%7B%22unix%3Afilemode%22%3A+%22100644%22%7D%2C+%22oldPath%22%3A+null%2C+%22oldProperties%22%3A+%7B%7D%2C+%22type%22%3A+1%7D%7D%2C+%22creationMethod%22%3A+%22phabsend%22%2C+%22lintStatus%22%3A+%22none%22%2C+%22repositoryPHID%22%3A+null%2C+%22sourceControlBaseRevision%22%3A+%220000000000000000000000000000000000000000%22%2C+%22sourceControlPath%22%3A+%22%2F%22%2C+%22sourceControlSystem%22%3A+%22hg%22%2C+%22sourceMachine%22%3A+%22%22%2C+%22sourcePath%22%3A+%22%2F%22%2C+%22unitStatus%22%3A+%22none%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "1724"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:37:59 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "51"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%2C+%5C%22parent%5C%22%3A+%5C%220000000000000000000000000000000000000000%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+301%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "480"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "51"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%221c403ed53e5cbc6d39b31feeb43459c0300bc377%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%225e38a7505725b24df8c04c2a295c581c43b6a0b3%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%225bc45b43505fa35b3e7e94a4c9985cda11f71ab7%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%220000000000000000000000000000000000000000%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%2C+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%3A+%7B%5C%22author%5C%22%3A+%5C%22test%5C%22%2C+%5C%22authorEmail%5C%22%3A+%5C%22test%5C%22%2C+%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22commit%5C%22%3A+%5C%22ebffa7dae1fc179fd0f65df8368ea2a020156b50%5C%22%2C+%5C%22parents%5C%22%3A+%5B%5C%2298d480e0d494906d9758c44c622951b429afd862%5C%22%5D%2C+%5C%22time%5C%22%3A+0%7D%7D%22%2C+%22diff_id%22%3A+301%2C+%22name%22%3A+%22local%3Acommits%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "2128"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"added file\"},\"revisionIDFieldInfo\":{\"value\":null,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"added file\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "232"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22added+file%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "155"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"one: first commit to review\",\"testPlan\":\"LOL!  What testing?!\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod1' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"one: first commit to review\"},{\"type\":\"testPlan\",\"value\":\"LOL!  What testing?!\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod1' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "512"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnLOL%21++What+testing%3F%21%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "364"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"two: second commit to review\",\"testPlan\":\"Haha! yeah, right.\",\"revisionID\":228,\"summary\":\"This file was modified with 'mod2' as its contents.\"},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"two: second commit to review\"},{\"type\":\"testPlan\",\"value\":\"Haha! yeah, right.\"},{\"type\":\"summary\",\"value\":\"This file was modified with 'mod2' as its contents.\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "510"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22two%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5CnTest+Plan%3A%5CnHaha%21+yeah%2C+right.%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "361"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"3: a commit with no detailed message\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"3: a commit with no detailed message\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "300"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%223%3A+a+commit+with+no+detailed+message%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "260"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"errors\":[],\"fields\":{\"title\":\"four: extend the fold range\",\"revisionID\":228},\"revisionIDFieldInfo\":{\"value\":228,\"validDomain\":\"http:\\/\\/seg.attotech.com:18080\"},\"transactions\":[{\"type\":\"title\",\"value\":\"four: extend the fold range\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "282"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.parsecommitmessage",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22corpus%22%3A+%22four%3A+extend+the+fold+range%5Cn%5CnDifferential+Revision%3A+http%3A%2F%2Fseg.attotech.com%3A18080%2FD228%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "251"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":{\"object\":{\"id\":229,\"phid\":\"PHID-DREV-y4ekpkv2gziziagi3mwz\"},\"transactions\":[{\"phid\":\"PHID-XACT-DREV-llf5jpejbvnsni7\"},{\"phid\":\"PHID-XACT-DREV-o7wz3izqlh3f4wq\"},{\"phid\":\"PHID-XACT-DREV-7idntuw4bkhswt4\"},{\"phid\":\"PHID-XACT-DREV-aedznsiaxajtubn\"},{\"phid\":\"PHID-XACT-DREV-q3dvuhepha3n4ry\"}]},\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:00 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "335"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.revision.edit",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22transactions%22%3A+%5B%7B%22type%22%3A+%22update%22%2C+%22value%22%3A+%22PHID-DIFF-yw32d3ikk7xgrvokuybh%22%7D%2C+%7B%22type%22%3A+%22title%22%2C+%22value%22%3A+%22added+file%22%7D%2C+%7B%22type%22%3A+%22testPlan%22%2C+%22value%22%3A+%22LOL%21++What+testing%3F%21%5Cn%5CnHaha%21+yeah%2C+right.%22%7D%2C+%7B%22type%22%3A+%22summary%22%2C+%22value%22%3A+%22one%3A+first+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod1%27+as+its+contents.%5Cn%5Cntwo%3A+second+commit+to+review%5Cn%5CnThis+file+was+modified+with+%27mod2%27+as+its+contents.%5Cn%5Cn3%3A+a+commit+with+no+detailed+message%5Cn%5Cnfour%3A+extend+the+fold+range%22%7D%5D%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "765"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":[{\"id\":\"229\",\"phid\":\"PHID-DREV-y4ekpkv2gziziagi3mwz\",\"title\":\"added file\",\"uri\":\"http:\\/\\/seg.attotech.com:18080\\/D229\",\"dateCreated\":\"1584553081\",\"dateModified\":\"1584553081\",\"authorPHID\":\"PHID-USER-cdrkvn4szwoq3zqoc5qb\",\"status\":\"0\",\"statusName\":\"Needs Review\",\"properties\":{\"draft.broadcast\":true,\"lines.added\":2,\"lines.removed\":0},\"branch\":\"default\",\"summary\":\"one: first commit to review\\n\\nThis file was modified with 'mod1' as its contents.\\n\\ntwo: second commit to review\\n\\nThis file was modified with 'mod2' as its contents.\\n\\n3: a commit with no detailed message\\n\\nfour: extend the fold range\",\"testPlan\":\"LOL!  What testing?!\\n\\nHaha! yeah, right.\",\"lineCount\":\"2\",\"activeDiffPHID\":\"PHID-DIFF-yw32d3ikk7xgrvokuybh\",\"diffs\":[\"301\"],\"commits\":[],\"reviewers\":[],\"ccs\":[],\"hashes\":[[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"],[\"hgcm\",\"\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\"]],\"auxiliary\":{\"phabricator:projects\":[],\"phabricator:depends-on\":[]},\"repositoryPHID\":null,\"sourcePath\":\"\\/\"}],\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:01 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "2208"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.query",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22ids%22%3A+%5B229%5D%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+                        "145"
+                    ]
+                }
+            }
+        },
+        {
+            "response": {
+                "status": {
+                    "message": "OK",
+                    "code": 200
+                },
+                "body": {
+                    "string": "{\"result\":null,\"error_code\":null,\"error_info\":null}"
+                },
+                "headers": {
+                    "x-frame-options": [
+                        "Deny"
+                    ],
+                    "server": [
+                        "Apache/2.4.41 (Unix) OpenSSL/1.1.0l PHP/7.3.10"
+                    ],
+                    "cache-control": [
+                        "no-store"
+                    ],
+                    "content-type": [
+                        "application/json"
+                    ],
+                    "referrer-policy": [
+                        "no-referrer"
+                    ],
+                    "date": [
+                        "Wed, 18 Mar 2020 17:38:01 GMT"
+                    ],
+                    "expires": [
+                        "Sat, 01 Jan 2000 00:00:00 GMT"
+                    ],
+                    "content-security-policy": [
+                        "default-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; img-src 'self' http://seg.attotech.com:18080 data:; style-src 'self' http://seg.attotech.com:18080 'unsafe-inline'; script-src 'self' <a href="http://seg.attotech.com:18080;">http://seg.attotech.com:18080; connect-src 'self'; frame-src 'self'; frame-ancestors 'none'; object-src 'none'; form-action 'self'; base-uri 'none'"
+                    ],
+                    "x-content-type-options": [
+                        "nosniff"
+                    ],
+                    "x-powered-by": [
+                        "PHP/7.3.10"
+                    ],
+                    "content-length": [
+                        "51"
+                    ]
+                }
+            },
+            "request": {
+                "method": "POST",
+                "uri": "http://seg.attotech.com:18080/api/differential.setdiffproperty",
+                "body": "output=json&params=%7B%22__conduit__%22%3A+%7B%22token%22%3A+%22cli-hahayouwish%22%7D%2C+%22data%22%3A+%22%7B%5C%22branch%5C%22%3A+%5C%22default%5C%22%2C+%5C%22date%5C%22%3A+%5C%220+0%5C%22%2C+%5C%22node%5C%22%3A+%5C%22769df1547476465dff8529eb6f951eb232d6a7ed%5C%22%2C+%5C%22parent%5C%22%3A+%5C%220000000000000000000000000000000000000000%5C%22%2C+%5C%22user%5C%22%3A+%5C%22test%5C%22%7D%22%2C+%22diff_id%22%3A+301%2C+%22name%22%3A+%22hg%3Ameta%22%7D&__conduit__=1",
+                "headers": {
+                    "accept": [
+                        "application/mercurial-0.1"
+                    ],
+                    "host": [
+                        "seg.attotech.com:18080"
+                    ],
+                    "content-type": [
+                        "application/x-www-form-urlencoded"
+                    ],
+                    "user-agent": [
+                        "mercurial/proto-1.0 (Mercurial 5.3+33-bb58931d0c4f)"
+                    ],
+                    "content-length": [
+         &nbs