D1867: evolution: report new unstable changesets

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Tue Jan 16 20:16:48 UTC 2018


martinvonz created this revision.
Herald added a reviewer: durin42.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This adds a transaction summary callback that reports the number of
  new orphan, content-divergent and phase-divergent changesets.
  
  The code for reporting it is based on the code from the evolve
  extension, but simplified a bit. It simply counts the numbers for each
  kind of instability before and after the transaction. That's obviously
  not very efficient, but it's easy to reason about, so I'm doing this
  as a first step that can make us quite confident about the test case
  changes. We can optimize it later and make sure that the tests are not
  affected. The code has been used in the evolve extension for a long
  time and has apparently been sufficiently fast, so it doesn't seem
  like a pressing issue.
  
  Unlike the evolve extension's version of this report, this version
  applies to all commands (or all transactions run as part of any
  command, to be exact).

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/scmutil.py
  tests/test-amend.t
  tests/test-cache-abuse.t
  tests/test-commit-amend.t
  tests/test-drawdag.t
  tests/test-exchange-obsmarkers-case-A3.t
  tests/test-exchange-obsmarkers-case-A4.t
  tests/test-exchange-obsmarkers-case-B5.t
  tests/test-exchange-obsmarkers-case-C1.t
  tests/test-exchange-obsmarkers-case-C4.t
  tests/test-exchange-obsmarkers-case-D1.t
  tests/test-exchange-obsmarkers-case-D4.t
  tests/test-histedit-obsolete.t
  tests/test-obshistory.t
  tests/test-obsmarker-template.t
  tests/test-obsolete-bundle-strip.t
  tests/test-obsolete-changeset-exchange.t
  tests/test-obsolete-distributed.t
  tests/test-obsolete-divergent.t
  tests/test-obsolete.t
  tests/test-push-checkheads-partial-C2.t
  tests/test-push-checkheads-partial-C4.t
  tests/test-push-checkheads-pruned-B2.t
  tests/test-push-checkheads-pruned-B3.t
  tests/test-push-checkheads-pruned-B4.t
  tests/test-push-checkheads-pruned-B5.t
  tests/test-push-checkheads-pruned-B8.t
  tests/test-push-checkheads-superceed-A2.t
  tests/test-push-checkheads-superceed-A3.t
  tests/test-push-checkheads-superceed-A6.t
  tests/test-push-checkheads-superceed-A7.t
  tests/test-push-checkheads-unpushed-D2.t
  tests/test-push-checkheads-unpushed-D3.t
  tests/test-push-checkheads-unpushed-D4.t
  tests/test-push-checkheads-unpushed-D5.t
  tests/test-push-race.t
  tests/test-rebase-dest.t
  tests/test-rebase-obsolete.t
  tests/test-revset2.t
  tests/test-show-work.t
  tests/test-split.t
  tests/test-strip.t
  tests/test-unamend.t
  tests/test-uncommit.t

CHANGE DETAILS

diff --git a/tests/test-uncommit.t b/tests/test-uncommit.t
--- a/tests/test-uncommit.t
+++ b/tests/test-uncommit.t
@@ -190,6 +190,7 @@
   $ hg bookmark
      foo                       9:48e5bd7cd583
   $ hg uncommit
+  3 new orphan changesets
   $ hg status
   M files
   A file-abc
@@ -220,6 +221,7 @@
   $ hg bookmark
      foo                       9:48e5bd7cd583
   $ hg uncommit file-ab
+  1 new orphan changesets
   $ hg status
   A file-ab
 
diff --git a/tests/test-unamend.t b/tests/test-unamend.t
--- a/tests/test-unamend.t
+++ b/tests/test-unamend.t
@@ -258,6 +258,7 @@
   2 files updated, 0 files merged, 2 files removed, 0 files unresolved
   $ echo bar >> f
   $ hg amend
+  3 new orphan changesets
   $ hg rebase -s 6 -d . -q
 
   $ hg glog
@@ -285,12 +286,14 @@
   [255]
 
   $ hg unamend
+  3 new orphan changesets
 
 Trying to unamend a public changeset
 
   $ hg up -C 23
   5 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg phase -r . -p
+  1 new phase-divergent changesets
   $ hg unamend
   abort: cannot unamend public changesets
   (see 'hg help phases' for details)
diff --git a/tests/test-strip.t b/tests/test-strip.t
--- a/tests/test-strip.t
+++ b/tests/test-strip.t
@@ -1285,6 +1285,7 @@
   > EOF
 
   $ hg testnodescleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
+  4 new orphan changesets
 
   $ rm .hg/localtags
   $ hg log -G -T '{rev}:{node|short} {desc} {bookmarks}' -r 'sort(all(), topo)'
diff --git a/tests/test-split.t b/tests/test-split.t
--- a/tests/test-split.t
+++ b/tests/test-split.t
@@ -417,6 +417,7 @@
   [255]
 #else
   $ runsplit -r 1 --no-rebase >/dev/null
+  3 new orphan changesets
   $ hg bookmark
      d1                        2:b5c5ea414030
    * d2                        3:f4a0a8d004cc
@@ -459,6 +460,7 @@
   >     |
   >     A
   > EOS
