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