tests/test-obsolete-divergent.t
branchstable
changeset 662 40854e956315
parent 648 f727ebe6ffd5
parent 660 e6e47c432ffd
child 663 9d4ff0809a00
equal deleted inserted replaced
648:f727ebe6ffd5 662:40854e956315
     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   $ hg summary -v
       
    85   parent: 0:d20a80d4def3 
       
    86    base
       
    87   branch: default
       
    88   commit: (clean)
       
    89   update: 3 new changesets (update)
       
    90   unstable: 0 changesets
       
    91   bumped: 0 changesets
       
    92   divergent: 2 changesets
       
    93 
       
    94 
       
    95 check that mercurial refuse to push
       
    96 
       
    97   $ hg init ../other
       
    98   $ hg push ../other
       
    99   pushing to ../other
       
   100   searching for changes
       
   101   abort: push includes a divergent changeset: 82623d38b9ba!
       
   102   (use 'hg evolve' to get a stable history or --force to ignore warnings)
       
   103   [255]
       
   104 
       
   105   $ cd ..
       
   106 
       
   107 
       
   108 indirect divergence with known changeset
       
   109 -------------------------------------------
       
   110 
       
   111   $ newcase indirect_known
       
   112   $ hg debugobsolete `getid A_0` `getid A_1`
       
   113   $ hg debugobsolete `getid A_0` `getid A_2`
       
   114   $ mkcommit A_3
       
   115   created new head
       
   116   $ hg debugobsolete `getid A_2` `getid A_3`
       
   117   $ hg log -G --hidden
       
   118   @  4:01f36c5a8fda A_3
       
   119   |
       
   120   | x  3:392fd25390da A_2
       
   121   |/
       
   122   | o  2:82623d38b9ba A_1
       
   123   |/
       
   124   | x  1:007dc284c1f8 A_0
       
   125   |/
       
   126   o  0:d20a80d4def3 base
       
   127   
       
   128   $ hg debugsuccessorssets 'all()'
       
   129   d20a80d4def3
       
   130       d20a80d4def3
       
   131   007dc284c1f8
       
   132       01f36c5a8fda
       
   133       82623d38b9ba
       
   134   82623d38b9ba
       
   135       82623d38b9ba
       
   136   392fd25390da
       
   137       01f36c5a8fda
       
   138   01f36c5a8fda
       
   139       01f36c5a8fda
       
   140   $ hg log -r 'divergent()'
       
   141   2:82623d38b9ba A_1
       
   142   4:01f36c5a8fda A_3
       
   143   $ cd ..
       
   144 
       
   145 
       
   146 indirect divergence with known changeset
       
   147 -------------------------------------------
       
   148 
       
   149   $ newcase indirect_unknown
       
   150   $ hg debugobsolete `getid A_0` aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
       
   151   $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `getid A_1`
       
   152   $ hg debugobsolete `getid A_0` `getid A_2`
       
   153   $ hg log -G --hidden
       
   154   o  3:392fd25390da A_2
       
   155   |
       
   156   | o  2:82623d38b9ba A_1
       
   157   |/
       
   158   | x  1:007dc284c1f8 A_0
       
   159   |/
       
   160   @  0:d20a80d4def3 base
       
   161   
       
   162   $ hg debugsuccessorssets 'all()'
       
   163   d20a80d4def3
       
   164       d20a80d4def3
       
   165   007dc284c1f8
       
   166       392fd25390da
       
   167       82623d38b9ba
       
   168   82623d38b9ba
       
   169       82623d38b9ba
       
   170   392fd25390da
       
   171       392fd25390da
       
   172   $ hg log -r 'divergent()'
       
   173   2:82623d38b9ba A_1
       
   174   3:392fd25390da A_2
       
   175   $ cd ..
       
   176 
       
   177 do not take unknown node in account if they are final
       
   178 -----------------------------------------------------
       
   179 
       
   180   $ newcase final-unknown
       
   181   $ hg debugobsolete `getid A_0` `getid A_1`
       
   182   $ hg debugobsolete `getid A_1` `getid A_2`
       
   183   $ hg debugobsolete `getid A_0` bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
       
   184   $ hg debugobsolete bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb cccccccccccccccccccccccccccccccccccccccc
       
   185   $ hg debugobsolete `getid A_1` dddddddddddddddddddddddddddddddddddddddd
       
   186 
       
   187   $ hg debugsuccessorssets 'desc('A_0')'
       
   188   007dc284c1f8
       
   189       392fd25390da
       
   190 
       
   191   $ cd ..
       
   192 
       
   193 divergence that converge again is not divergence anymore
       
   194 -----------------------------------------------------
       
   195 
       
   196   $ newcase converged_divergence
       
   197   $ hg debugobsolete `getid A_0` `getid A_1`
       
   198   $ hg debugobsolete `getid A_0` `getid A_2`
       
   199   $ mkcommit A_3
       
   200   created new head
       
   201   $ hg debugobsolete `getid A_1` `getid A_3`
       
   202   $ hg debugobsolete `getid A_2` `getid A_3`
       
   203   $ hg log -G --hidden
       
   204   @  4:01f36c5a8fda A_3
       
   205   |
       
   206   | x  3:392fd25390da A_2
       
   207   |/
       
   208   | x  2:82623d38b9ba A_1
       
   209   |/
       
   210   | x  1:007dc284c1f8 A_0
       
   211   |/
       
   212   o  0:d20a80d4def3 base
       
   213   
       
   214   $ hg debugsuccessorssets 'all()'
       
   215   d20a80d4def3
       
   216       d20a80d4def3
       
   217   007dc284c1f8
       
   218       01f36c5a8fda
       
   219   82623d38b9ba
       
   220       01f36c5a8fda
       
   221   392fd25390da
       
   222       01f36c5a8fda
       
   223   01f36c5a8fda
       
   224       01f36c5a8fda
       
   225   $ hg log -r 'divergent()'
       
   226   $ cd ..
       
   227 
       
   228 split is not divergences
       
   229 -----------------------------
       
   230 
       
   231   $ newcase split
       
   232   $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
       
   233   $ hg log -G --hidden
       
   234   o  3:392fd25390da A_2
       
   235   |
       
   236   | o  2:82623d38b9ba A_1
       
   237   |/
       
   238   | x  1:007dc284c1f8 A_0
       
   239   |/
       
   240   @  0:d20a80d4def3 base
       
   241   
       
   242   $ hg debugsuccessorssets 'all()'
       
   243   d20a80d4def3
       
   244       d20a80d4def3
       
   245   007dc284c1f8
       
   246       82623d38b9ba 392fd25390da
       
   247   82623d38b9ba
       
   248       82623d38b9ba
       
   249   392fd25390da
       
   250       392fd25390da
       
   251   $ hg log -r 'divergent()'
       
   252 
       
   253 Even when subsequente rewriting happen
       
   254 
       
   255   $ mkcommit A_3
       
   256   created new head
       
   257   $ hg debugobsolete `getid A_1` `getid A_3`
       
   258   $ hg up 0
       
   259   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   260   $ mkcommit A_4
       
   261   created new head
       
   262   $ hg debugobsolete `getid A_2` `getid A_4`
       
   263   $ hg up 0
       
   264   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   265   $ mkcommit A_5
       
   266   created new head
       
   267   $ hg debugobsolete `getid A_4` `getid A_5`
       
   268   $ hg log -G --hidden
       
   269   @  6:e442cfc57690 A_5
       
   270   |
       
   271   | x  5:6a411f0d7a0a A_4
       
   272   |/
       
   273   | o  4:01f36c5a8fda A_3
       
   274   |/
       
   275   | x  3:392fd25390da A_2
       
   276   |/
       
   277   | x  2:82623d38b9ba A_1
       
   278   |/
       
   279   | x  1:007dc284c1f8 A_0
       
   280   |/
       
   281   o  0:d20a80d4def3 base
       
   282   
       
   283   $ hg debugsuccessorssets 'all()'
       
   284   d20a80d4def3
       
   285       d20a80d4def3
       
   286   007dc284c1f8
       
   287       01f36c5a8fda e442cfc57690
       
   288   82623d38b9ba
       
   289       01f36c5a8fda
       
   290   392fd25390da
       
   291       e442cfc57690
       
   292   01f36c5a8fda
       
   293       01f36c5a8fda
       
   294   6a411f0d7a0a
       
   295       e442cfc57690
       
   296   e442cfc57690
       
   297       e442cfc57690
       
   298   $ hg log -r 'divergent()'
       
   299 
       
   300 Check more complexe obsolescence graft (with divergence)
       
   301 
       
   302   $ mkcommit B_0; hg up 0
       
   303   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
       
   304   $ hg debugobsolete `getid B_0` `getid A_2`
       
   305   $ mkcommit A_7; hg up 0
       
   306   created new head
       
   307   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   308   $ mkcommit A_8; hg up 0
       
   309   created new head
       
   310   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   311   $ hg debugobsolete `getid A_5` `getid A_7` `getid A_8`
       
   312   $ mkcommit A_9; hg up 0
       
   313   created new head
       
   314   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   315   $ hg debugobsolete `getid A_5` `getid A_9`
       
   316   $ hg log -G --hidden
       
   317   o  10:bed64f5d2f5a A_9
       
   318   |
       
   319   | o  9:14608b260df8 A_8
       
   320   |/
       
   321   | o  8:7ae126973a96 A_7
       
   322   |/
       
   323   | x  7:3750ebee865d B_0
       
   324   | |
       
   325   | x  6:e442cfc57690 A_5
       
   326   |/
       
   327   | x  5:6a411f0d7a0a A_4
       
   328   |/
       
   329   | o  4:01f36c5a8fda A_3
       
   330   |/
       
   331   | x  3:392fd25390da A_2
       
   332   |/
       
   333   | x  2:82623d38b9ba A_1
       
   334   |/
       
   335   | x  1:007dc284c1f8 A_0
       
   336   |/
       
   337   @  0:d20a80d4def3 base
       
   338   
       
   339   $ hg debugsuccessorssets 'all()'
       
   340   d20a80d4def3
       
   341       d20a80d4def3
       
   342   007dc284c1f8
       
   343       01f36c5a8fda bed64f5d2f5a
       
   344       01f36c5a8fda 7ae126973a96 14608b260df8
       
   345   82623d38b9ba
       
   346       01f36c5a8fda
       
   347   392fd25390da
       
   348       bed64f5d2f5a
       
   349       7ae126973a96 14608b260df8
       
   350   01f36c5a8fda
       
   351       01f36c5a8fda
       
   352   6a411f0d7a0a
       
   353       bed64f5d2f5a
       
   354       7ae126973a96 14608b260df8
       
   355   e442cfc57690
       
   356       bed64f5d2f5a
       
   357       7ae126973a96 14608b260df8
       
   358   3750ebee865d
       
   359       bed64f5d2f5a
       
   360       7ae126973a96 14608b260df8
       
   361   7ae126973a96
       
   362       7ae126973a96
       
   363   14608b260df8
       
   364       14608b260df8
       
   365   bed64f5d2f5a
       
   366       bed64f5d2f5a
       
   367   $ hg log -r 'divergent()'
       
   368   4:01f36c5a8fda A_3
       
   369   8:7ae126973a96 A_7
       
   370   9:14608b260df8 A_8
       
   371   10:bed64f5d2f5a A_9
       
   372 
       
   373 fix the divergence
       
   374 
       
   375   $ mkcommit A_A; hg up 0
       
   376   created new head
       
   377   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   378   $ hg debugobsolete `getid A_9` `getid A_A`
       
   379   $ hg debugobsolete `getid A_7` `getid A_A`
       
   380   $ hg debugobsolete `getid A_8` `getid A_A`
       
   381   $ hg log -G --hidden
       
   382   o  11:a139f71be9da A_A
       
   383   |
       
   384   | x  10:bed64f5d2f5a A_9
       
   385   |/
       
   386   | x  9:14608b260df8 A_8
       
   387   |/
       
   388   | x  8:7ae126973a96 A_7
       
   389   |/
       
   390   | x  7:3750ebee865d B_0
       
   391   | |
       
   392   | x  6:e442cfc57690 A_5
       
   393   |/
       
   394   | x  5:6a411f0d7a0a A_4
       
   395   |/
       
   396   | o  4:01f36c5a8fda A_3
       
   397   |/
       
   398   | x  3:392fd25390da A_2
       
   399   |/
       
   400   | x  2:82623d38b9ba A_1
       
   401   |/
       
   402   | x  1:007dc284c1f8 A_0
       
   403   |/
       
   404   @  0:d20a80d4def3 base
       
   405   
       
   406   $ hg debugsuccessorssets 'all()'
       
   407   d20a80d4def3
       
   408       d20a80d4def3
       
   409   007dc284c1f8
       
   410       01f36c5a8fda a139f71be9da
       
   411   82623d38b9ba
       
   412       01f36c5a8fda
       
   413   392fd25390da
       
   414       a139f71be9da
       
   415   01f36c5a8fda
       
   416       01f36c5a8fda
       
   417   6a411f0d7a0a
       
   418       a139f71be9da
       
   419   e442cfc57690
       
   420       a139f71be9da
       
   421   3750ebee865d
       
   422       a139f71be9da
       
   423   7ae126973a96
       
   424       a139f71be9da
       
   425   14608b260df8
       
   426       a139f71be9da
       
   427   bed64f5d2f5a
       
   428       a139f71be9da
       
   429   a139f71be9da
       
   430       a139f71be9da
       
   431   $ hg log -r 'divergent()'
       
   432 
       
   433   $ cd ..
       
   434 
       
   435 
       
   436 Subset does not diverge
       
   437 ------------------------------
       
   438 
       
   439 Do not report divergent successors-set if it is a subset of another
       
   440 successors-set. (report [A,B] not [A] + [A,B])
       
   441 
       
   442   $ newcase subset
       
   443   $ hg debugobsolete `getid A_0` `getid A_2`
       
   444   $ hg debugobsolete `getid A_0` `getid A_1` `getid A_2`
       
   445   $ hg debugsuccessorssets 'desc('A_0')'
       
   446   007dc284c1f8
       
   447       82623d38b9ba 392fd25390da
       
   448 
       
   449   $ cd ..