+  2 new orphan changesets
   $ eval `hg tags -T '{tag}={node}\n'`
   $ rm .hg/localtags
   $ hg split $B --config experimental.evolution=createmarkers
diff --git a/tests/test-show-work.t b/tests/test-show-work.t
--- a/tests/test-show-work.t
+++ b/tests/test-show-work.t
@@ -242,6 +242,7 @@
   > EOF
   $ hg debugobsolete `hg log -r 'desc("commit 2")' -T "{node}"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg show work --color=debug
   @  [log.changeset changeset.draft changeset.unstable instability.orphan|32f3] [log.description|commit 3]
   x  [log.changeset changeset.draft changeset.obsolete|6a75] [log.description|commit 2]
diff --git a/tests/test-revset2.t b/tests/test-revset2.t
--- a/tests/test-revset2.t
+++ b/tests/test-revset2.t
@@ -1636,6 +1636,8 @@
   >  \|/   |     # amend: F -> G
   >   A    A  Z  # amend: A -> Z
   > EOS
+  3 new orphan changesets
+  3 new content-divergent changesets
 
   $ hg log -r 'successors(Z)' -T '{desc}\n'
   Z
diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t
--- a/tests/test-rebase-obsolete.t
+++ b/tests/test-rebase-obsolete.t
@@ -182,6 +182,7 @@
 
   $ hg rebase --rev 'desc(D)' --dest 'desc(H)'
   rebasing 9:08483444fef9 "D"
+  1 new orphan changesets
   $ hg debugobsolete
   42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 {cd010b8cd998f3981a5a8115f94f8da4ab506089} (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '0', 'operation': 'rebase', 'user': 'test'}
   5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 5ae4c968c6aca831df823664e706c9d4aa34473d 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '4', 'operation': 'rebase', 'user': 'test'}
@@ -460,6 +461,7 @@
   9:cf44d2f5a9f4 D (no-eol)
   $ hg rebase -r 8
   rebasing 8:e273c5e7d2d2 "C"
+  1 new orphan changesets
   $ hg log -G
   o  11:0d8f238b634c C
   |
@@ -582,6 +584,7 @@
   rebasing 3:32af7686d403 "D"
   rebasing 7:02de42196ebe "H"
   rebasing 9:4bde274eefcf "I" (tip)
+  1 new orphan changesets
   $ hg log -G
   @  12:acd174b7ab39 I
   |
@@ -616,12 +619,14 @@
   $ echo J > J
   $ hg add J
   $ hg commit -m J
+  1 new orphan changesets
   $ hg debugobsolete `hg log --rev . -T '{node}'`
   obsoleted 1 changesets
 
   $ hg rebase --rev .~1::. --dest 'max(desc(D))' --traceback --config experimental.rebaseskipobsolete=off
   rebasing 9:4bde274eefcf "I"
   rebasing 13:06edfc82198f "J" (tip)
+  2 new content-divergent changesets
   $ hg log -G
   @  15:5ae8a643467b J
   |
@@ -656,14 +661,16 @@
   $ echo "K" > K
   $ hg add K
   $ hg commit --amend -m "K"
+  1 new orphan changesets
   $ echo "L" > L
   $ hg add L
   $ hg commit -m "L"
   $ hg up '.^'
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ echo "M" > M
   $ hg add M
   $ hg commit --amend -m "M"
+  1 new orphan changesets
   $ hg log -G
   @  18:bfaedf8eb73b M
   |
@@ -702,6 +709,7 @@
   $ hg rebase -s 14 -d 17 --config experimental.rebaseskipobsolete=True
   note: not rebasing 14:9ad579b4a5de "I", already in destination as 16:fc37a630c901 "K"
   rebasing 15:5ae8a643467b "J"
+  1 new orphan changesets
 
   $ cd ..
 
@@ -732,6 +740,7 @@
   $ echo C > C
   $ hg add C
   $ hg commit -m C
+  1 new orphan changesets
   $ hg log -G
   @  4:212cb178bcbb C
   |
@@ -756,6 +765,7 @@
   $ echo D > D
   $ hg add D
   $ hg commit -m D
+  1 new orphan changesets
   $ hg --hidden strip -r 'desc(B1)'
   saved backup bundle to $TESTTMP/obsskip/.hg/strip-backup/86f6414ccda7-b1c452ee-backup.hg
   $ hg log -G
@@ -796,6 +806,7 @@
   
   $ hg debugobsolete `hg log -r 7 -T '{node}\n'` --config experimental.evolution=true
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg rebase -d 6 -r "4::"
   rebasing 4:ff2c4d47b71d "C"
   note: not rebasing 7:360bbaa7d3ce "O", it has no successor
@@ -871,6 +882,7 @@
   $ echo "bar" > foo
   $ hg add foo
   $ hg commit -m "bar foo"
+  1 new orphan changesets
   $ hg log -G
   @  14:73568ab6879d bar foo
   |
@@ -922,6 +934,7 @@
   $ hg rebase -s 10 -d 12 --config experimental.evolution.allowdivergence=True
   rebasing 10:121d9e3bc4c6 "P"
   rebasing 14:73568ab6879d "bar foo" (tip)
+  2 new content-divergent changesets
   $ hg summary
   parent: 16:61bd55f69bc4 tip
    bar foo
@@ -961,6 +974,7 @@
   $ hg commit -m "dummy change"
   $ hg debugobsolete `hg log -r ".^" -T '{node}'` `hg log -r 18 -T '{node}'` --config experimental.evolution=true
   obsoleted 1 changesets
+  1 new orphan changesets
 
   $ hg log -G -r 16::
   @  21:7bdc8a87673d dummy change
@@ -1020,6 +1034,7 @@
   >    \|
   >     a
   > EOF
+  1 new orphan changesets
   $ hg log -G -r 'a'::
   *  7:1143e9adc121 f
   |
@@ -1087,6 +1102,8 @@
   rebasing 3:a82ac2b38757 "c" (c)
   rebasing 4:76be324c128b "d" (d)
   rebasing 7:1143e9adc121 "f" (f tip)
+  1 new orphan changesets
+  2 new content-divergent changesets
   $ hg log -G -r 'a':: -T instabilities
   o  10:e1744ea07510 f
   |
@@ -1118,6 +1135,8 @@
   rebasing 3:a82ac2b38757 "c" (c)
   rebasing 4:76be324c128b "d" (d)
   rebasing 7:1143e9adc121 "f" (f tip)
+  1 new orphan changesets
+  2 new content-divergent changesets
 
   $ hg strip -r 0:
 
@@ -1136,6 +1155,7 @@
   >    \|
   >     a
   > EOF
+  1 new orphan changesets
   $ hg log -G -r 'a':
   *  8:2876ce66c6eb g
   |
@@ -1206,6 +1226,7 @@
   >  \|/
   >   A
   > EOF
+  1 new orphan changesets
 
   $ hg rebase -d B -s D
   note: not rebasing 2:b18e25de2cf5 "D" (D), already in destination as 1:112478962961 "B" (B)
@@ -1237,6 +1258,7 @@
   >  \|/
   >   A
   > EOF
+  1 new orphan changesets
 
   $ hg rebase -d B -s E
   note: not rebasing 3:7fb047a69f22 "E" (E), already in destination as 1:112478962961 "B" (B)
@@ -1268,6 +1290,7 @@
   >  \|/
   >   A
   > EOF
+  1 new orphan changesets
 
   $ hg rebase -d C -s D
   note: not rebasing 2:b18e25de2cf5 "D" (D), already in destination as 1:112478962961 "B" (B)
@@ -1302,6 +1325,7 @@
   >  \|/
   >   A
   > EOF
+  1 new orphan changesets
 
   $ hg rebase -d C -s E
   note: not rebasing 3:7fb047a69f22 "E" (E), already in destination as 1:112478962961 "B" (B)
@@ -1335,6 +1359,7 @@
   >  \|/
   >   A
   > EOF
+  1 new orphan changesets
 
   $ hg rebase -d C -b F
   rebasing 2:b18e25de2cf5 "D" (D)
@@ -1370,6 +1395,7 @@
   >  \|/
   >   A
   > EOF
+  1 new orphan changesets
 
   $ hg rebase -d C -b F
   note: not rebasing 2:b18e25de2cf5 "D" (D), already in destination as 1:112478962961 "B" (B)
@@ -1405,6 +1431,7 @@
   > | |
   > X Y
   > EOS
+  1 new orphan changesets
   $ hg rebase -r A+B+E -d F
   note: not rebasing 4:a3d17304151f "A" (A), already in destination as 0:96cc3511f894 "C" (C)
   note: not rebasing 5:b23a2cc00842 "B" (B), already in destination as 1:058c1e1fb10a "D" (D)
@@ -1423,6 +1450,7 @@
   >  /| | # replace: A -> C
   > A B C # D/D = D
   > EOS
+  1 new orphan changesets
   $ hg rebase -r A+B+D -d Z
   note: not rebasing 0:426bada5c675 "A" (A), already in destination as 2:96cc3511f894 "C" (C)
   rebasing 1:fc2b737bb2e5 "B" (B)
@@ -1453,6 +1481,7 @@
   >  /| |  # replace: B -> C
   > A B C  # D/D = D
   > EOS
+  1 new orphan changesets
   $ hg rebase -r B+A+D -d Z
   rebasing 0:426bada5c675 "A" (A)
   note: not rebasing 1:fc2b737bb2e5 "B" (B), already in destination as 2:96cc3511f894 "C" (C)
@@ -1530,6 +1559,7 @@
   $ hg rebase -r B+D1 -d E
   rebasing 1:112478962961 "B" (B)
   note: not rebasing 5:15ecf15e0114 "D1" (book D1 tip), already in destination as 2:0807738e0be9 "D2" (D2)
+  1 new orphan changesets
   $ hg log -G -T '{desc} {bookmarks}'
   @  B book
   |
@@ -1561,6 +1591,7 @@
   >  |/
   >  A
   > EOS
+  1 new orphan changesets
 
   $ eval `hg tags -T '{tag}={node}\n'`
   $ rm .hg/localtags
diff --git a/tests/test-rebase-dest.t b/tests/test-rebase-dest.t
--- a/tests/test-rebase-dest.t
+++ b/tests/test-rebase-dest.t
@@ -420,6 +420,7 @@
   >     \|          # amend: I -> I2
   >      A
   > EOF
+  6 new orphan changesets
   rebasing 16:5c432343bf59 "J" (J tip)
   rebasing 3:26805aba1e60 "C" (C)
   rebasing 6:f585351a92f8 "D" (D)
diff --git a/tests/test-push-race.t b/tests/test-push-race.t
--- a/tests/test-push-race.t
+++ b/tests/test-push-race.t
@@ -1707,6 +1707,7 @@
   added 1 changesets with 1 changes to 1 files (+1 heads)
   1 new obsolescence markers
   obsoleted 1 changesets
+  1 new orphan changesets
   new changesets 720c5163ecf6
   (run 'hg heads .' to see heads, 'hg merge' to merge)
   $ hg -R ./client-other pull
@@ -1718,6 +1719,7 @@
   added 1 changesets with 1 changes to 1 files (+1 heads)
   1 new obsolescence markers
   obsoleted 1 changesets
+  1 new orphan changesets
   new changesets 720c5163ecf6
   (run 'hg heads .' to see heads, 'hg merge' to merge)
   $ hg -R ./client-racy pull
@@ -1727,6 +1729,7 @@
   adding manifests
   adding file changes
   added 1 changesets with 0 changes to 0 files
+  1 new orphan changesets
   new changesets a98a47d8b85b
   (run 'hg update' to get a working copy)
 
@@ -1792,6 +1795,7 @@
   $ hg -R client-other/ branch --force default
   marked working directory as branch default
   $ hg -R client-other/ commit -m "C-W"
+  1 new orphan changesets
   created new head
   $ ID_V=`hg -R client-other log -T '{node}\n' -r 'desc("C-V")'`
   $ ID_W=`hg -R client-other log -T '{node}\n' -r 'desc("C-W")'`
@@ -1818,6 +1822,7 @@
   remote: added 1 changesets with 0 changes to 1 files (+1 heads)
   remote: 1 new obsolescence markers
   remote: obsoleted 1 changesets
+  remote: 1 new orphan changesets
 
   $ release $TESTTMP/watchfile
 
diff --git a/tests/test-push-checkheads-unpushed-D5.t b/tests/test-push-checkheads-unpushed-D5.t
--- a/tests/test-push-checkheads-unpushed-D5.t
+++ b/tests/test-push-checkheads-unpushed-D5.t
@@ -73,6 +73,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
@@ -107,5 +108,6 @@
   added 1 changesets with 1 changes to 1 files
   1 new obsolescence markers
   obsoleted 1 changesets
+  1 new orphan changesets
 
   $ cd ../..
diff --git a/tests/test-push-checkheads-unpushed-D4.t b/tests/test-push-checkheads-unpushed-D4.t
--- a/tests/test-push-checkheads-unpushed-D4.t
+++ b/tests/test-push-checkheads-unpushed-D4.t
@@ -84,6 +84,7 @@
   $ mkcommit B1
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-unpushed-D3.t b/tests/test-push-checkheads-unpushed-D3.t
--- a/tests/test-push-checkheads-unpushed-D3.t
+++ b/tests/test-push-checkheads-unpushed-D3.t
@@ -68,6 +68,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-unpushed-D2.t b/tests/test-push-checkheads-unpushed-D2.t
--- a/tests/test-push-checkheads-unpushed-D2.t
+++ b/tests/test-push-checkheads-unpushed-D2.t
@@ -65,6 +65,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete --record-parents `getid "desc(B0)"`
   obsoleted 1 changesets
   $ hg up 0
diff --git a/tests/test-push-checkheads-superceed-A7.t b/tests/test-push-checkheads-superceed-A7.t
--- a/tests/test-push-checkheads-superceed-A7.t
+++ b/tests/test-push-checkheads-superceed-A7.t
@@ -70,6 +70,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-superceed-A6.t b/tests/test-push-checkheads-superceed-A6.t
--- a/tests/test-push-checkheads-superceed-A6.t
+++ b/tests/test-push-checkheads-superceed-A6.t
@@ -70,6 +70,7 @@
   $ mkcommit B1
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-superceed-A3.t b/tests/test-push-checkheads-superceed-A3.t
--- a/tests/test-push-checkheads-superceed-A3.t
+++ b/tests/test-push-checkheads-superceed-A3.t
@@ -64,6 +64,7 @@
   $ mkcommit A1
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-superceed-A2.t b/tests/test-push-checkheads-superceed-A2.t
--- a/tests/test-push-checkheads-superceed-A2.t
+++ b/tests/test-push-checkheads-superceed-A2.t
@@ -61,6 +61,7 @@
   $ mkcommit B1
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-pruned-B8.t b/tests/test-push-checkheads-pruned-B8.t
--- a/tests/test-push-checkheads-pruned-B8.t
+++ b/tests/test-push-checkheads-pruned-B8.t
@@ -68,6 +68,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg debugobsolete --record-parents `getid "desc(B1)"`
diff --git a/tests/test-push-checkheads-pruned-B5.t b/tests/test-push-checkheads-pruned-B5.t
--- a/tests/test-push-checkheads-pruned-B5.t
+++ b/tests/test-push-checkheads-pruned-B5.t
@@ -65,6 +65,7 @@
   created new head
   $ hg debugobsolete --record-parents `getid "desc(A0)"`
   obsoleted 1 changesets
+  2 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)"` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg debugobsolete --record-parents `getid "desc(C0)"`
diff --git a/tests/test-push-checkheads-pruned-B4.t b/tests/test-push-checkheads-pruned-B4.t
--- a/tests/test-push-checkheads-pruned-B4.t
+++ b/tests/test-push-checkheads-pruned-B4.t
@@ -62,6 +62,7 @@
   created new head
   $ hg debugobsolete --record-parents `getid "desc(A0)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete --record-parents `getid "desc(B0)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-pruned-B3.t b/tests/test-push-checkheads-pruned-B3.t
