tests/test-rebase-obsolete3.t
changeset 46829 13b200ffe8eb
parent 46803 32399d0813e0
child 46830 6648307d4fe8
equal deleted inserted replaced
46828:395cf404e76a 46829:13b200ffe8eb
       
     1 ==========================
       
     2 Test rebase with obsolete
       
     3 ==========================
       
     4 
       
     5 Enable obsolete
       
     6 
       
     7   $ cat >> $HGRCPATH << EOF
       
     8   > [command-templates]
       
     9   > log= {rev}:{node|short} {desc|firstline}{if(obsolete,' ({obsfate})')}
       
    10   > [experimental]
       
    11   > evolution.createmarkers=True
       
    12   > evolution.allowunstable=True
       
    13   > [phases]
       
    14   > publish=False
       
    15   > [extensions]
       
    16   > rebase=
       
    17   > drawdag=$TESTDIR/drawdag.py
       
    18   > strip=
       
    19   > EOF
       
    20 
       
    21 Divergence cases due to obsolete changesets
       
    22 -------------------------------------------
       
    23 
       
    24 We should ignore branches with unstable changesets when they are based on an
       
    25 obsolete changeset which successor is in rebase set.
       
    26 
       
    27   $ hg init divergence
       
    28   $ cd divergence
       
    29   $ cat >> .hg/hgrc << EOF
       
    30   > [extensions]
       
    31   > strip =
       
    32   > [alias]
       
    33   > strip = strip --no-backup --quiet
       
    34   > [templates]
       
    35   > instabilities = '{rev}:{node|short} {desc|firstline}{if(instabilities," ({instabilities})")}\n'
       
    36   > EOF
       
    37 
       
    38   $ hg debugdrawdag <<EOF
       
    39   >   e   f
       
    40   >   |   |
       
    41   >   d'  d # replace: d -> d'
       
    42   >    \ /
       
    43   >     c
       
    44   >     |
       
    45   >   x b
       
    46   >    \|
       
    47   >     a
       
    48   > EOF
       
    49   1 new orphan changesets
       
    50   $ hg log -G -r 'a'::
       
    51   *  7:1143e9adc121 f
       
    52   |
       
    53   | o  6:d60ebfa0f1cb e
       
    54   | |
       
    55   | o  5:027ad6c5830d d'
       
    56   | |
       
    57   x |  4:76be324c128b d (rewritten using replace as 5:027ad6c5830d)
       
    58   |/
       
    59   o  3:a82ac2b38757 c
       
    60   |
       
    61   | o  2:630d7c95eff7 x
       
    62   | |
       
    63   o |  1:488e1b7e7341 b
       
    64   |/
       
    65   o  0:b173517d0057 a
       
    66   
       
    67 
       
    68 Changeset d and its descendants are excluded to avoid divergence of d, which
       
    69 would occur because the successor of d (d') is also in rebaseset. As a
       
    70 consequence f (descendant of d) is left behind.
       
    71 
       
    72   $ hg rebase -b 'e' -d 'x'
       
    73   rebasing 1:488e1b7e7341 b "b"
       
    74   rebasing 3:a82ac2b38757 c "c"
       
    75   rebasing 5:027ad6c5830d d' "d'"
       
    76   rebasing 6:d60ebfa0f1cb e "e"
       
    77   note: not rebasing 4:76be324c128b d "d" and its descendants as this would cause divergence
       
    78   $ hg log -G -r 'a'::
       
    79   o  11:eb6d63fc4ed5 e
       
    80   |
       
    81   o  10:44d8c724a70c d'
       
    82   |
       
    83   o  9:d008e6b4d3fd c
       
    84   |
       
    85   o  8:67e8f4a16c49 b
       
    86   |
       
    87   | *  7:1143e9adc121 f
       
    88   | |
       
    89   | | x  6:d60ebfa0f1cb e (rewritten using rebase as 11:eb6d63fc4ed5)
       
    90   | | |
       
    91   | | x  5:027ad6c5830d d' (rewritten using rebase as 10:44d8c724a70c)
       
    92   | | |
       
    93   | x |  4:76be324c128b d (rewritten using replace as 5:027ad6c5830d)
       
    94   | |/
       
    95   | x  3:a82ac2b38757 c (rewritten using rebase as 9:d008e6b4d3fd)
       
    96   | |
       
    97   o |  2:630d7c95eff7 x
       
    98   | |
       
    99   | x  1:488e1b7e7341 b (rewritten using rebase as 8:67e8f4a16c49)
       
   100   |/
       
   101   o  0:b173517d0057 a
       
   102   
       
   103   $ hg strip -r 8:
       
   104   $ hg log -G -r 'a'::
       
   105   *  7:1143e9adc121 f
       
   106   |
       
   107   | o  6:d60ebfa0f1cb e
       
   108   | |
       
   109   | o  5:027ad6c5830d d'
       
   110   | |
       
   111   x |  4:76be324c128b d (rewritten using replace as 5:027ad6c5830d)
       
   112   |/
       
   113   o  3:a82ac2b38757 c
       
   114   |
       
   115   | o  2:630d7c95eff7 x
       
   116   | |
       
   117   o |  1:488e1b7e7341 b
       
   118   |/
       
   119   o  0:b173517d0057 a
       
   120   
       
   121 
       
   122 If the rebase set has an obsolete (d) with a successor (d') outside the rebase
       
   123 set and none in destination, we still get the divergence warning.
       
   124 By allowing divergence, we can perform the rebase.
       
   125 
       
   126   $ hg rebase -r 'c'::'f' -d 'x'
       
   127   abort: this rebase will cause divergences from: 76be324c128b
       
   128   (to force the rebase please set experimental.evolution.allowdivergence=True)
       
   129   [20]
       
   130   $ hg rebase --config experimental.evolution.allowdivergence=true -r 'c'::'f' -d 'x'
       
   131   rebasing 3:a82ac2b38757 c "c"
       
   132   rebasing 4:76be324c128b d "d"
       
   133   rebasing 7:1143e9adc121 f tip "f"
       
   134   1 new orphan changesets
       
   135   2 new content-divergent changesets
       
   136   $ hg log -G -r 'a':: -T instabilities
       
   137   o  10:e1744ea07510 f
       
   138   |
       
   139   *  9:e2b36ea9a0a0 d (content-divergent)
       
   140   |
       
   141   o  8:6a0376de376e c
       
   142   |
       
   143   | x  7:1143e9adc121 f
       
   144   | |
       
   145   | | *  6:d60ebfa0f1cb e (orphan)
       
   146   | | |
       
   147   | | *  5:027ad6c5830d d' (orphan content-divergent)
       
   148   | | |
       
   149   | x |  4:76be324c128b d
       
   150   | |/
       
   151   | x  3:a82ac2b38757 c
       
   152   | |
       
   153   o |  2:630d7c95eff7 x
       
   154   | |
       
   155   | o  1:488e1b7e7341 b
       
   156   |/
       
   157   o  0:b173517d0057 a
       
   158   
       
   159   $ hg strip -r 8:
       
   160 
       
   161 (Not skipping obsoletes means that divergence is allowed.)
       
   162 
       
   163   $ hg rebase --config experimental.rebaseskipobsolete=false -r 'c'::'f' -d 'x'
       
   164   rebasing 3:a82ac2b38757 c "c"
       
   165   rebasing 4:76be324c128b d "d"
       
   166   rebasing 7:1143e9adc121 f tip "f"
       
   167   1 new orphan changesets
       
   168   2 new content-divergent changesets
       
   169 
       
   170   $ hg strip -r 0:
       
   171 
       
   172 Similar test on a more complex graph
       
   173 
       
   174   $ hg debugdrawdag <<EOF
       
   175   >       g
       
   176   >       |
       
   177   >   f   e
       
   178   >   |   |
       
   179   >   e'  d # replace: e -> e'
       
   180   >    \ /
       
   181   >     c
       
   182   >     |
       
   183   >   x b
       
   184   >    \|
       
   185   >     a
       
   186   > EOF
       
   187   1 new orphan changesets
       
   188   $ hg log -G -r 'a':
       
   189   *  8:2876ce66c6eb g
       
   190   |
       
   191   | o  7:3ffec603ab53 f
       
   192   | |
       
   193   x |  6:e36fae928aec e (rewritten using replace as 5:63324dc512ea)
       
   194   | |
       
   195   | o  5:63324dc512ea e'
       
   196   | |
       
   197   o |  4:76be324c128b d
       
   198   |/
       
   199   o  3:a82ac2b38757 c
       
   200   |
       
   201   | o  2:630d7c95eff7 x
       
   202   | |
       
   203   o |  1:488e1b7e7341 b
       
   204   |/
       
   205   o  0:b173517d0057 a
       
   206   
       
   207   $ hg rebase -b 'f' -d 'x'
       
   208   rebasing 1:488e1b7e7341 b "b"
       
   209   rebasing 3:a82ac2b38757 c "c"
       
   210   rebasing 5:63324dc512ea e' "e'"
       
   211   rebasing 7:3ffec603ab53 f "f"
       
   212   rebasing 4:76be324c128b d "d"
       
   213   note: not rebasing 6:e36fae928aec e "e" and its descendants as this would cause divergence
       
   214   $ hg log -G -r 'a':
       
   215   o  13:a1707a5b7c2c d
       
   216   |
       
   217   | o  12:ef6251596616 f
       
   218   | |
       
   219   | o  11:b6f172e64af9 e'
       
   220   |/
       
   221   o  10:d008e6b4d3fd c
       
   222   |
       
   223   o  9:67e8f4a16c49 b
       
   224   |
       
   225   | *  8:2876ce66c6eb g
       
   226   | |
       
   227   | | x  7:3ffec603ab53 f (rewritten using rebase as 12:ef6251596616)
       
   228   | | |
       
   229   | x |  6:e36fae928aec e (rewritten using replace as 5:63324dc512ea)
       
   230   | | |
       
   231   | | x  5:63324dc512ea e' (rewritten using rebase as 11:b6f172e64af9)
       
   232   | | |
       
   233   | x |  4:76be324c128b d (rewritten using rebase as 13:a1707a5b7c2c)
       
   234   | |/
       
   235   | x  3:a82ac2b38757 c (rewritten using rebase as 10:d008e6b4d3fd)
       
   236   | |
       
   237   o |  2:630d7c95eff7 x
       
   238   | |
       
   239   | x  1:488e1b7e7341 b (rewritten using rebase as 9:67e8f4a16c49)
       
   240   |/
       
   241   o  0:b173517d0057 a
       
   242   
       
   243 
       
   244 issue5782
       
   245   $ hg strip -r 0:
       
   246   $ hg debugdrawdag <<EOF
       
   247   >       d
       
   248   >       |
       
   249   >   c1  c # replace: c -> c1
       
   250   >    \ /
       
   251   >     b
       
   252   >     |
       
   253   >     a
       
   254   > EOF
       
   255   1 new orphan changesets
       
   256   $ hg debugobsolete `hg log -T "{node}" --hidden -r 'desc("c1")'`
       
   257   1 new obsolescence markers
       
   258   obsoleted 1 changesets
       
   259   $ hg log -G -r 'a': --hidden
       
   260   *  4:76be324c128b d
       
   261   |
       
   262   | x  3:ef8a456de8fa c1 (pruned)
       
   263   | |
       
   264   x |  2:a82ac2b38757 c (rewritten using replace as 3:ef8a456de8fa)
       
   265   |/
       
   266   o  1:488e1b7e7341 b
       
   267   |
       
   268   o  0:b173517d0057 a
       
   269   
       
   270   $ hg rebase -d 0 -r 2
       
   271   note: not rebasing 2:a82ac2b38757 c "c", it has no successor
       
   272   $ hg log -G -r 'a': --hidden
       
   273   *  4:76be324c128b d
       
   274   |
       
   275   | x  3:ef8a456de8fa c1 (pruned)
       
   276   | |
       
   277   x |  2:a82ac2b38757 c (rewritten using replace as 3:ef8a456de8fa)
       
   278   |/
       
   279   o  1:488e1b7e7341 b
       
   280   |
       
   281   o  0:b173517d0057 a
       
   282   
       
   283   $ cd ..
       
   284 
       
   285 Rebase merge where successor of one parent is equal to destination (issue5198)
       
   286 
       
   287   $ hg init p1-succ-is-dest
       
   288   $ cd p1-succ-is-dest
       
   289 
       
   290   $ hg debugdrawdag <<EOF
       
   291   >   F
       
   292   >  /|
       
   293   > E D B # replace: D -> B
       
   294   >  \|/
       
   295   >   A
       
   296   > EOF
       
   297   1 new orphan changesets
       
   298 
       
   299   $ hg rebase -d B -s D
       
   300   note: not rebasing 2:b18e25de2cf5 D "D", already in destination as 1:112478962961 B "B"
       
   301   rebasing 4:66f1a38021c9 F tip "F"
       
   302   $ hg log -G
       
   303   o    5:50e9d60b99c6 F
       
   304   |\
       
   305   | | x  4:66f1a38021c9 F (rewritten using rebase as 5:50e9d60b99c6)
       
   306   | |/|
       
   307   | o |  3:7fb047a69f22 E
       
   308   | | |
       
   309   | | x  2:b18e25de2cf5 D (rewritten using replace as 1:112478962961)
       
   310   | |/
       
   311   o |  1:112478962961 B
       
   312   |/
       
   313   o  0:426bada5c675 A
       
   314   
       
   315   $ cd ..
       
   316 
       
   317 Rebase merge where successor of other parent is equal to destination
       
   318 
       
   319   $ hg init p2-succ-is-dest
       
   320   $ cd p2-succ-is-dest
       
   321 
       
   322   $ hg debugdrawdag <<EOF
       
   323   >   F
       
   324   >  /|
       
   325   > E D B # replace: E -> B
       
   326   >  \|/
       
   327   >   A
       
   328   > EOF
       
   329   1 new orphan changesets
       
   330 
       
   331   $ hg rebase -d B -s E
       
   332   note: not rebasing 3:7fb047a69f22 E "E", already in destination as 1:112478962961 B "B"
       
   333   rebasing 4:66f1a38021c9 F tip "F"
       
   334   $ hg log -G
       
   335   o    5:aae1787dacee F
       
   336   |\
       
   337   | | x  4:66f1a38021c9 F (rewritten using rebase as 5:aae1787dacee)
       
   338   | |/|
       
   339   | | x  3:7fb047a69f22 E (rewritten using replace as 1:112478962961)
       
   340   | | |
       
   341   | o |  2:b18e25de2cf5 D
       
   342   | |/
       
   343   o /  1:112478962961 B
       
   344   |/
       
   345   o  0:426bada5c675 A
       
   346   
       
   347   $ cd ..
       
   348 
       
   349 Rebase merge where successor of one parent is ancestor of destination
       
   350 
       
   351   $ hg init p1-succ-in-dest
       
   352   $ cd p1-succ-in-dest
       
   353 
       
   354   $ hg debugdrawdag <<EOF
       
   355   >   F C
       
   356   >  /| |
       
   357   > E D B # replace: D -> B
       
   358   >  \|/
       
   359   >   A
       
   360   > EOF
       
   361   1 new orphan changesets
       
   362 
       
   363   $ hg rebase -d C -s D
       
   364   note: not rebasing 2:b18e25de2cf5 D "D", already in destination as 1:112478962961 B "B"
       
   365   rebasing 5:66f1a38021c9 F tip "F"
       
   366 
       
   367   $ hg log -G
       
   368   o    6:0913febf6439 F
       
   369   |\
       
   370   +---x  5:66f1a38021c9 F (rewritten using rebase as 6:0913febf6439)
       
   371   | | |
       
   372   | o |  4:26805aba1e60 C
       
   373   | | |
       
   374   o | |  3:7fb047a69f22 E
       
   375   | | |
       
   376   +---x  2:b18e25de2cf5 D (rewritten using replace as 1:112478962961)
       
   377   | |
       
   378   | o  1:112478962961 B
       
   379   |/
       
   380   o  0:426bada5c675 A
       
   381   
       
   382   $ cd ..
       
   383 
       
   384 Rebase merge where successor of other parent is ancestor of destination
       
   385 
       
   386   $ hg init p2-succ-in-dest
       
   387   $ cd p2-succ-in-dest
       
   388 
       
   389   $ hg debugdrawdag <<EOF
       
   390   >   F C
       
   391   >  /| |
       
   392   > E D B # replace: E -> B
       
   393   >  \|/
       
   394   >   A
       
   395   > EOF
       
   396   1 new orphan changesets
       
   397 
       
   398   $ hg rebase -d C -s E
       
   399   note: not rebasing 3:7fb047a69f22 E "E", already in destination as 1:112478962961 B "B"
       
   400   rebasing 5:66f1a38021c9 F tip "F"
       
   401   $ hg log -G
       
   402   o    6:c6ab0cc6d220 F
       
   403   |\
       
   404   +---x  5:66f1a38021c9 F (rewritten using rebase as 6:c6ab0cc6d220)
       
   405   | | |
       
   406   | o |  4:26805aba1e60 C
       
   407   | | |
       
   408   | | x  3:7fb047a69f22 E (rewritten using replace as 1:112478962961)
       
   409   | | |
       
   410   o---+  2:b18e25de2cf5 D
       
   411    / /
       
   412   o /  1:112478962961 B
       
   413   |/
       
   414   o  0:426bada5c675 A
       
   415   
       
   416   $ cd ..
       
   417 
       
   418 Rebase merge where successor of one parent is ancestor of destination
       
   419 
       
   420   $ hg init p1-succ-in-dest-b
       
   421   $ cd p1-succ-in-dest-b
       
   422 
       
   423   $ hg debugdrawdag <<EOF
       
   424   >   F C
       
   425   >  /| |
       
   426   > E D B # replace: E -> B
       
   427   >  \|/
       
   428   >   A
       
   429   > EOF
       
   430   1 new orphan changesets
       
   431 
       
   432   $ hg rebase -d C -b F
       
   433   rebasing 2:b18e25de2cf5 D "D"
       
   434   note: not rebasing 3:7fb047a69f22 E "E", already in destination as 1:112478962961 B "B"
       
   435   rebasing 5:66f1a38021c9 F tip "F"
       
   436   note: not rebasing 5:66f1a38021c9 F tip "F", its destination already has all its changes
       
   437   $ hg log -G
       
   438   o  6:8f47515dda15 D
       
   439   |
       
   440   | x    5:66f1a38021c9 F (pruned using rebase)
       
   441   | |\
       
   442   o | |  4:26805aba1e60 C
       
   443   | | |
       
   444   | | x  3:7fb047a69f22 E (rewritten using replace as 1:112478962961)
       
   445   | | |
       
   446   | x |  2:b18e25de2cf5 D (rewritten using rebase as 6:8f47515dda15)
       
   447   | |/
       
   448   o /  1:112478962961 B
       
   449   |/
       
   450   o  0:426bada5c675 A
       
   451   
       
   452   $ cd ..
       
   453 
       
   454 Rebase merge where successor of other parent is ancestor of destination
       
   455 
       
   456   $ hg init p2-succ-in-dest-b
       
   457   $ cd p2-succ-in-dest-b
       
   458 
       
   459   $ hg debugdrawdag <<EOF
       
   460   >   F C
       
   461   >  /| |
       
   462   > E D B # replace: D -> B
       
   463   >  \|/
       
   464   >   A
       
   465   > EOF
       
   466   1 new orphan changesets
       
   467 
       
   468   $ hg rebase -d C -b F
       
   469   note: not rebasing 2:b18e25de2cf5 D "D", already in destination as 1:112478962961 B "B"
       
   470   rebasing 3:7fb047a69f22 E "E"
       
   471   rebasing 5:66f1a38021c9 F tip "F"
       
   472   note: not rebasing 5:66f1a38021c9 F tip "F", its destination already has all its changes
       
   473 
       
   474   $ hg log -G
       
   475   o  6:533690786a86 E
       
   476   |
       
   477   | x    5:66f1a38021c9 F (pruned using rebase)
       
   478   | |\
       
   479   o | |  4:26805aba1e60 C
       
   480   | | |
       
   481   | | x  3:7fb047a69f22 E (rewritten using rebase as 6:533690786a86)
       
   482   | | |
       
   483   | x |  2:b18e25de2cf5 D (rewritten using replace as 1:112478962961)
       
   484   | |/
       
   485   o /  1:112478962961 B
       
   486   |/
       
   487   o  0:426bada5c675 A
       
   488   
       
   489   $ cd ..
       
   490 
       
   491 Rebase merge where extinct node has successor that is not an ancestor of
       
   492 destination
       
   493 
       
   494   $ hg init extinct-with-succ-not-in-dest
       
   495   $ cd extinct-with-succ-not-in-dest
       
   496 
       
   497   $ hg debugdrawdag <<EOF
       
   498   > E C # replace: C -> E
       
   499   > | |
       
   500   > D B
       
   501   > |/
       
   502   > A
       
   503   > EOF
       
   504 
       
   505   $ hg rebase -d D -s B
       
   506   rebasing 1:112478962961 B "B"
       
   507   note: not rebasing 3:26805aba1e60 C "C" and its descendants as this would cause divergence
       
   508 
       
   509   $ cd ..
       
   510 
       
   511   $ hg init p2-succ-in-dest-c
       
   512   $ cd p2-succ-in-dest-c
       
   513 
       
   514 The scenario here was that B::D were developed on default.  B was queued on
       
   515 stable, but amended before being push to hg-committed.  C was queued on default,
       
   516 along with unrelated J.
       
   517 
       
   518   $ hg debugdrawdag <<EOF
       
   519   > J
       
   520   > |
       
   521   > F
       
   522   > |
       
   523   > E
       
   524   > | D
       
   525   > | |
       
   526   > | C      # replace: C -> F
       
   527   > | |  H I # replace: B -> H -> I
       
   528   > | B  |/
       
   529   > |/   G
       
   530   > A
       
   531   > EOF
       
   532   1 new orphan changesets
       
   533 
       
   534 This strip seems to be the key to avoid an early divergence warning.
       
   535   $ hg --config extensions.strip= --hidden strip -qr H
       
   536   1 new orphan changesets
       
   537 
       
   538   $ hg rebase -b 'desc("D")' -d 'desc("J")'
       
   539   abort: this rebase will cause divergences from: 112478962961
       
   540   (to force the rebase please set experimental.evolution.allowdivergence=True)
       
   541   [20]
       
   542 
       
   543 Rebase merge where both parents have successors in destination
       
   544 
       
   545   $ hg init p12-succ-in-dest
       
   546   $ cd p12-succ-in-dest
       
   547   $ hg debugdrawdag <<'EOS'
       
   548   >   E   F
       
   549   >  /|  /|  # replace: A -> C
       
   550   > A B C D  # replace: B -> D
       
   551   > | |
       
   552   > X Y
       
   553   > EOS
       
   554   1 new orphan changesets
       
   555   $ hg rebase -r A+B+E -d F
       
   556   note: not rebasing 4:a3d17304151f A "A", already in destination as 0:96cc3511f894 C "C"
       
   557   note: not rebasing 5:b23a2cc00842 B "B", already in destination as 1:058c1e1fb10a D "D"
       
   558   rebasing 7:dac5d11c5a7d E tip "E"
       
   559   abort: rebasing 7:dac5d11c5a7d will include unwanted changes from 3:59c792af609c, 5:b23a2cc00842 or 2:ba2b7fa7166d, 4:a3d17304151f
       
   560   [10]
       
   561   $ cd ..
       
   562 
       
   563 Rebase a non-clean merge. One parent has successor in destination, the other
       
   564 parent moves as requested.
       
   565 
       
   566   $ hg init p1-succ-p2-move
       
   567   $ cd p1-succ-p2-move
       
   568   $ hg debugdrawdag <<'EOS'
       
   569   >   D Z
       
   570   >  /| | # replace: A -> C
       
   571   > A B C # D/D = D
       
   572   > EOS
       
   573   1 new orphan changesets
       
   574   $ hg rebase -r A+B+D -d Z
       
   575   note: not rebasing 0:426bada5c675 A "A", already in destination as 2:96cc3511f894 C "C"
       
   576   rebasing 1:fc2b737bb2e5 B "B"
       
   577   rebasing 3:b8ed089c80ad D "D"
       
   578 
       
   579   $ rm .hg/localtags
       
   580   $ hg log -G
       
   581   o  6:e4f78693cc88 D
       
   582   |
       
   583   o  5:76840d832e98 B
       
   584   |
       
   585   o  4:50e41c1f3950 Z
       
   586   |
       
   587   o  2:96cc3511f894 C
       
   588   
       
   589   $ hg files -r tip
       
   590   B
       
   591   C
       
   592   D
       
   593   Z
       
   594 
       
   595   $ cd ..
       
   596 
       
   597   $ hg init p1-move-p2-succ
       
   598   $ cd p1-move-p2-succ
       
   599   $ hg debugdrawdag <<'EOS'
       
   600   >   D Z
       
   601   >  /| |  # replace: B -> C
       
   602   > A B C  # D/D = D
       
   603   > EOS
       
   604   1 new orphan changesets
       
   605   $ hg rebase -r B+A+D -d Z
       
   606   rebasing 0:426bada5c675 A "A"
       
   607   note: not rebasing 1:fc2b737bb2e5 B "B", already in destination as 2:96cc3511f894 C "C"
       
   608   rebasing 3:b8ed089c80ad D "D"
       
   609 
       
   610   $ rm .hg/localtags
       
   611   $ hg log -G
       
   612   o  6:1b355ed94d82 D
       
   613   |
       
   614   o  5:a81a74d764a6 A
       
   615   |
       
   616   o  4:50e41c1f3950 Z
       
   617   |
       
   618   o  2:96cc3511f894 C
       
   619   
       
   620   $ hg files -r tip
       
   621   A
       
   622   C
       
   623   D
       
   624   Z
       
   625 
       
   626   $ cd ..