obshistory: add the all option to obslog to show the while obs tree
authorBoris Feld <boris.feld@octobus.net>
Tue, 23 May 2017 19:48:04 +0200
changeset 2484 262d684851dc
parent 2483 db565cc05987
child 2485 e6ecd35e99ec
obshistory: add the all option to obslog to show the while obs tree Add a --all option to obslog in order to display also the successors of each obs markers. It has the effect of showing a more comprehensive graph when a split or a divergence happened.
README
hgext3rd/evolve/obshistory.py
tests/test-evolve-cycles.t
tests/test-evolve-obshistory-complex.t
tests/test-evolve-obshistory.t
--- a/README	Fri May 26 16:12:07 2017 +0200
+++ b/README	Tue May 23 19:48:04 2017 +0200
@@ -116,6 +116,7 @@
 -------------------
 
  - olog: add an 'obslog' alias
+ - olog: add an '--all' option to show the whole obsolescence history tree.
 
 6.2.2 - in progress
 -------------------
--- a/hgext3rd/evolve/obshistory.py	Fri May 26 16:12:07 2017 +0200
+++ b/hgext3rd/evolve/obshistory.py	Tue May 23 19:48:04 2017 +0200
@@ -28,7 +28,8 @@
 @eh.command(
     'obslog|olog',
     [('G', 'graph', True, _("show the revision DAG")),
-     ('r', 'rev', [], _('show the specified revision or revset'), _('REV'))
+     ('r', 'rev', [], _('show the specified revision or revset'), _('REV')),
+     ('a', 'all', False, _('show all related changesets, not only precursors'))
     ] + commands.formatteropts,
     _('hg olog [OPTION]... [REV]'))
 def cmdobshistory(ui, repo, *revs, **opts):
@@ -158,14 +159,14 @@
             stack.pop()
     return False
 
-def _obshistorywalker(repo, revs):
+def _obshistorywalker(repo, revs, walksuccessors=False):
     """ Directly inspired by graphmod.dagwalker,
     walk the obs marker tree and yield
     (id, CHANGESET, ctx, [parentinfo]) tuples
     """
 
     # Get the list of nodes and links between them
-    candidates, nodesucc, nodeprec = _obshistorywalker_links(repo, revs)
+    candidates, nodesucc, nodeprec = _obshistorywalker_links(repo, revs, walksuccessors)
 
     # Shown, set of nodes presents in items
     shown = set()
@@ -216,15 +217,19 @@
             childrens = [(graphmod.PARENT, x) for x in nodeprec.get(cand, ())]
             yield (cand, 'M', changectx, childrens)
 
-def _obshistorywalker_links(repo, revs):
+def _obshistorywalker_links(repo, revs, walksuccessors=False):
     """ Iterate the obs history tree starting from revs, traversing
     each revision precursors recursively.
+    If walksuccessors is True, also check that every successor has been
+    walked, which ends up walking on all connected obs markers. It helps
+    getting a better view with splits and divergences.
     Return a tuple of:
     - The list of node crossed
     - The dictionnary of each node successors, values are a set
     - The dictionnary of each node precursors, values are a list
     """
     precursors = repo.obsstore.precursors
+    successors = repo.obsstore.successors
     nodec = repo.changelog.node
 
     # Parents, set of parents nodes seen during walking the graph for node
@@ -257,12 +262,21 @@
                 seen.add(precnode)
                 nodes.append(precnode)
 
+        # Also walk on successors if the option is enabled
+        if walksuccessors:
+            for successor in successors.get(node, ()):
+                for succnodeid in successor[1]:
+                    if succnodeid not in seen:
+                        seen.add(succnodeid)
+                        nodes.append(succnodeid)
+
     return sorted(seen), nodesucc, nodeprec
 
 def _debugobshistorygraph(ui, repo, revs, opts):
     displayer = obsmarker_printer(ui, repo.unfiltered(), None, opts, buffered=True)
     edges = graphmod.asciiedges