--- a/tests/test-push-checkheads-pruned-B3.t
+++ b/tests/test-push-checkheads-pruned-B3.t
@@ -61,6 +61,7 @@
   created new head
   $ hg debugobsolete --record-parents `getid "desc(A0)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-pruned-B2.t b/tests/test-push-checkheads-pruned-B2.t
--- a/tests/test-push-checkheads-pruned-B2.t
+++ b/tests/test-push-checkheads-pruned-B2.t
@@ -61,6 +61,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete --record-parents `getid "desc(B0)"`
   obsoleted 1 changesets
   $ hg log -G --hidden
diff --git a/tests/test-push-checkheads-partial-C4.t b/tests/test-push-checkheads-partial-C4.t
--- a/tests/test-push-checkheads-partial-C4.t
+++ b/tests/test-push-checkheads-partial-C4.t
@@ -61,6 +61,7 @@
   created new head
   $ hg debugobsolete --record-parents `getid "desc(A0)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg log -G --hidden
   @  0f88766e02d6 (draft): C0
   |
diff --git a/tests/test-push-checkheads-partial-C2.t b/tests/test-push-checkheads-partial-C2.t
--- a/tests/test-push-checkheads-partial-C2.t
+++ b/tests/test-push-checkheads-partial-C2.t
@@ -61,6 +61,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg log -G --hidden
   @  f6082bc4ffef (draft): A1
   |
diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t
--- a/tests/test-obsolete.t
+++ b/tests/test-obsolete.t
@@ -208,6 +208,7 @@
 Check that public changeset are not accounted as obsolete:
 
   $ hg --hidden phase --public 2
+  1 new phase-divergent changesets
   $ hg log -G
   @  5:5601fb93a350 (draft phase-divergent) [tip ] add new_3_c
   |
@@ -519,6 +520,7 @@
   $ mkcommit original_e
   $ hg debugobsolete --record-parents `getid original_d` -d '0 0'
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete | grep `getid original_d`
   94b33453f93bdb8d457ef9b770851a618bf413e1 0 {6f96419950729f3671185b847352890f074f7557} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
   $ hg log -r 'obsolete()'
@@ -583,6 +585,7 @@
   adding file changes
   added 6 changesets with 6 changes to 6 files (+1 heads)
   7 new obsolescence markers
+  1 new orphan changesets
 
 no warning displayed
 
@@ -918,7 +921,9 @@
 
   $ hg debugobsolete `getid obsolete_e`
   obsoleted 1 changesets
+  2 new orphan changesets
   $ hg debugobsolete `getid original_c` `getid babar`
+  1 new phase-divergent changesets
   $ hg log --config ui.logtemplate= -r 'phasedivergent() and orphan()'
   changeset:   7:50c51b361e60
   user:        test
