##// END OF EJS Templates
httppeer: expose API descriptor on httpv2peer...
httppeer: expose API descriptor on httpv2peer The API descriptor in wireprotov2 is much more expressive than space-delimited tokens and it will be difficult to define methods to query it in all of the ways we'll want to query it. So let's just declare defeat and expose the API descriptor on the peer instance. As part of this, we define a new interface for version 2 peers, fulfilling a TODO in the process. Differential Revision: https://phab.mercurial-scm.org/D4974

File last commit:

r39743:5abc47d4 default
r40207:dac438b7 default
Show More
test-diff-color.t
416 lines | 11.5 KiB | text/troff | Tads3Lexer
/ tests / test-diff-color.t
Matt Mackall
tests: unify test-diff-color
r12415 Setup
Yuya Nishihara
tests: write hgrc of more than two lines by using shell heredoc...
r23172 $ cat <<EOF >> $HGRCPATH
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 > [ui]
Pierre-Yves David
color: special case 'always' in 'ui.color'...
r32104 > color = yes
Pierre-Yves David
color: turn 'ui.color' into a boolean (auto or off)...
r32103 > formatted = always
Matt Harbison
test-diff-color: disable pager for expected output on Windows (issue5555)...
r32122 > paginate = never
Yuya Nishihara
tests: write hgrc of more than two lines by using shell heredoc...
r23172 > [color]
> mode = ansi
> EOF
Matt Mackall
tests: unify test-diff-color
r12415 $ hg init repo
$ cd repo
$ cat > a <<EOF
> c
> c
> a
> a
> b
> a
> a
> c
> c
> EOF
$ hg ci -Am adda
Boris Feld
addremove: add associated color for the new labels...
r39126 \x1b[0;32madding a\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 $ cat > a <<EOF
> c
> c
> a
> a
> dd
> a
> a
> c
> c
> EOF
default context
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 $ hg diff --nodates
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 \x1b[0;1mdiff -r cf9f4ba66af2 a\x1b[0m (esc)
\x1b[0;31;1m--- a/a\x1b[0m (esc)
\x1b[0;32;1m+++ b/a\x1b[0m (esc)
\x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 c
a
a
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 \x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 a
a
c
Sune Foldager
tests: add diff color trailing whitespace test
r38682 trailing whitespace
$ cp a a.orig
Augie Fackler
tests: use inline Python instead of sed to add trailing whitespace...
r38775 >>> with open('a', 'rb') as f:
... data = f.read()
>>> with open('a', 'wb') as f:
Pulkit Goyal
py3: suppress the return value from .write() call...
r39654 ... f.write(data.replace(b'dd', b'dd \r')) and None
Sune Foldager
tests: add diff color trailing whitespace test
r38682 $ hg diff --nodates
\x1b[0;1mdiff -r cf9f4ba66af2 a\x1b[0m (esc)
\x1b[0;31;1m--- a/a\x1b[0m (esc)
\x1b[0;32;1m+++ b/a\x1b[0m (esc)
\x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
c
a
a
\x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m\x1b[0;1;41m \x1b[0m\r (esc)
a
a
c
$ mv a.orig a
Pierre-Yves David
color: turn 'ui.color' into a boolean (auto or off)...
r32103 (check that 'ui.color=yes' match '--color=auto')
$ hg diff --nodates --config ui.formatted=no
diff -r cf9f4ba66af2 a
--- a/a
+++ b/a
@@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
(check that 'ui.color=no' disable color)
$ hg diff --nodates --config ui.formatted=yes --config ui.color=no
diff -r cf9f4ba66af2 a
--- a/a
+++ b/a
@@ -2,7 +2,7 @@
c
a
a
-b
+dd
a
a
c
Pierre-Yves David
color: special case 'always' in 'ui.color'...
r32104 (check that 'ui.color=always' force color)
$ hg diff --nodates --config ui.formatted=no --config ui.color=always
\x1b[0;1mdiff -r cf9f4ba66af2 a\x1b[0m (esc)
\x1b[0;31;1m--- a/a\x1b[0m (esc)
\x1b[0;32;1m+++ b/a\x1b[0m (esc)
\x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
c
a
a
\x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m (esc)
a
a
c
Matt Mackall
tests: unify test-diff-color
r12415 --unified=2
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 $ hg diff --nodates -U 2
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 \x1b[0;1mdiff -r cf9f4ba66af2 a\x1b[0m (esc)
\x1b[0;31;1m--- a/a\x1b[0m (esc)
\x1b[0;32;1m+++ b/a\x1b[0m (esc)
\x1b[0;35m@@ -3,5 +3,5 @@\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 a
a
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 \x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 a
a
diffstat
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 $ hg diff --stat
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 a | 2 \x1b[0;32m+\x1b[0m\x1b[0;31m-\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 1 files changed, 1 insertions(+), 1 deletions(-)
Yuya Nishihara
tests: write hgrc of more than two lines by using shell heredoc...
r23172 $ cat <<EOF >> $HGRCPATH
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 > [extensions]
Yuya Nishihara
tests: write hgrc of more than two lines by using shell heredoc...
r23172 > record =
> [ui]
> interactive = true
> [diff]
> git = True
> EOF
Matt Mackall
tests: unify test-diff-color
r12415
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #if execbit
Matt Mackall
tests: unify test-diff-color
r12415 record
Mads Kiilerich
tests: use 'hghave execbit' for tests that manipulate x bit in file system
r15442 $ chmod +x a
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 $ hg record -m moda a <<EOF
Matt Mackall
tests: unify test-diff-color
r12415 > y
> y
> EOF
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
\x1b[0;36;1mold mode 100644\x1b[0m (esc)
\x1b[0;36;1mnew mode 100755\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 1 hunks, 1 lines changed
Mads Kiilerich
ui: show prompt choice if input is not a tty but is forced to be interactive...
r22589 \x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
timeless
record: turn on showfunc...
r27411 \x1b[0;35m@@ -2,7 +2,7 @@ c\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 c
a
a
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 \x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 a
a
c
Mads Kiilerich
ui: show prompt choice if input is not a tty but is forced to be interactive...
r22589 \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243
Matt Mackall
tests: unify test-diff-color
r12415 $ echo "[extensions]" >> $HGRCPATH
$ echo "mq=" >> $HGRCPATH
$ hg rollback
Gilles Moris
rollback: clarifies the message about the reverted state (issue2628)...
r13446 repository tip rolled back to revision 0 (undo commit)
working directory now based on revision 0
Matt Mackall
tests: unify test-diff-color
r12415
qrecord
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 $ hg qrecord -m moda patch <<EOF
Matt Mackall
tests: unify test-diff-color
r12415 > y
> y
> EOF
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
\x1b[0;36;1mold mode 100644\x1b[0m (esc)
\x1b[0;36;1mnew mode 100755\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 1 hunks, 1 lines changed
Mads Kiilerich
ui: show prompt choice if input is not a tty but is forced to be interactive...
r22589 \x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
timeless
record: turn on showfunc...
r27411 \x1b[0;35m@@ -2,7 +2,7 @@ c\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 c
a
a
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 \x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m (esc)
Matt Mackall
tests: unify test-diff-color
r12415 a
a
c
Mads Kiilerich
ui: show prompt choice if input is not a tty but is forced to be interactive...
r22589 \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899
FUJIWARA Katsunori
subrepo: add argument to "diff()" to pass "ui" of caller side (issue3712) (API)...
r18006 $ hg qpop -a
popping patch
patch queue now empty
Mads Kiilerich
tests: convert some 'hghave execbit' to #if...
r16899 #endif
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
FUJIWARA Katsunori
subrepo: add argument to "diff()" to pass "ui" of caller side (issue3712) (API)...
r18006 issue3712: test colorization of subrepo diff
$ hg init sub
$ echo b > sub/b
$ hg -R sub commit -Am 'create sub'
Boris Feld
addremove: add associated color for the new labels...
r39126 \x1b[0;32madding b\x1b[0m (esc)
FUJIWARA Katsunori
subrepo: add argument to "diff()" to pass "ui" of caller side (issue3712) (API)...
r18006 $ echo 'sub = sub' > .hgsub
$ hg add .hgsub
$ hg commit -m 'add subrepo sub'
$ echo aa >> a
$ echo bb >> sub/b
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 $ hg diff -S
FUJIWARA Katsunori
subrepo: add argument to "diff()" to pass "ui" of caller side (issue3712) (API)...
r18006 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
\x1b[0;31;1m--- a/a\x1b[0m (esc)
\x1b[0;32;1m+++ b/a\x1b[0m (esc)
\x1b[0;35m@@ -7,3 +7,4 @@\x1b[0m (esc)
a
c
c
\x1b[0;32m+aa\x1b[0m (esc)
Simon Heimberg
tests: remove glob lines which unnecessary match / for \ on windows...
r18720 \x1b[0;1mdiff --git a/sub/b b/sub/b\x1b[0m (esc)
FUJIWARA Katsunori
subrepo: add argument to "diff()" to pass "ui" of caller side (issue3712) (API)...
r18006 \x1b[0;31;1m--- a/sub/b\x1b[0m (esc)
\x1b[0;32;1m+++ b/sub/b\x1b[0m (esc)
\x1b[0;35m@@ -1,1 +1,2 @@\x1b[0m (esc)
b
\x1b[0;32m+bb\x1b[0m (esc)
Jordi Gutiérrez Hermoso
patch: enable diff.tab markup for the color extension...
r22460 test tabs
$ cat >> a <<EOF
> one tab
> two tabs
> end tab
> mid tab
> all tabs
> EOF
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 $ hg diff --nodates
Jordi Gutiérrez Hermoso
patch: enable diff.tab markup for the color extension...
r22460 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
\x1b[0;31;1m--- a/a\x1b[0m (esc)
\x1b[0;32;1m+++ b/a\x1b[0m (esc)
\x1b[0;35m@@ -7,3 +7,9 @@\x1b[0m (esc)
a
c
c
\x1b[0;32m+aa\x1b[0m (esc)
\x1b[0;32m+\x1b[0m \x1b[0;32mone tab\x1b[0m (esc)
\x1b[0;32m+\x1b[0m \x1b[0;32mtwo tabs\x1b[0m (esc)
\x1b[0;32m+end tab\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
\x1b[0;32m+mid\x1b[0m \x1b[0;32mtab\x1b[0m (esc)
\x1b[0;32m+\x1b[0m \x1b[0;32mall\x1b[0m \x1b[0;32mtabs\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
$ echo "[color]" >> $HGRCPATH
$ echo "diff.tab = bold magenta" >> $HGRCPATH
Pierre-Yves David
color: add a 'ui.color' option to control color behavior...
r31110 $ hg diff --nodates
Jordi Gutiérrez Hermoso
patch: enable diff.tab markup for the color extension...
r22460 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
\x1b[0;31;1m--- a/a\x1b[0m (esc)
\x1b[0;32;1m+++ b/a\x1b[0m (esc)
\x1b[0;35m@@ -7,3 +7,9 @@\x1b[0m (esc)
a
c
c
\x1b[0;32m+aa\x1b[0m (esc)
\x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mone tab\x1b[0m (esc)
\x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtwo tabs\x1b[0m (esc)
\x1b[0;32m+end tab\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
\x1b[0;32m+mid\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtab\x1b[0m (esc)
\x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mall\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtabs\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278
test inline color diff
$ hg init inline
$ cd inline
$ cat > file1 << EOF
> this is the first line
> this is the second line
> third line starts with space
> + starts with a plus sign
Matthieu Laneuville
patch: move part of tabsplitter logic in _inlinediff...
r35329 > this one with one tab
> now with full two tabs
> now tabs everywhere, much fun
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278 >
> this line won't change
>
> two lines are going to
> be changed into three!
>
> three of those lines will
> collapse onto one
> (to see if it works)
> EOF
$ hg add file1
$ hg ci -m 'commit'
Matthieu Laneuville
patch: move part of tabsplitter logic in _inlinediff...
r35329
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278 $ cat > file1 << EOF
> that is the first paragraph
> this is the second line
> third line starts with space
> - starts with a minus sign
Matthieu Laneuville
patch: move part of tabsplitter logic in _inlinediff...
r35329 > this one with two tab
> now with full three tabs
> now there are tabs everywhere, much fun
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278 >
> this line won't change
>
> two lines are going to
> (entirely magically,
> assuming this works)
> be changed into four!
>
> three of those lines have
> collapsed onto one
> EOF
Yuya Nishihara
diff: graduate word-diff option from experimental...
r38610 $ hg diff --config diff.word-diff=False --color=debug
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278 [diff.diffline|diff --git a/file1 b/file1]
[diff.file_a|--- a/file1]
[diff.file_b|+++ b/file1]
Matthieu Laneuville
patch: move part of tabsplitter logic in _inlinediff...
r35329 [diff.hunk|@@ -1,16 +1,17 @@]
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278 [diff.deleted|-this is the first line]
[diff.deleted|-this is the second line]
[diff.deleted|- third line starts with space]
[diff.deleted|-+ starts with a plus sign]
Matthieu Laneuville
patch: move part of tabsplitter logic in _inlinediff...
r35329 [diff.deleted|-][diff.tab| ][diff.deleted|this one with one tab]
[diff.deleted|-][diff.tab| ][diff.deleted|now with full two tabs]
[diff.deleted|-][diff.tab| ][diff.deleted|now tabs][diff.tab| ][diff.deleted|everywhere, much fun]
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278 [diff.inserted|+that is the first paragraph]
[diff.inserted|+ this is the second line]
[diff.inserted|+third line starts with space]
[diff.inserted|+- starts with a minus sign]
Matthieu Laneuville
patch: move part of tabsplitter logic in _inlinediff...
r35329 [diff.inserted|+][diff.tab| ][diff.inserted|this one with two tab]
[diff.inserted|+][diff.tab| ][diff.inserted|now with full three tabs]
[diff.inserted|+][diff.tab| ][diff.inserted|now there are tabs][diff.tab| ][diff.inserted|everywhere, much fun]
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278
this line won't change
two lines are going to
[diff.deleted|-be changed into three!]
[diff.inserted|+(entirely magically,]
[diff.inserted|+ assuming this works)]
[diff.inserted|+be changed into four!]
[diff.deleted|-three of those lines will]
[diff.deleted|-collapse onto one]
[diff.deleted|-(to see if it works)]
[diff.inserted|+three of those lines have]
[diff.inserted|+collapsed onto one]
Yuya Nishihara
diff: graduate word-diff option from experimental...
r38610 $ hg diff --config diff.word-diff=True --color=debug
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278 [diff.diffline|diff --git a/file1 b/file1]
[diff.file_a|--- a/file1]
[diff.file_b|+++ b/file1]
Matthieu Laneuville
patch: move part of tabsplitter logic in _inlinediff...
r35329 [diff.hunk|@@ -1,16 +1,17 @@]
Jun Wu
patch: implement a new worddiff algorithm...
r37750 [diff.deleted|-][diff.deleted.changed|this][diff.deleted.unchanged| is the first ][diff.deleted.changed|line]
[diff.deleted|-][diff.deleted.unchanged|this is the second line]
[diff.deleted|-][diff.deleted.changed| ][diff.deleted.unchanged|third line starts with space]
[diff.deleted|-][diff.deleted.changed|+][diff.deleted.unchanged| starts with a ][diff.deleted.changed|plus][diff.deleted.unchanged| sign]
[diff.deleted|-][diff.tab| ][diff.deleted.unchanged|this one with ][diff.deleted.changed|one][diff.deleted.unchanged| tab]
[diff.deleted|-][diff.tab| ][diff.deleted.unchanged|now with full ][diff.deleted.changed|two][diff.deleted.unchanged| tabs]
[diff.deleted|-][diff.tab| ][diff.deleted.unchanged|now ][diff.deleted.unchanged|tabs][diff.tab| ][diff.deleted.unchanged|everywhere, much fun]
[diff.inserted|+][diff.inserted.changed|that][diff.inserted.unchanged| is the first ][diff.inserted.changed|paragraph]
[diff.inserted|+][diff.inserted.changed| ][diff.inserted.unchanged|this is the second line]
[diff.inserted|+][diff.inserted.unchanged|third line starts with space]
[diff.inserted|+][diff.inserted.changed|-][diff.inserted.unchanged| starts with a ][diff.inserted.changed|minus][diff.inserted.unchanged| sign]
[diff.inserted|+][diff.tab| ][diff.inserted.unchanged|this one with ][diff.inserted.changed|two][diff.inserted.unchanged| tab]
[diff.inserted|+][diff.tab| ][diff.inserted.unchanged|now with full ][diff.inserted.changed|three][diff.inserted.unchanged| tabs]
[diff.inserted|+][diff.tab| ][diff.inserted.unchanged|now ][diff.inserted.changed|there are ][diff.inserted.unchanged|tabs][diff.tab| ][diff.inserted.unchanged|everywhere, much fun]
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278
this line won't change
two lines are going to
Jun Wu
patch: implement a new worddiff algorithm...
r37750 [diff.deleted|-][diff.deleted.unchanged|be changed into ][diff.deleted.changed|three][diff.deleted.unchanged|!]
[diff.inserted|+][diff.inserted.changed|(entirely magically,]
[diff.inserted|+][diff.inserted.changed| assuming this works)]
[diff.inserted|+][diff.inserted.unchanged|be changed into ][diff.inserted.changed|four][diff.inserted.unchanged|!]
Matthieu Laneuville
patch: add within-line color diff capacity...
r35278
Jun Wu
patch: implement a new worddiff algorithm...
r37750 [diff.deleted|-][diff.deleted.unchanged|three of those lines ][diff.deleted.changed|will]
[diff.deleted|-][diff.deleted.changed|collapse][diff.deleted.unchanged| onto one]
[diff.deleted|-][diff.deleted.changed|(to see if it works)]
[diff.inserted|+][diff.inserted.unchanged|three of those lines ][diff.inserted.changed|have]
[diff.inserted|+][diff.inserted.changed|collapsed][diff.inserted.unchanged| onto one]
Yuya Nishihara
patch: do not break up multibyte character when highlighting word...
r35384
multibyte character shouldn't be broken up in word diff:
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" <<'EOF'
Yuya Nishihara
patch: do not break up multibyte character when highlighting word...
r35384 > with open("utf8", "wb") as f:
> f.write(b"blah \xe3\x82\xa2 blah\n")
> EOF
$ hg ci -Am 'add utf8 char' utf8
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" <<'EOF'
Yuya Nishihara
patch: do not break up multibyte character when highlighting word...
r35384 > with open("utf8", "wb") as f:
> f.write(b"blah \xe3\x82\xa4 blah\n")
> EOF
$ hg ci -m 'slightly change utf8 char' utf8
Jun Wu
patch: buffer lines for a same hunk...
r37749
Yuya Nishihara
diff: graduate word-diff option from experimental...
r38610 $ hg diff --config diff.word-diff=True --color=debug -c.
Yuya Nishihara
patch: do not break up multibyte character when highlighting word...
r35384 [diff.diffline|diff --git a/utf8 b/utf8]
[diff.file_a|--- a/utf8]
[diff.file_b|+++ b/utf8]
[diff.hunk|@@ -1,1 +1,1 @@]
Jun Wu
patch: implement a new worddiff algorithm...
r37750 [diff.deleted|-][diff.deleted.unchanged|blah ][diff.deleted.changed|\xe3\x82\xa2][diff.deleted.unchanged| blah] (esc)
[diff.inserted|+][diff.inserted.unchanged|blah ][diff.inserted.changed|\xe3\x82\xa4][diff.inserted.unchanged| blah] (esc)