-    cmdutil.displaygraph(ui, repo, _obshistorywalker(repo.unfiltered(), revs), displayer, edges)
+    walker = _obshistorywalker(repo.unfiltered(), revs, opts.get('all', False))
+    cmdutil.displaygraph(ui, repo, walker, displayer, edges)
 
 def _debugobshistorysingle(fm, repo, revs):
     """ Display the obsolescence history for a single revision
--- a/tests/test-evolve-cycles.t	Fri May 26 16:12:07 2017 +0200
+++ b/tests/test-evolve-cycles.t	Tue May 23 19:48:04 2017 +0200
@@ -117,6 +117,19 @@
   |    rewritten by test (*) as a8df460dbbfe (glob)
   |
 
+Check that all option don't crash on a cycle either
+
+  $ hg obslog "desc(C)" --hidden --all
+  @  2a34000d3544 (1) A
+  |    rewritten by test (*) as c473644ee0e9 (glob)
+  |
+  x  a8df460dbbfe (3) C
+  |    rewritten by test (*) as 2a34000d3544 (glob)
+  |
+  x  c473644ee0e9 (2) B
+  |    rewritten by test (*) as a8df460dbbfe (glob)
+  |
+
 Test with multiple cyles
 ========================
 
@@ -247,7 +260,26 @@
   x |  c473644ee0e9 (2) B
   | |    rewritten by test (*) as a8df460dbbfe (glob)
   | |
-
+Check that all option don't crash either on a cycle
+  $ hg obslog --all --hidden "desc(F)"
+  x  0da815c333f6 (5) E
+  |    rewritten by test (*) as d9f908fde1a1 (glob)
+  |
+  @    868d2e0eb19c (4) D
+  |\     rewritten by test (*) as 0da815c333f6 (glob)
+  | |
+  | x  d9f908fde1a1 (6) F
+  | |    rewritten by test (*) as 868d2e0eb19c (glob)
+  | |
+  +---x  2a34000d3544 (1) A
+  | |      rewritten by test (*) as c473644ee0e9 (glob)
+  | |
+  x |  a8df460dbbfe (3) C
+  | |    rewritten by test (*) as 2a34000d3544, 868d2e0eb19c (glob)
+  | |
+  x |  c473644ee0e9 (2) B
+  | |    rewritten by test (*) as a8df460dbbfe (glob)
+  | |
 Check the json output is valid in this case
 
   $ hg obslog "desc(D)" --hidden --no-graph -Tjson | python -m json.tool
@@ -362,3 +394,4 @@
           "debugobshistory.shortdescription": "A"
       }
   ]
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-evolve-obshistory-complex.t	Tue May 23 19:48:04 2017 +0200
@@ -0,0 +1,428 @@
+Global setup
+============
+
+  $ . $TESTDIR/testlib/common.sh
+  $ cat >> $HGRCPATH <<EOF
+  > [ui]
+  > interactive = true
+  > [phases]
+  > publish=False
+  > [extensions]
+  > evolve =
+  > EOF
+
+Test obslog with split + fold + split
+=====================================
+
+Test setup
+----------
+
+  $ hg init $TESTTMP/splitfoldsplit
+  $ cd $TESTTMP/splitfoldsplit
+  $ mkcommit ROOT
+  $ mkcommit A
+  $ mkcommit B
+  $ mkcommit C
+  $ mkcommit D
+  $ mkcommit E
+  $ mkcommit F
+  $ hg log -G
+  @  changeset:   6:d9f908fde1a1
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     F
+  |
+  o  changeset:   5:0da815c333f6
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     E
+  |
+  o  changeset:   4:868d2e0eb19c
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     D
+  |
+  o  changeset:   3:a8df460dbbfe
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     C
+  |
+  o  changeset:   2:c473644ee0e9
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     B
+  |
+  o  changeset:   1:2a34000d3544
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     A
+  |
+  o  changeset:   0:ea207398892e
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     ROOT
+  
+Split commits two by two
+------------------------
+
+  $ hg fold --exact -r 1 -r 2 --date "0 0" -m "fold0"
+  2 changesets folded
+  4 new unstable changesets
+  $ hg fold --exact -r 3 -r 4 --date "0 0" -m "fold1"
+  2 changesets folded
+  $ hg fold --exact -r 5 -r 6 --date "0 0" -m "fold2"
+  2 changesets folded
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg log -G 
+  @  changeset:   9:100cc25b765f
+  |  tag:         tip
+  |  parent:      4:868d2e0eb19c
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  trouble:     unstable
+  |  summary:     fold2
+  |
+  | o  changeset:   8:d15d0ffc75f6
+  | |  parent:      2:c473644ee0e9
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  trouble:     unstable
+  | |  summary:     fold1
+  | |
+  | | o  changeset:   7:b868bc49b0a4
+  | | |  parent:      0:ea207398892e
+  | | |  user:        test
+  | | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | | |  summary:     fold0
+  | | |
+  x | |  changeset:   4:868d2e0eb19c
+  | | |  user:        test
+  | | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | | |  summary:     D
+  | | |
+  x | |  changeset:   3:a8df460dbbfe
+  |/ /   user:        test
+  | |    date:        Thu Jan 01 00:00:00 1970 +0000
+  | |    summary:     C
+  | |
+  x |  changeset:   2:c473644ee0e9
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     B
+  | |
+  x |  changeset:   1:2a34000d3544
+  |/   user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     A
+  |
+  o  changeset:   0:ea207398892e
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     ROOT
+  
+
+Then split
+----------
+
+  $ hg split "desc(fold0)" -d "0 0" << EOF
+  > Y
+  > Y
+  > N
+  > N
+  > Y
+  > Y
+  > EOF
+  0 files updated, 0 files merged, 6 files removed, 0 files unresolved
+  adding A
+  adding B
+  diff --git a/A b/A
+  new file mode 100644
+  examine changes to 'A'? [Ynesfdaq?] Y
+  
+  @@ -0,0 +1,1 @@
+  +A
+  record change 1/2 to 'A'? [Ynesfdaq?] Y
+  
+  diff --git a/B b/B
+  new file mode 100644
+  examine changes to 'B'? [Ynesfdaq?] N
+  
+  created new head
+  Done splitting? [yN] N
+  diff --git a/B b/B
+  new file mode 100644
+  examine changes to 'B'? [Ynesfdaq?] Y
+  
+  @@ -0,0 +1,1 @@
+  +B
+  record this change to 'B'? [Ynesfdaq?] Y
+  
+  no more change to split
+  $ hg split "desc(fold1)" -d "0 0" << EOF
+  > Y
+  > Y
+  > N
+  > N
+  > Y
+  > Y
+  > EOF
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  adding C
+  adding D
+  diff --git a/C b/C
+  new file mode 100644
+  examine changes to 'C'? [Ynesfdaq?] Y
+  
+  @@ -0,0 +1,1 @@
+  +C
+  record change 1/2 to 'C'? [Ynesfdaq?] Y
+  
+  diff --git a/D b/D
+  new file mode 100644
+  examine changes to 'D'? [Ynesfdaq?] N
+  
+  created new head
+  Done splitting? [yN] N
+  diff --git a/D b/D
+  new file mode 100644
+  examine changes to 'D'? [Ynesfdaq?] Y
+  
+  @@ -0,0 +1,1 @@
+  +D
+  record this change to 'D'? [Ynesfdaq?] Y
+  
+  no more change to split
+  $ hg split "desc(fold2)" -d "0 0" << EOF
+  > Y
+  > Y
+  > N
+  > N
+  > Y
+  > Y
+  > EOF
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  adding E
+  adding F
+  diff --git a/E b/E
+  new file mode 100644
+  examine changes to 'E'? [Ynesfdaq?] Y
+  
+  @@ -0,0 +1,1 @@
+  +E
+  record change 1/2 to 'E'? [Ynesfdaq?] Y
+  
+  diff --git a/F b/F
+  new file mode 100644
+  examine changes to 'F'? [Ynesfdaq?] N
+  
+  created new head
+  Done splitting? [yN] N
+  diff --git a/F b/F
+  new file mode 100644
+  examine changes to 'F'? [Ynesfdaq?] Y
+  
+  @@ -0,0 +1,1 @@
+  +F
+  record this change to 'F'? [Ynesfdaq?] Y
+  
+  no more change to split
+  $ hg log -G
+  @  changeset:   15:d4a000f63ee9
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  trouble:     unstable
+  |  summary:     fold2
+  |
+  o  changeset:   14:ec31316faa9d
+  |  parent:      4:868d2e0eb19c
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  trouble:     unstable
+  |  summary:     fold2
+  |
+  | o  changeset:   13:d0f33db50670
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  trouble:     unstable
+  | |  summary:     fold1
+  | |
+  | o  changeset:   12:7b3290f6e0a0
+  | |  parent:      2:c473644ee0e9
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  trouble:     unstable
+  | |  summary:     fold1
+  | |
+  | | o  changeset:   11:e036916b63ea
+  | | |  user:        test
+  | | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | | |  summary:     fold0
+  | | |
+  | | o  changeset:   10:19e14c8397fc
+  | | |  parent:      0:ea207398892e
+  | | |  user:        test
+  | | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | | |  summary:     fold0
+  | | |
+  x | |  changeset:   4:868d2e0eb19c
+  | | |  user:        test
+  | | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | | |  summary:     D
+  | | |
+  x | |  changeset:   3:a8df460dbbfe
+  |/ /   user:        test
+  | |    date:        Thu Jan 01 00:00:00 1970 +0000
+  | |    summary:     C
+  | |
+  x |  changeset:   2:c473644ee0e9
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     B
+  | |
+  x |  changeset:   1:2a34000d3544
+  |/   user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     A
+  |
+  o  changeset:   0:ea207398892e
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     ROOT
+  
+
+Connect them all
+----------------
+
+  $ hg prune -s 12 -r 11
+  1 changesets pruned
+  $ hg prune -s 14 -r 13
+  1 changesets pruned
+  $ hg log -G
+  @  changeset:   15:d4a000f63ee9
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  trouble:     unstable
+  |  summary:     fold2
+  |
+  o  changeset:   14:ec31316faa9d
+  |  parent:      4:868d2e0eb19c
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  trouble:     unstable
+  |  summary:     fold2
+  |
+  | o  changeset:   12:7b3290f6e0a0
+  | |  parent:      2:c473644ee0e9
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  trouble:     unstable
+  | |  summary:     fold1
+  | |
+  | | o  changeset:   10:19e14c8397fc
+  | | |  parent:      0:ea207398892e
+  | | |  user:        test
+  | | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | | |  summary:     fold0
+  | | |
+  x | |  changeset:   4:868d2e0eb19c
+  | | |  user:        test
+  | | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | | |  summary:     D
+  | | |
+  x | |  changeset:   3:a8df460dbbfe
+  |/ /   user:        test
+  | |    date:        Thu Jan 01 00:00:00 1970 +0000
+  | |    summary:     C
+  | |
+  x |  changeset:   2:c473644ee0e9
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     B
+  | |
+  x |  changeset:   1:2a34000d3544
+  |/   user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     A
+  |
+  o  changeset:   0:ea207398892e
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     ROOT
+  
+Actual Test
+===========
+
+Obslog should show a subset of the obs history, this test check that the
+walking algorithm works no matter the level of successors + precursors
+
+  $ hg obslog 12
+  o    7b3290f6e0a0 (12) fold1
+  |\
+  x |    d15d0ffc75f6 (8) fold1
+  |\ \     rewritten by test (*) as 7b3290f6e0a0, d0f33db50670 (glob)
+  | | |
+  | | x  e036916b63ea (11) fold0
+  | | |    rewritten by test (*) as 7b3290f6e0a0 (glob)
+  | | |
+  x | |  868d2e0eb19c (4) D
+   / /     rewritten by test (*) as d15d0ffc75f6 (glob)
+  | |
+  x |  a8df460dbbfe (3) C
+   /     rewritten by test (*) as d15d0ffc75f6 (glob)
+  |
+  x    b868bc49b0a4 (7) fold0
+  |\     rewritten by test (*) as 19e14c8397fc, e036916b63ea (glob)
+  | |
+  x |  2a34000d3544 (1) A
+   /     rewritten by test (*) as b868bc49b0a4 (glob)
+  |
+  x  c473644ee0e9 (2) B
+       rewritten by test (*) as b868bc49b0a4 (glob)
+  
+While with all option, we should see 15 changesets
+
+  $ hg obslog --all 15
+  o  19e14c8397fc (10) fold0
+  |
+  | o    7b3290f6e0a0 (12) fold1
+  | |\
+  | | | @  d4a000f63ee9 (15) fold2
+  | | | |
+  | | | | o  ec31316faa9d (14) fold2
+  | | | |/|
+  | | | x |    100cc25b765f (9) fold2
+  | | | |\ \     rewritten by test (*) as d4a000f63ee9, ec31316faa9d (glob)
+  | | | | | |
+  | +-------x  d0f33db50670 (13) fold1
+  | | | | |      rewritten by test (*) as ec31316faa9d (glob)
+  | | | | |
+  +---x | |  e036916b63ea (11) fold0
+  | |  / /     rewritten by test (*) as 7b3290f6e0a0 (glob)
+  | | | |
+  | | x |  0da815c333f6 (5) E
+  | |  /     rewritten by test (*) as 100cc25b765f (glob)
+  | | |
+  x | |    b868bc49b0a4 (7) fold0
+  |\ \ \     rewritten by test (*) as 19e14c8397fc, e036916b63ea (glob)
+  | | | |
+  | | x |    d15d0ffc75f6 (8) fold1
+  | | |\ \     rewritten by test (*) as 7b3290f6e0a0, d0f33db50670 (glob)
+  | | | | |
+  | | | | x  d9f908fde1a1 (6) F
+  | | | |      rewritten by test (*) as 100cc25b765f (glob)
+  | | | |
+  x | | |  2a34000d3544 (1) A
+   / / /     rewritten by test (*) as b868bc49b0a4 (glob)
+  | | |
+  | x |  868d2e0eb19c (4) D
+  |  /     rewritten by test (*) as d15d0ffc75f6 (glob)
+  | |
+  | x  a8df460dbbfe (3) C
+  |      rewritten by test (*) as d15d0ffc75f6 (glob)
+  |
+  x  c473644ee0e9 (2) B
+       rewritten by test (*) as b868bc49b0a4 (glob)
+  
--- a/tests/test-evolve-obshistory.t	Fri May 26 16:12:07 2017 +0200
+++ b/tests/test-evolve-obshistory.t	Tue May 23 19:48:04 2017 +0200
@@ -340,6 +340,15 @@
   x  471597cad322 (1) A0
        rewritten by test (*) as 337fec4d2edc, f257fde29c7a (glob)
   
+With the all option, it should show the three changesets
+  $ hg obslog --all 337fec4d2edc
+  o  337fec4d2edc (2) A0
+  |
+  | @  f257fde29c7a (3) A0
+  |/
+  x  471597cad322 (1) A0
+       rewritten by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+  
 Check that debugobshistory on the second successor after split show
 the revision plus the splitted one
   $ hg obslog f257fde29c7a
@@ -348,6 +357,24 @@
   x  471597cad322 (1) A0
        rewritten by test (*) as 337fec4d2edc, f257fde29c7a (glob)
   
+With the all option, it should show the three changesets
+  $ hg obslog f257fde29c7a --all
+  o  337fec4d2edc (2) A0
+  |
+  | @  f257fde29c7a (3) A0
+  |/
+  x  471597cad322 (1) A0
+       rewritten by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+  
+Obslog with all option all should also works on the splitted commit
+  $ hg obslog -a 471597cad322 --hidden
+  o  337fec4d2edc (2) A0
+  |
+  | @  f257fde29c7a (3) A0
+  |/
+  x  471597cad322 (1) A0
+       rewritten by test (*) as 337fec4d2edc, f257fde29c7a (glob)
+  
 Check that debugobshistory on both successors after split show
 a coherent graph
   $ hg obslog 'f257fde29c7a+337fec4d2edc'
@@ -524,6 +551,18 @@
   x  de7290d8b885 (1) A0
        rewritten by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
   
+  $ hg obslog de7290d8b885 --hidden --all
+  o  1ae8bc733a14 (4) A0
+  |
+  | o  337fec4d2edc (2) A0
+  |/
+  | @  c7f044602e9b (5) A0
+  |/
+  | o  f257fde29c7a (3) A0
+  |/
+  x  de7290d8b885 (1) A0
+       rewritten by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
+  
   $ hg obslog de7290d8b885 --hidden --no-graph -Tjson | python -m json.tool
   [
       {
@@ -597,6 +636,18 @@
   x  de7290d8b885 (1) A0
        rewritten by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
   
+  $ hg obslog 5 --all
+  o  1ae8bc733a14 (4) A0
+  |
+  | o  337fec4d2edc (2) A0
+  |/
+  | @  c7f044602e9b (5) A0
+  |/
+  | o  f257fde29c7a (3) A0
+  |/
+  x  de7290d8b885 (1) A0
+       rewritten by test (*) as 1ae8bc733a14, 337fec4d2edc, c7f044602e9b, f257fde29c7a (glob)
+  
   $ hg update de7290d8b885
   abort: hidden revision 'de7290d8b885'!
   (use --hidden to access hidden revisions; successors: 337fec4d2edc, f257fde29c7a and 2 more)
@@ -669,12 +720,32 @@
   x  471f378eab4c (1) A0
        rewritten by test (*) as eb5a0daa2192 (glob)
   
+Check that with all option, all changesets are shown
+  $ hg obslog --hidden --all 471f378eab4c
+  @    eb5a0daa2192 (3) C0
+  |\
+  x |  0dec01379d3b (2) B0
+   /     rewritten by test (*) as eb5a0daa2192 (glob)
+  |
+  x  471f378eab4c (1) A0
+       rewritten by test (*) as eb5a0daa2192 (glob)
+  
 Check that debugobshistory on the second folded revision show only
 the revision with the target
   $ hg obslog --hidden 0dec01379d3b
   x  0dec01379d3b (2) B0
        rewritten by test (*) as eb5a0daa2192 (glob)
   
+Check that with all option, all changesets are shown
+  $ hg obslog --hidden --all 0dec01379d3b
+  @    eb5a0daa2192 (3) C0
+  |\
+  x |  0dec01379d3b (2) B0
+   /     rewritten by test (*) as eb5a0daa2192 (glob)
+  |
+  x  471f378eab4c (1) A0
+       rewritten by test (*) as eb5a0daa2192 (glob)
+  
 Check that debugobshistory on the successor revision show a coherent
 graph
   $ hg obslog eb5a0daa2192
@@ -820,6 +891,17 @@
        rewritten by test (*) as 65b757b745b9 (glob)
        rewritten by test (*) as fdf9bde5129a (glob)
   
+
+Check that with all option, every changeset is shown
+  $ hg obslog --hidden --all 471f378eab4c
+  @  65b757b745b9 (3) A2
+  |
+  | o  fdf9bde5129a (2) A1
+  |/
+  x  471f378eab4c (1) A0
+       rewritten by test (*) as 65b757b745b9 (glob)
+       rewritten by test (*) as fdf9bde5129a (glob)
+  
   $ hg obslog --hidden 471f378eab4c --no-graph -Tjson | python -m json.tool
   [
       {
@@ -861,6 +943,17 @@
        rewritten by test (*) as 65b757b745b9 (glob)
        rewritten by test (*) as fdf9bde5129a (glob)
   
+
+Check that all option show all of them
+  $ hg obslog fdf9bde5129a -a
+  @  65b757b745b9 (3) A2
+  |
+  | o  fdf9bde5129a (2) A1
+  |/
+  x  471f378eab4c (1) A0
+       rewritten by test (*) as 65b757b745b9 (glob)
+       rewritten by test (*) as fdf9bde5129a (glob)
+  
 Check that debugobshistory on the second diverged revision show the revision
 and the diverent one
   $ hg obslog 65b757b745b9
@@ -870,6 +963,16 @@
        rewritten by test (*) as 65b757b745b9 (glob)
        rewritten by test (*) as fdf9bde5129a (glob)
   
+Check that all option show all of them
+  $ hg obslog 65b757b745b9 -a
+  @  65b757b745b9 (3) A2
+  |
+  | o  fdf9bde5129a (2) A1
+  |/
+  x  471f378eab4c (1) A0
+       rewritten by test (*) as 65b757b745b9 (glob)
+       rewritten by test (*) as fdf9bde5129a (glob)
+  
 Check that debugobshistory on the both diverged revision show a coherent
 graph
   $ hg obslog '65b757b745b9+fdf9bde5129a'
@@ -1017,6 +1120,19 @@
   x  0dec01379d3b (2) B0
        rewritten by test (*) as b7ea6d14e664 (glob)
   
+Check that obslog on ROOT with all option show everything
+  $ hg obslog 1 --hidden --all
+  @    eb5a0daa2192 (4) C0
+  |\
+  x |  471f378eab4c (1) A0
+   /     rewritten by test (*) as eb5a0daa2192 (glob)
+  |
+  x  b7ea6d14e664 (3) B1
+  |    rewritten by test (*) as eb5a0daa2192 (glob)
+  |
+  x  0dec01379d3b (2) B0
+       rewritten by test (*) as b7ea6d14e664 (glob)
+  
   $ hg obslog eb5a0daa2192 --no-graph -Tjson | python -m json.tool
   [
       {