@@ -1293,6 +1298,7 @@
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ echo aa > a
   $ hg amendtransient
+  1 new orphan changesets
   [1, 2]
 
 Test cache consistency for the visible filter
diff --git a/tests/test-obsolete-divergent.t b/tests/test-obsolete-divergent.t
--- a/tests/test-obsolete-divergent.t
+++ b/tests/test-obsolete-divergent.t
@@ -61,6 +61,7 @@
   $ hg debugobsolete `getid A_0` `getid A_1`
   obsoleted 1 changesets
   $ hg debugobsolete `getid A_0` `getid A_2`
+  2 new content-divergent changesets
   $ hg log -G --hidden
   *  3:392fd25390da A_2
   |
@@ -120,6 +121,7 @@
   $ hg debugobsolete `getid A_0` `getid A_1`
   obsoleted 1 changesets
   $ hg debugobsolete `getid A_0` `getid A_2`
+  2 new content-divergent changesets
   $ mkcommit A_3
   created new head
   $ hg debugobsolete `getid A_2` `getid A_3`
@@ -180,6 +182,7 @@
   obsoleted 1 changesets
   $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid A_1`
   $ hg debugobsolete `getid A_0` `getid A_2`
+  2 new content-divergent changesets
   $ hg log -G --hidden
   *  3:392fd25390da A_2
   |
@@ -250,6 +253,7 @@
   $ hg debugobsolete `getid A_0` `getid A_1`
   obsoleted 1 changesets
   $ hg debugobsolete `getid A_0` `getid A_2`
+  2 new content-divergent changesets
   $ mkcommit A_3
   created new head
   $ hg debugobsolete `getid A_1` `getid A_3`
@@ -430,6 +434,7 @@
   created new head
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg debugobsolete `getid A_5` `getid A_9`
+  4 new content-divergent changesets
   $ hg log -G --hidden
   *  10:bed64f5d2f5a A_9
   |
@@ -670,6 +675,7 @@
 
   $ rm .hg/localtags
   $ hg cleanup --config extensions.t=$TESTTMP/scmutilcleanup.py
+  2 new content-divergent changesets
   $ hg log -G -T '{rev}:{node|short} {desc} {instabilities}' -r 'sort(all(), topo)'
   @  5:1a2a9b5b0030 B2 content-divergent
   |
diff --git a/tests/test-obsolete-distributed.t b/tests/test-obsolete-distributed.t
--- a/tests/test-obsolete-distributed.t
+++ b/tests/test-obsolete-distributed.t
@@ -276,6 +276,7 @@
   $ hg up 'desc("c_A")'
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg commit --amend -m 'c_A1'
+  1 new orphan changesets
   $ hg rebase -r 'desc("c_B0")' -d . # no easy way to rewrite the message with the rebase
   rebasing 2:ef908e42ce65 "c_B0"
   $ hg up
@@ -323,6 +324,7 @@
   $ hg up 'desc("c_A")'
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg commit --amend -m 'c_A2'
+  1 new orphan changesets
   $ hg rebase -r 'desc("c_B1")' -d . # no easy way to rewrite the message with the rebase
   rebasing 2:956063ac4557 "c_B1"
   $ hg up
diff --git a/tests/test-obsolete-changeset-exchange.t b/tests/test-obsolete-changeset-exchange.t
--- a/tests/test-obsolete-changeset-exchange.t
+++ b/tests/test-obsolete-changeset-exchange.t
@@ -71,6 +71,7 @@
   adding manifests
   adding file changes
   added 1 changesets with 0 changes to 1 files (+1 heads)
+  1 new phase-divergent changesets
   new changesets f89bcc95eba5
   (run 'hg heads' to see heads, 'hg merge' to merge)
 
diff --git a/tests/test-obsolete-bundle-strip.t b/tests/test-obsolete-bundle-strip.t
--- a/tests/test-obsolete-bundle-strip.t
+++ b/tests/test-obsolete-bundle-strip.t
@@ -272,6 +272,7 @@
   $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
   $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
   obsoleted 1 changesets
   $ hg up 'desc("ROOT")'
@@ -601,6 +602,7 @@
   $ hg debugobsolete a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0 `getid 'desc("C-A0")'`
   $ hg debugobsolete `getid 'desc("C-A0")'` `getid 'desc("C-A1")'`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete --record-parents `getid 'desc("C-B0")'`
   obsoleted 1 changesets
 
@@ -770,8 +772,10 @@
   $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-B")'` `getid 'desc("C-C")'` # record split
   obsoleted 1 changesets
   $ hg debugobsolete `getid 'desc("C-A")'` `getid 'desc("C-D")'` # other divergent
