tests/test-obsolete-divergent.t
branchstable
changeset 587 8152fedbac65
child 623 07d813af96c4
child 624 ce46d1624d4a
equal deleted inserted replaced
586:f01721161532 587:8152fedbac65
       
     1 Test file decicated to testing the divergent troubles from obsolete changeset.
       
     2 
       
     3 This is the most complexe troubles from far so we isolate it in a dedicated
       
     4 file.
       
     5 
       
     6 Enable obsolete
       
     7 
       
     8   $ cat >> $HGRCPATH << EOF
       
     9   > [ui]
       
    10   > logtemplate = {rev}:{node|short} {desc}\n
       
    11   > [alias]
       
    12   > debugobsolete = debugobsolete -d '0 0'
       
    13   > [phases]
       
    14   > publish=False
       
    15   > [extensions]
       
    16   > rebase=
       
    17   > EOF
       
    18   $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
       
    19 
       
    20 
       
    21   $ mkcommit() {
       
    22   >    echo "$1" > "$1"
       
    23   >    hg add "$1"
       
    24   >    hg ci -m "$1"
       
    25   > }
       
    26   $ getid() {
       
    27   >    hg id --debug -ir "desc('$1')"
       
    28   > }
       
    29 
       
    30 setup repo
       
    31 
       
    32   $ hg init reference
       
    33   $ cd reference
       
    34   $ mkcommit base
       
    35   $ mkcommit A_0
       
    36   $ hg up 0
       
    37   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
    38   $ mkcommit A_1
       
    39   created new head
       
    40   $ hg up 0
       
    41   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
    42   $ mkcommit A_2
       
    43   created new head
       
    44   $ hg up 0
       
    45   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
    46   $ cd ..
       
    47 
       
    48 
       
    49   $ newcase() {
       
    50   >    hg clone -u 0 -q reference $1
       
    51   >    cd $1
       
    52   > }
       
    53 
       
    54 direct divergence
       
    55 -----------------
       
    56 
       
    57 A_1 have two direct and divergent successors A_1 and A_1
       
    58 
       
    59   $ newcase direct
       
    60   $ hg debugobsolete `getid A_0` `getid A_1`
       
    61   $ hg debugobsolete `getid A_0` `getid A_2`
       
    62   $ hg log -G --hidden
       
    63   o  3:392fd25390da A_2
       
    64   |
       
    65   | o  2:82623d38b9ba A_1
       
    66   |/
       
    67   | x  1:007dc284c1f8 A_0
       
    68   |/
       
    69   @  0:d20a80d4def3 base
       
    70   
       
    71   $ hg debugsuccessorssets 'all()'
       
    72   d20a80d4def3
       
    73       d20a80d4def3
       
    74   007dc284c1f8
       
    75       392fd25390da
       
    76       82623d38b9ba
       
    77   82623d38b9ba
       
    78       82623d38b9ba
       
    79   392fd25390da
       
    80       392fd25390da
       
    81   $ hg log -r 'divergent()'
       
    82   2:82623d38b9ba A_1
       
    83   3:392fd25390da A_2
       
    84 
       
    85 check that mercurial refuse to push
       
    86 
       
    87   $ hg init ../other
       
    88   $ hg push ../other
       
    89   pushing to ../other
       
    90   searching for changes
       
    91   abort: push includes a divergent changeset: 82623d38b9ba!
       
    92   (use 'hg evolve' to get a stable history or --force to ignore warnings)
       
    93   [255]
       
    94 
       
    95   $ cd ..
       
    96 
       
    97 
       
    98 indirect divergence with known changeset
       
    99 -------------------------------------------
       
   100 
       
   101   $ newcase indirect_known
       
   102   $ hg debugobsolete `getid A_0` `getid A_1`
       
   103   $ hg debugobsolete `getid A_0` `getid A_2`
       
   104   $ mkcommit A_3
       
   105   created new head
       
   106   $ hg debugobsolete `getid A_2` `getid A_3`
       
   107   $ hg log -G --hidden
       
   108   @  4:01f36c5a8fda A_3
       
   109   |
       
   110   | x  3:392fd25390da A_2
       
   111   |/
       
   112   | o  2:82623d38b9ba A_1
       
   113   |/
       
   114   | x  1:007dc284c1f8 A_0
       
   115   |/
       
   116   o  0:d20a80d4def3 base
       
   117   
       
   118   $ hg debugsuccessorssets 'all()'
       
   119   d20a80d4def3
       
   120       d20a80d4def3
       
   121   007dc284c1f8
       
   122       01f36c5a8fda
       
   123       82623d38b9ba
       
   124   82623d38b9ba
       
   125       82623d38b9ba
       
   126   392fd25390da
       
   127       01f36c5a8fda
       
   128   01f36c5a8fda
       
   129       01f36c5a8fda
       
   130   $ hg log -r 'divergent()'
       
   131   2:82623d38b9ba A_1
       
   132   4:01f36c5a8fda A_3
       
   133   $ cd ..
       
   134 
       
   135 
       
   136 indirect divergence with known changeset
       
   137 -------------------------------------------
       
   138 
       
   139   $ newcase indirect_unknown
       
   140   $ hg debugobsolete `getid A_0` aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
       
   141   $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid A_1`
       
   142   $ hg debugobsolete `getid A_0` `getid A_2`
       
   143   $ hg log -G --hidden
       
   144   o  3:392fd25390da A_2
       
   145   |
       
   146   | o  2:82623d38b9ba A_1
       
   147   |/
       
   148   | x  1:007dc284c1f8 A_0
       
   149   |/
       
   150   @  0:d20a80d4def3 base
       
   151   
       
   152   $ hg debugsuccessorssets 'all()'
       
   153   d20a80d4def3
       
   154       d20a80d4def3
       
   155   007dc284c1f8
       
   156       392fd25390da
       
   157       82623d38b9ba
       
   158   82623d38b9ba
       
   159       82623d38b9ba
       
   160   392fd25390da
       
   161       392fd25390da
       
   162   $ hg log -r 'divergent()'
       
   163   2:82623d38b9ba A_1
       
   164   3:392fd25390da A_2
       
   165   $ cd ..
       
   166 
       
   167 do not take unknown node in account if they are final
       
   168 -----------------------------------------------------
       
   169 
       
   170   $ newcase final-unknown
       
   171   $ hg debugobsolete `getid A_0` `getid A_1`
       
   172   $ hg debugobsolete `getid A_1` `getid A_2`
       
   173   $ hg debugobsolete `getid A_0` bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
       
   174   $ hg debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccc
       
   175   $ hg debugobsolete `getid A_1` dddddddddddddddddddddddddddddddddddddddd
       
   176 
       
   177   $ hg debugsuccessorssets 'desc('A_0')'
       
   178   007dc284c1f8
       
   179       392fd25390da
       
   180 
       
   181   $ cd ..
       
   182 
       
   183 divergence that converge again is not divergence anymore
       
   184 -----------------------------------------------------
       
   185 
       
   186   $ newcase converged_divergence
       
   187   $ hg debugobsolete `getid A_0` `getid A_1`
       
   188   $ hg debugobsolete `getid A_0` `getid A_2`
       
   189   $ mkcommit A_3
       
   190   created new head
       
   191   $ hg debugobsolete `getid A_1` `getid A_3`
       
   192   $ hg debugobsolete `getid A_2` `getid A_3`
       
   193   $ hg log -G --hidden
       
   194   @  4:01f36c5a8fda A_3
       
   195   |
       
   196   | x  3:392fd25390da A_2
       
   197   |/
       
   198   | x  2:82623d38b9ba A_1
       
   199   |/
       
   200   | x  1:007dc284c1f8 A_0
       
   201   |/
       
   202   o  0:d20a80d4def3 base
       
   203   
       
   204   $ hg debugsuccessorssets 'all()'
       
   205   d20a80d4def3
       
   206       d20a80d4def3
       
   207   007dc284c1f8
       
   208       01f36c5a8fda
       
   209   82623d38b9ba
       
   210       01f36c5a8fda
       
   211   392fd25390da
       
   212       01f36c5a8fda
       
   213   01f36c5a8fda
       
   214       01f36c5a8fda
       
   215   $ hg log -r 'divergent()'
       
   216   $ cd ..
       
   217 
       
   218 split is not divergences
       
   219 -----------------------------
       
   220 
       
   221   $ newcase split
       
   222   $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
       
   223   $ hg log -G --hidden
       
   224   o  3:392fd25390da A_2
       
   225   |
       
   226   | o  2:82623d38b9ba A_1
       
   227   |/
       
   228   | x  1:007dc284c1f8 A_0
       
   229   |/
       
   230   @  0:d20a80d4def3 base
       
   231   
       
   232   $ hg debugsuccessorssets 'all()'
       
   233   d20a80d4def3
       
   234       d20a80d4def3
       
   235   007dc284c1f8
       
   236       82623d38b9ba 392fd25390da
       
   237   82623d38b9ba
       
   238       82623d38b9ba
       
   239   392fd25390da
       
   240       392fd25390da
       
   241   $ hg log -r 'divergent()'
       
   242 
       
   243 Even when subsequente rewriting happen
       
   244 
       
   245   $ mkcommit A_3
       
   246   created new head
       
   247   $ hg debugobsolete `getid A_1` `getid A_3`
       
   248   $ hg up 0
       
   249   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   250   $ mkcommit A_4
       
   251   created new head
       
   252   $ hg debugobsolete `getid A_2` `getid A_4`
       
   253   $ hg up 0
       
   254   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   255   $ mkcommit A_5
       
   256   created new head
       
   257   $ hg debugobsolete `getid A_4` `getid A_5`
       
   258   $ hg log -G --hidden
       
   259   @  6:e442cfc57690 A_5
       
   260   |
       
   261   | x  5:6a411f0d7a0a A_4
       
   262   |/
       
   263   | o  4:01f36c5a8fda A_3
       
   264   |/
       
   265   | x  3:392fd25390da A_2
       
   266   |/
       
   267   | x  2:82623d38b9ba A_1
       
   268   |/
       
   269   | x  1:007dc284c1f8 A_0
       
   270   |/
       
   271   o  0:d20a80d4def3 base
       
   272   
       
   273   $ hg debugsuccessorssets 'all()'
       
   274   d20a80d4def3
       
   275       d20a80d4def3
       
   276   007dc284c1f8
       
   277       01f36c5a8fda e442cfc57690
       
   278   82623d38b9ba
       
   279       01f36c5a8fda
       
   280   392fd25390da
       
   281       e442cfc57690
       
   282   01f36c5a8fda
       
   283       01f36c5a8fda
       
   284   6a411f0d7a0a
       
   285       e442cfc57690
       
   286   e442cfc57690
       
   287       e442cfc57690
       
   288   $ hg log -r 'divergent()'
       
   289 
       
   290 Check more complexe obsolescence graft (with divergence)
       
   291 
       
   292   $ mkcommit B_0; hg up 0
       
   293   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
       
   294   $ hg debugobsolete `getid B_0` `getid A_2`
       
   295   $ mkcommit A_7; hg up 0
       
   296   created new head
       
   297   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   298   $ mkcommit A_8; hg up 0
       
   299   created new head
       
   300   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   301   $ hg debugobsolete `getid A_5` `getid A_7` `getid A_8`
       
   302   $ mkcommit A_9; hg up 0
       
   303   created new head
       
   304   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   305   $ hg debugobsolete `getid A_5` `getid A_9`
       
   306   $ hg log -G --hidden
       
   307   o  10:bed64f5d2f5a A_9
       
   308   |
       
   309   | o  9:14608b260df8 A_8
       
   310   |/
       
   311   | o  8:7ae126973a96 A_7
       
   312   |/
       
   313   | x  7:3750ebee865d B_0
       
   314   | |
       
   315   | x  6:e442cfc57690 A_5
       
   316   |/
       
   317   | x  5:6a411f0d7a0a A_4
       
   318   |/
       
   319   | o  4:01f36c5a8fda A_3
       
   320   |/
       
   321   | x  3:392fd25390da A_2
       
   322   |/
       
   323   | x  2:82623d38b9ba A_1
       
   324   |/
       
   325   | x  1:007dc284c1f8 A_0
       
   326   |/
       
   327   @  0:d20a80d4def3 base
       
   328   
       
   329   $ hg debugsuccessorssets 'all()'
       
   330   d20a80d4def3
       
   331       d20a80d4def3
       
   332   007dc284c1f8
       
   333       01f36c5a8fda bed64f5d2f5a
       
   334       01f36c5a8fda 7ae126973a96 14608b260df8
       
   335   82623d38b9ba
       
   336       01f36c5a8fda
       
   337   392fd25390da
       
   338       bed64f5d2f5a
       
   339       7ae126973a96 14608b260df8
       
   340   01f36c5a8fda
       
   341       01f36c5a8fda
       
   342   6a411f0d7a0a
       
   343       bed64f5d2f5a
       
   344       7ae126973a96 14608b260df8
       
   345   e442cfc57690
       
   346       bed64f5d2f5a
       
   347       7ae126973a96 14608b260df8
       
   348   3750ebee865d
       
   349       bed64f5d2f5a
       
   350       7ae126973a96 14608b260df8
       
   351   7ae126973a96
       
   352       7ae126973a96
       
   353   14608b260df8
       
   354       14608b260df8
       
   355   bed64f5d2f5a
       
   356       bed64f5d2f5a
       
   357   $ hg log -r 'divergent()'
       
   358   4:01f36c5a8fda A_3
       
   359   8:7ae126973a96 A_7
       
   360   9:14608b260df8 A_8
       
   361   10:bed64f5d2f5a A_9
       
   362 
       
   363 fix the divergence
       
   364 
       
   365   $ mkcommit A_A; hg up 0
       
   366   created new head
       
   367   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   368   $ hg debugobsolete `getid A_9` `getid A_A`
       
   369   $ hg debugobsolete `getid A_7` `getid A_A`
       
   370   $ hg debugobsolete `getid A_8` `getid A_A`
       
   371   $ hg log -G --hidden
       
   372   o  11:a139f71be9da A_A
       
   373   |
       
   374   | x  10:bed64f5d2f5a A_9
       
   375   |/
       
   376   | x  9:14608b260df8 A_8
       
   377   |/
       
   378   | x  8:7ae126973a96 A_7
       
   379   |/
       
   380   | x  7:3750ebee865d B_0
       
   381   | |
       
   382   | x  6:e442cfc57690 A_5
       
   383   |/
       
   384   | x  5:6a411f0d7a0a A_4
       
   385   |/
       
   386   | o  4:01f36c5a8fda A_3
       
   387   |/
       
   388   | x  3:392fd25390da A_2
       
   389   |/
       
   390   | x  2:82623d38b9ba A_1
       
   391   |/
       
   392   | x  1:007dc284c1f8 A_0
       
   393   |/
       
   394   @  0:d20a80d4def3 base
       
   395   
       
   396   $ hg debugsuccessorssets 'all()'
       
   397   d20a80d4def3
       
   398       d20a80d4def3
       
   399   007dc284c1f8
       
   400       01f36c5a8fda a139f71be9da
       
   401   82623d38b9ba
       
   402       01f36c5a8fda
       
   403   392fd25390da
       
   404       a139f71be9da
       
   405   01f36c5a8fda
       
   406       01f36c5a8fda
       
   407   6a411f0d7a0a
       
   408       a139f71be9da
       
   409   e442cfc57690
       
   410       a139f71be9da
       
   411   3750ebee865d
       
   412       a139f71be9da
       
   413   7ae126973a96
       
   414       a139f71be9da
       
   415   14608b260df8
       
   416       a139f71be9da
       
   417   bed64f5d2f5a
       
   418       a139f71be9da
       
   419   a139f71be9da
       
   420       a139f71be9da
       
   421   $ hg log -r 'divergent()'
       
   422 
       
   423   $ cd ..
       
   424 
       
   425 
       
   426 Subset does not diverge
       
   427 ------------------------------
       
   428 
       
   429 Do not report divergent successors-set if it is a subset of another
       
   430 successors-set. (report [A,B] not [A] + [A,B])
       
   431 
       
   432   $ newcase subset
       
   433   $ hg debugobsolete `getid A_0` `getid A_2`
       
   434   $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
       
   435   $ hg debugsuccessorssets 'desc('A_0')'
       
   436   007dc284c1f8
       
   437       82623d38b9ba 392fd25390da
       
   438 
       
   439   $ cd ..