phases: track phase changes from 'retractboundary'
We adds new computation to find and record the revision affected by the
boundary retraction. This add more complication to the function but this seems
fine since it is only used in a couple of rare and explicit cases (`hg phase
--force` and `hg qimport`).
Having strong tracking of phase changes is worth the effort.
Setup
$ cat <<EOF >> $HGRCPATH
> [ui]
> color = yes
> formatted = always
> paginate = never
> [color]
> mode = ansi
> EOF
$ hg init repo
$ cd repo
$ cat > a <<EOF
> c
> c
> a
> a
> b
> a
> a
> c
> c
> EOF
$ hg ci -Am adda
adding a
$ cat > a <<EOF
> c
> c
> a
> a
> dd
> a
> a
> c
> c
> EOF
default context
$ 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 (esc)
a
a
c
(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
(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
--unified=2
$ hg diff --nodates -U 2
\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)
a
a
\x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m (esc)
a
a
diffstat
$ hg diff --stat
a | 2 \x1b[0;32m+\x1b[0m\x1b[0;31m-\x1b[0m (esc)
1 files changed, 1 insertions(+), 1 deletions(-)
$ cat <<EOF >> $HGRCPATH
> [extensions]
> record =
> [ui]
> interactive = true
> [diff]
> git = True
> EOF
#if execbit
record
$ chmod +x a
$ hg record -m moda a <<EOF
> y
> y
> EOF
\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)
1 hunks, 1 lines changed
\x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
\x1b[0;35m@@ -2,7 +2,7 @@ c\x1b[0m (esc)
c
a
a
\x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m (esc)
a
a
c
\x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
$ echo "[extensions]" >> $HGRCPATH
$ echo "mq=" >> $HGRCPATH
$ hg rollback
repository tip rolled back to revision 0 (undo commit)
working directory now based on revision 0
qrecord
$ hg qrecord -m moda patch <<EOF
> y
> y
> EOF
\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)
1 hunks, 1 lines changed
\x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
\x1b[0;35m@@ -2,7 +2,7 @@ c\x1b[0m (esc)
c
a
a
\x1b[0;31m-b\x1b[0m (esc)
\x1b[0;32m+dd\x1b[0m (esc)
a
a
c
\x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
$ hg qpop -a
popping patch
patch queue now empty
#endif
issue3712: test colorization of subrepo diff
$ hg init sub
$ echo b > sub/b
$ hg -R sub commit -Am 'create sub'
adding b
$ echo 'sub = sub' > .hgsub
$ hg add .hgsub
$ hg commit -m 'add subrepo sub'
$ echo aa >> a
$ echo bb >> sub/b
$ hg diff -S
\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)
\x1b[0;1mdiff --git a/sub/b b/sub/b\x1b[0m (esc)
\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)
test tabs
$ cat >> a <<EOF
> one tab
> two tabs
> end tab
> mid tab
> all tabs
> EOF
$ hg diff --nodates
\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
$ hg diff --nodates
\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)
$ cd ..