+  3 new content-divergent changesets
   $ hg debugobsolete `getid 'desc("C-A")'` b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0
   $ hg debugobsolete b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 `getid 'desc("C-E")'`
+  1 new content-divergent changesets
   $ hg debugobsolete `getid 'desc("C-B")'` `getid 'desc("C-E")'`
   obsoleted 1 changesets
   $ hg debugobsolete `getid 'desc("C-C")'` `getid 'desc("C-E")'`
@@ -952,6 +956,7 @@
       b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
   # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/2f20ff6509f0-8adeb22d-backup.hg
+  3 new content-divergent changesets
   ### Backup markers ###
       06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -1121,6 +1126,7 @@
       b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
   # stripping: saved backup bundle to $TESTTMP/split-fold/.hg/strip-backup/9ac430e15fca-36b6476a-backup.hg
+  3 new content-divergent changesets
   ### Backup markers ###
       06dc9da25ef03e1ff7864dded5fcba42eff2a3f0 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
       27ec657ca21dd27c36c99fa75586f72ff0d442f1 2f20ff6509f0e013e90c5c8efd996131c918b0ca 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
diff --git a/tests/test-obsmarker-template.t b/tests/test-obsmarker-template.t
--- a/tests/test-obsmarker-template.t
+++ b/tests/test-obsmarker-template.t
@@ -591,6 +591,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
   obsoleted 1 changesets
 
@@ -817,6 +818,7 @@
   updating to a hidden changeset 471f378eab4c
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg commit --amend -m "A2"
+  2 new content-divergent changesets
   $ hg log --hidden -G
   @  changeset:   3:65b757b745b9
   |  tag:         tip
@@ -1112,6 +1114,7 @@
   created new head
   $ hg debugobsolete `getid "desc(A0)"` `getid "desc(C0)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B1)"` `getid "desc(C0)"`
   obsoleted 1 changesets
 
@@ -1589,6 +1592,7 @@
 
   $ hg debugobsolete `getid "desc(A0)"` `getid "desc(B0)"`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid "desc(B0)"` `getid "desc(C0)"`
   obsoleted 1 changesets
   $ hg debugobsolete `getid "desc(B0)"` `getid "desc(A0)"`
@@ -1874,10 +1878,12 @@
   $ hg up 6
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg commit --amend -m "Add only B"
+  1 new orphan changesets
 
   $ hg up 6 --hidden
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg commit --amend -m "Add B only"
+  4 new content-divergent changesets
 
   $ hg log -G
   @  changeset:   9:0b997eb7ceee
diff --git a/tests/test-obshistory.t b/tests/test-obshistory.t
--- a/tests/test-obshistory.t
+++ b/tests/test-obshistory.t
@@ -333,6 +333,7 @@
 
   $ hg debugobsolete `getid 'desc(A0)'` `getid 'desc(C0)'`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid 'desc(B0)'` `getid 'desc(C0)'`
   obsoleted 1 changesets
 
@@ -412,6 +413,7 @@
   updating to a hidden changeset 471f378eab4c
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg commit --amend -m "A2"
+  2 new content-divergent changesets
   $ hg log --hidden -G
   @  changeset:   3:65b757b745b9
   |  tag:         tip
@@ -498,6 +500,7 @@
 
   $ hg debugobsolete `getid 'desc(A0)'` `getid 'desc(C0)'`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid 'desc(B1)'` `getid 'desc(C0)'`
   obsoleted 1 changesets
 
diff --git a/tests/test-histedit-obsolete.t b/tests/test-histedit-obsolete.t
--- a/tests/test-histedit-obsolete.t
+++ b/tests/test-histedit-obsolete.t
@@ -222,6 +222,7 @@
   [1]
   $ echo c >> c
   $ hg histedit --continue
+  1 new orphan changesets
 
   $ hg log -r 'orphan()'
   11:c13eb81022ca f (no-eol)
diff --git a/tests/test-exchange-obsmarkers-case-D4.t b/tests/test-exchange-obsmarkers-case-D4.t
--- a/tests/test-exchange-obsmarkers-case-D4.t
+++ b/tests/test-exchange-obsmarkers-case-D4.t
@@ -60,6 +60,7 @@
   $ mkcommit B1
   $ hg debugobsolete `getid 'desc(A0)'` aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid 'desc(A1)'`
   $ hg debugobsolete `getid 'desc(B0)'` bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
   obsoleted 1 changesets
diff --git a/tests/test-exchange-obsmarkers-case-D1.t b/tests/test-exchange-obsmarkers-case-D1.t
--- a/tests/test-exchange-obsmarkers-case-D1.t
+++ b/tests/test-exchange-obsmarkers-case-D1.t
@@ -62,6 +62,7 @@
   created new head
   $ hg debugobsolete `getid 'desc(A0)'` `getid 'desc(A1)'`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg prune -d '0 0' 'desc(B)'
   obsoleted 1 changesets
   $ hg strip --hidden -q 'desc(A0)'
diff --git a/tests/test-exchange-obsmarkers-case-C4.t b/tests/test-exchange-obsmarkers-case-C4.t
--- a/tests/test-exchange-obsmarkers-case-C4.t
+++ b/tests/test-exchange-obsmarkers-case-C4.t
@@ -67,6 +67,7 @@
   $ hg debugobsolete --hidden `getid 'desc(A)'` `getid 'desc(B)'`
   obsoleted 1 changesets
   $ hg debugobsolete --hidden `getid 'desc(A)'` `getid 'desc(C)'`
+  2 new content-divergent changesets
   $ hg prune -qd '0 0' .
   $ hg log -G --hidden
   x  7f7f229b13a6 (draft): C
diff --git a/tests/test-exchange-obsmarkers-case-C1.t b/tests/test-exchange-obsmarkers-case-C1.t
--- a/tests/test-exchange-obsmarkers-case-C1.t
+++ b/tests/test-exchange-obsmarkers-case-C1.t
@@ -58,6 +58,7 @@
   $ mkcommit A
   $ mkcommit B
   $ hg prune -qd '0 0' '.~1'
+  1 new orphan changesets
   $ hg prune -qd '0 0' .
   $ hg log -G --hidden
   x  f6fbb35d8ac9 (draft): B
diff --git a/tests/test-exchange-obsmarkers-case-B5.t b/tests/test-exchange-obsmarkers-case-B5.t
--- a/tests/test-exchange-obsmarkers-case-B5.t
+++ b/tests/test-exchange-obsmarkers-case-B5.t
@@ -71,6 +71,7 @@
   $ mkcommit B1
   $ hg debugobsolete --hidden `getid 'desc(A0)'` `getid 'desc(A1)'`
   obsoleted 1 changesets
+  2 new orphan changesets
   $ hg debugobsolete --hidden aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid 'desc(B0)'`
   $ hg debugobsolete --hidden `getid 'desc(B0)'` `getid 'desc(B1)'`
   obsoleted 1 changesets
diff --git a/tests/test-exchange-obsmarkers-case-A4.t b/tests/test-exchange-obsmarkers-case-A4.t
--- a/tests/test-exchange-obsmarkers-case-A4.t
+++ b/tests/test-exchange-obsmarkers-case-A4.t
@@ -65,6 +65,7 @@
   $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid 'desc(A0)'`
   $ hg debugobsolete `getid 'desc(A0)'` `getid 'desc(A1)'`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg log -G --hidden
   @  e5ea8f9c7314 (draft): A1
   |
diff --git a/tests/test-exchange-obsmarkers-case-A3.t b/tests/test-exchange-obsmarkers-case-A3.t
--- a/tests/test-exchange-obsmarkers-case-A3.t
+++ b/tests/test-exchange-obsmarkers-case-A3.t
@@ -74,6 +74,7 @@
   created new head
   $ hg debugobsolete `getid 'desc(A0)'` `getid 'desc(A1)'`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid 'desc(B0)'` `getid 'desc(B1)'`
   obsoleted 1 changesets
   $ hg log -G --hidden
@@ -163,6 +164,7 @@
   created new head
   $ hg debugobsolete `getid 'desc(A0)'` `getid 'desc(A1)'`
   obsoleted 1 changesets
+  1 new orphan changesets
   $ hg debugobsolete `getid 'desc(B0)'` `getid 'desc(B1)'`
   obsoleted 1 changesets
   $ hg log -G --hidden
@@ -218,6 +220,7 @@
   remote: added 1 changesets with 1 changes to 1 files (+1 heads)
   remote: 1 new obsolescence markers
   remote: obsoleted 1 changesets
+  remote: 1 new orphan changesets
   ## post push state
   # obstore: main
   28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -234,6 +237,7 @@
   added 1 changesets with 1 changes to 1 files (+1 heads)
   1 new obsolescence markers
   obsoleted 1 changesets
+  1 new orphan changesets
   new changesets e5ea8f9c7314
   (run 'hg heads' to see heads, 'hg merge' to merge)
   ## post pull state
diff --git a/tests/test-drawdag.t b/tests/test-drawdag.t
--- a/tests/test-drawdag.t
+++ b/tests/test-drawdag.t
@@ -206,6 +206,7 @@
   >    \|/
   >     A
   > EOS
+  1 new orphan changesets
 
   $ hg log -r 'sort(all(), topo)' -G --hidden -T '{desc} {node}'
   *  G 711f53bbef0bebd12eb6f0511d5e2e998b984846
diff --git a/tests/test-commit-amend.t b/tests/test-commit-amend.t
--- a/tests/test-commit-amend.t
+++ b/tests/test-commit-amend.t
@@ -605,6 +605,7 @@
     babar
   
   $ hg commit --amend
+  1 new orphan changesets
   $ hg log -r 'orphan()'
   changeset:   16:37973c7e0b61
   branch:      a
diff --git a/tests/test-cache-abuse.t b/tests/test-cache-abuse.t
--- a/tests/test-cache-abuse.t
+++ b/tests/test-cache-abuse.t
@@ -70,6 +70,11 @@
   $ damage "tags --hidden" tags2
   $ damage tags tags2-visible
   $ damage "tag -f t3" hgtagsfnodes1
+  1 new orphan changesets
+  1 new orphan changesets
+  1 new orphan changesets
+  1 new orphan changesets
+  1 new orphan changesets
 
 Beat up branch caches:
 
diff --git a/tests/test-amend.t b/tests/test-amend.t
--- a/tests/test-amend.t
+++ b/tests/test-amend.t
@@ -185,6 +185,7 @@
   > EOF
 
   $ hg amend
+  1 new orphan changesets
   $ hg log -T '{rev} {node|short} {desc}\n' -G
   @  3 be169c7e8dbe B
   |
diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -1222,6 +1222,9 @@
     'unbundle',
 ]
 
+# A marker that tells the evolve extension to suppress its own reporting
+_reportstroubledchangesets = True
+
 def registersummarycallback(repo, otr, txnname=''):
     """register a callback to issue a summary after the transaction is closed
     """
@@ -1257,6 +1260,32 @@
                 repo.ui.status(_('obsoleted %i changesets\n')
                                % len(obsoleted))
 
+    if obsolete.isenabled(repo, obsolete.createmarkersopt):
+        instabilitytypes = [
+            ('orphan', 'orphan'),
+            ('phase-divergent', 'phasedivergent'),
+            ('content-divergent', 'contentdivergent'),
+        ]
+
+        def getinstabilitycounts(repo):
+            filtered = repo.changelog.filteredrevs
+            counts = {}
+            for instability, revset in instabilitytypes:
+                counts[instability] = len(set(obsolete.getrevs(repo, revset)) -
+                                      filtered)
+            return counts
+
+        oldinstabilitycounts = getinstabilitycounts(repo)
+        @reportsummary
+        def reportnewinstabilities(repo, tr):
+            newinstabilitycounts = getinstabilitycounts(repo)
+            for instability, revset in instabilitytypes:
+                delta = (newinstabilitycounts[instability] -
+                         oldinstabilitycounts[instability])
+                if delta > 0:
+                    repo.ui.warn(_('%i new %s changesets\n') %
+                                 (delta, instability))
+
     if txmatch(_reportnewcssource):
         @reportsummary
         def reportnewcs(repo, tr):



To: martinvonz, durin42, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list