tests/test-evolve-content-divergent-basic.t
branchstable
changeset 4481 d02a7c8cdee5
parent 3846 f9dad99a90d5
child 4490 7a5c6109ee84
equal deleted inserted replaced
4480:d18044dfc584 4481:d02a7c8cdee5
       
     1 =======================================================
       
     2 Tests the resolution of content divergence: basic cases
       
     3 =======================================================
       
     4 
       
     5 This file intend to cover basic case of content divergence. See the other test
       
     6 file for more advanced cases.
       
     7 
       
     8   $ cat >> $HGRCPATH <<EOF
       
     9   > [alias]
       
    10   > glog = log -GT "{rev}:{node|short} {desc|firstline}\n ({bookmarks}) [{branch}] {phase}"
       
    11   > [defaults]
       
    12   > amend=-d "0 0"
       
    13   > fold=-d "0 0"
       
    14   > [web]
       
    15   > push_ssl = false
       
    16   > allow_push = *
       
    17   > [phases]
       
    18   > publish = False
       
    19   > [diff]
       
    20   > git = 1
       
    21   > unified = 0
       
    22   > [ui]
       
    23   > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{troubles}]\n
       
    24   > [extensions]
       
    25   > EOF
       
    26   $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
       
    27   $ mkcommit() {
       
    28   >    echo "$1" > "$1"
       
    29   >    hg add "$1"
       
    30   >    hg ci -m "add $1"
       
    31   > }
       
    32 
       
    33   $ mkcommits() {
       
    34   >   for i in $@; do mkcommit $i ; done
       
    35   > }
       
    36 
       
    37 Basic test of divergence: two divergent changesets with the same parents
       
    38 With --all --any we dedupe the divergent and solve the divergence once
       
    39 
       
    40   $ hg init test1
       
    41   $ cd test1
       
    42   $ echo a > a
       
    43   $ hg ci -Aqm "added a"
       
    44   $ echo b > b
       
    45   $ hg ci -Aqm "added b"
       
    46 
       
    47   $ hg up .^
       
    48   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
    49   $ echo bdivergent > bdivergent1
       
    50   $ hg ci -Am "divergent"
       
    51   adding bdivergent1
       
    52   created new head
       
    53 
       
    54   $ hg up .^
       
    55   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
    56   $ echo bdivergent > bdivergent2
       
    57   $ hg ci -Am "divergent"
       
    58   adding bdivergent2
       
    59   created new head
       
    60 
       
    61   $ hg prune -s 8374d2ddc3a4 "desc('added b')"
       
    62   1 changesets pruned
       
    63   $ hg prune -s 593c57f2117e "desc('added b')" --hidden
       
    64   1 changesets pruned
       
    65   2 new content-divergent changesets
       
    66 
       
    67   $ hg log -G
       
    68   @  3:8374d2ddc3a4@default(draft) divergent [content-divergent]
       
    69   |
       
    70   | *  2:593c57f2117e@default(draft) divergent [content-divergent]
       
    71   |/
       
    72   o  0:9092f1db7931@default(draft) added a []
       
    73   
       
    74 
       
    75   $ hg evolve --all --any --content-divergent
       
    76   merge:[2] divergent
       
    77   with: [3] divergent
       
    78   base: [1] added b
       
    79   updating to "local" side of the conflict: 593c57f2117e
       
    80   merging "other" content-divergent changeset '8374d2ddc3a4'
       
    81   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
    82   working directory is now at 45bf1312f454
       
    83   $ hg log -G
       
    84   @  4:45bf1312f454@default(draft) divergent []
       
    85   |
       
    86   o  0:9092f1db7931@default(draft) added a []
       
    87   
       
    88 
       
    89   $ cd ..
       
    90 
       
    91 Extra setup
       
    92 -----------
       
    93 
       
    94 (the test below were initially in a different file)
       
    95 
       
    96   $ hg init cdiv
       
    97   $ cd cdiv
       
    98   $ echo ".*\.orig" > .hgignore
       
    99   $ hg add .hgignore
       
   100   $ hg ci -m "added hgignore"
       
   101   $ for ch in a b c d; do echo foo > $ch; hg add $ch; hg ci -qm "added "$ch; done;
       
   102 
       
   103   $ hg glog
       
   104   @  4:c41c793e0ef1 added d
       
   105   |   () [default] draft
       
   106   o  3:ca1b80f7960a added c
       
   107   |   () [default] draft
       
   108   o  2:b1661037fa25 added b
       
   109   |   () [default] draft
       
   110   o  1:c7586e2a9264 added a
       
   111   |   () [default] draft
       
   112   o  0:8fa14d15e168 added hgignore
       
   113       () [default] draft
       
   114 
       
   115 Merging branch difference
       
   116 -------------------------
       
   117 
       
   118 Creating content-divergence with branch change where base, divergent and other
       
   119 have different branches
       
   120 
       
   121   $ hg branch -r . foobar
       
   122   changed branch on 1 changesets
       
   123 
       
   124   $ hg up c41c793e0ef1 --hidden
       
   125   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   126   updated to hidden changeset c41c793e0ef1
       
   127   (hidden revision 'c41c793e0ef1' was rewritten as: 9e5dffcb3d48)
       
   128   working directory parent is obsolete! (c41c793e0ef1)
       
   129   (use 'hg evolve' to update to its successor: 9e5dffcb3d48)
       
   130   $ echo bar > d
       
   131   $ hg branch watwat
       
   132   marked working directory as branch watwat
       
   133   $ hg amend
       
   134   2 new content-divergent changesets
       
   135 
       
   136   $ hg glog
       
   137   @  6:264b04f771fb added d
       
   138   |   () [watwat] draft
       
   139   | *  5:9e5dffcb3d48 added d
       
   140   |/    () [foobar] draft
       
   141   o  3:ca1b80f7960a added c
       
   142   |   () [default] draft
       
   143   o  2:b1661037fa25 added b
       
   144   |   () [default] draft
       
   145   o  1:c7586e2a9264 added a
       
   146   |   () [default] draft
       
   147   o  0:8fa14d15e168 added hgignore
       
   148       () [default] draft
       
   149 
       
   150   $ hg evolve --content-divergent --config ui.interactive=True<<EOF
       
   151   > c
       
   152   > EOF
       
   153   merge:[6] added d
       
   154   with: [5] added d
       
   155   base: [4] added d
       
   156   merging "other" content-divergent changeset '9e5dffcb3d48'
       
   157   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   158   content divergent changesets on different branches.
       
   159   choose branch for the resolution changeset. (a) default or (b) watwat or (c) foobar?  c
       
   160   working directory is now at 0ac42f1bc15c
       
   161 
       
   162   $ hg glog
       
   163   @  7:0ac42f1bc15c added d
       
   164   |   () [foobar] draft
       
   165   o  3:ca1b80f7960a added c
       
   166   |   () [default] draft
       
   167   o  2:b1661037fa25 added b
       
   168   |   () [default] draft
       
   169   o  1:c7586e2a9264 added a
       
   170   |   () [default] draft
       
   171   o  0:8fa14d15e168 added hgignore
       
   172       () [default] draft
       
   173 
       
   174 Testing merging of commit messages
       
   175 -----------------------------------
       
   176 
       
   177 When base and one of the divergent has same commit messages and other divergent
       
   178 has different one
       
   179 
       
   180   $ echo wat > d
       
   181   $ hg amend
       
   182 
       
   183   $ hg up .^
       
   184   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
       
   185 
       
   186   $ echo bar > d
       
   187   $ hg ci -Aqm "added a d with bar in it, expect some beers"
       
   188 
       
   189   $ hg prune -r 0ac42f1bc15c -s . --hidden
       
   190   1 changesets pruned
       
   191   2 new content-divergent changesets
       
   192 
       
   193   $ hg glog
       
   194   @  9:59081c9c425a added a d with bar in it, expect some beers
       
   195   |   () [default] draft
       
   196   | *  8:f621d00f5f0e added d
       
   197   |/    () [foobar] draft
       
   198   o  3:ca1b80f7960a added c
       
   199   |   () [default] draft
       
   200   o  2:b1661037fa25 added b
       
   201   |   () [default] draft
       
   202   o  1:c7586e2a9264 added a
       
   203   |   () [default] draft
       
   204   o  0:8fa14d15e168 added hgignore
       
   205       () [default] draft
       
   206 
       
   207   $ hg evolve --content-divergent
       
   208   merge:[9] added a d with bar in it, expect some beers
       
   209   with: [8] added d
       
   210   base: [7] added d
       
   211   merging "other" content-divergent changeset 'f621d00f5f0e'
       
   212   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   213   working directory is now at a9d6fd6b5e40
       
   214 
       
   215   $ hg glog
       
   216   @  10:a9d6fd6b5e40 added a d with bar in it, expect some beers
       
   217   |   () [default] draft
       
   218   o  3:ca1b80f7960a added c
       
   219   |   () [default] draft
       
   220   o  2:b1661037fa25 added b
       
   221   |   () [default] draft
       
   222   o  1:c7586e2a9264 added a
       
   223   |   () [default] draft
       
   224   o  0:8fa14d15e168 added hgignore
       
   225       () [default] draft
       
   226 
       
   227 When base has different message and both divergents has same one
       
   228 
       
   229   $ echo foo > d
       
   230   $ hg amend -m "foo to d"
       
   231 
       
   232   $ hg up a9d6fd6b5e40 --hidden
       
   233   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   234   updated to hidden changeset a9d6fd6b5e40
       
   235   (hidden revision 'a9d6fd6b5e40' was rewritten as: b10b07a394f1)
       
   236   working directory parent is obsolete! (a9d6fd6b5e40)
       
   237   (use 'hg evolve' to update to its successor: b10b07a394f1)
       
   238   $ echo babar > d
       
   239   $ hg amend -m "foo to d"
       
   240   2 new content-divergent changesets
       
   241 
       
   242   $ hg glog
       
   243   @  12:0bb497fed24a foo to d
       
   244   |   () [default] draft
       
   245   | *  11:b10b07a394f1 foo to d
       
   246   |/    () [default] draft
       
   247   o  3:ca1b80f7960a added c
       
   248   |   () [default] draft
       
   249   o  2:b1661037fa25 added b
       
   250   |   () [default] draft
       
   251   o  1:c7586e2a9264 added a
       
   252   |   () [default] draft
       
   253   o  0:8fa14d15e168 added hgignore
       
   254       () [default] draft
       
   255 
       
   256   $ hg evolve --content-divergent
       
   257   merge:[12] foo to d
       
   258   with: [11] foo to d
       
   259   base: [10] added a d with bar in it, expect some beers
       
   260   merging "other" content-divergent changeset 'b10b07a394f1'
       
   261   merging d
       
   262   warning: conflicts while merging d! (edit, then use 'hg resolve --mark')
       
   263   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
       
   264   fix conflicts and see `hg help evolve.interrupted`
       
   265   [1]
       
   266 
       
   267   $ echo foobar > d
       
   268   $ hg resolve -m
       
   269   (no more unresolved files)
       
   270   continue: hg evolve --continue
       
   271   $ hg evolve --continue
       
   272   working directory is now at 11175423b5dc
       
   273 
       
   274   $ hg glog
       
   275   @  13:11175423b5dc foo to d
       
   276   |   () [default] draft
       
   277   o  3:ca1b80f7960a added c
       
   278   |   () [default] draft
       
   279   o  2:b1661037fa25 added b
       
   280   |   () [default] draft
       
   281   o  1:c7586e2a9264 added a
       
   282   |   () [default] draft
       
   283   o  0:8fa14d15e168 added hgignore
       
   284       () [default] draft
       
   285 
       
   286 When all three base, divergent and other has different commit messages creating
       
   287 conflicts
       
   288 
       
   289   $ echo bar > d
       
   290   $ hg amend -m "bar to d, expect beers"
       
   291 
       
   292   $ hg up 11175423b5dc --hidden
       
   293   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   294   updated to hidden changeset 11175423b5dc
       
   295   (hidden revision '11175423b5dc' was rewritten as: 27f0463f169a)
       
   296   working directory parent is obsolete! (11175423b5dc)
       
   297   (use 'hg evolve' to update to its successor: 27f0463f169a)
       
   298   $ echo wat > d
       
   299   $ hg amend -m "wat to d, wat?"
       
   300   2 new content-divergent changesets
       
   301 
       
   302   $ hg glog
       
   303   @  15:f542037ddf31 wat to d, wat?
       
   304   |   () [default] draft
       
   305   | *  14:27f0463f169a bar to d, expect beers
       
   306   |/    () [default] draft
       
   307   o  3:ca1b80f7960a added c
       
   308   |   () [default] draft
       
   309   o  2:b1661037fa25 added b
       
   310   |   () [default] draft
       
   311   o  1:c7586e2a9264 added a
       
   312   |   () [default] draft
       
   313   o  0:8fa14d15e168 added hgignore
       
   314       () [default] draft
       
   315 
       
   316   $ hg evolve --content-divergent
       
   317   merge:[15] wat to d, wat?
       
   318   with: [14] bar to d, expect beers
       
   319   base: [13] foo to d
       
   320   merging "other" content-divergent changeset '27f0463f169a'
       
   321   merging d
       
   322   warning: conflicts while merging d! (edit, then use 'hg resolve --mark')
       
   323   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
       
   324   fix conflicts and see `hg help evolve.interrupted`
       
   325   [1]
       
   326 
       
   327   $ echo watbar > d
       
   328   $ hg resolve -m
       
   329   (no more unresolved files)
       
   330   continue: hg evolve --continue
       
   331 
       
   332   $ cat > editor.sh <<EOF
       
   333   > #!/bin/sh
       
   334   > printf "**showing editors text**\n\n"
       
   335   > cat \$1
       
   336   > printf "\n**done showing editors text**\n\n"
       
   337   > cat > \$1 <<ENDOF
       
   338   > watbar to d
       
   339   > ENDOF
       
   340   > EOF
       
   341 
       
   342   $ HGEDITOR='sh ./editor.sh' hg evolve --continue
       
   343   **showing editors text**
       
   344   
       
   345   HG: Conflicts while merging changeset description of content-divergent changesets.
       
   346   HG: Resolve conflicts in commit messages to continue.
       
   347   
       
   348   <<<<<<< divergent
       
   349   wat to d, wat?||||||| base
       
   350   foo to d=======
       
   351   bar to d, expect beers>>>>>>> other
       
   352   
       
   353   **done showing editors text**
       
   354   
       
   355   working directory is now at 89ea3eee2d69
       
   356 
       
   357   $ hg glog
       
   358   @  16:89ea3eee2d69 watbar to d
       
   359   |   () [default] draft
       
   360   o  3:ca1b80f7960a added c
       
   361   |   () [default] draft
       
   362   o  2:b1661037fa25 added b
       
   363   |   () [default] draft
       
   364   o  1:c7586e2a9264 added a
       
   365   |   () [default] draft
       
   366   o  0:8fa14d15e168 added hgignore
       
   367       () [default] draft
       
   368 
       
   369   $ cd ..
       
   370 
       
   371 Stabilize divergent changesets with same parent
       
   372 ===============================================
       
   373 
       
   374   $ glog() {
       
   375   >   hg log -G --template \
       
   376   >     '{rev}:{node|short}@{branch}({phase}) bk:[{bookmarks}] {desc|firstline}\n' "$@"
       
   377   > }
       
   378 
       
   379   $ hg init content-divergent-savanna
       
   380   $ cd content-divergent-savanna
       
   381   $ echo a > a
       
   382   $ hg add a
       
   383   $ hg ci -m 'root'
       
   384   $ hg phase --public .
       
   385   $ cat << EOF >> a
       
   386   > flore
       
   387   > arthur
       
   388   > zephir
       
   389   > some
       
   390   > less
       
   391   > conflict
       
   392   > EOF
       
   393   $ hg ci -m 'More addition'
       
   394   $ glog
       
   395   @  1:867e43582046@default(draft) bk:[] More addition
       
   396   |
       
   397   o  0:6569b5a81c7e@default(public) bk:[] root
       
   398   
       
   399   $ echo 'babar' >> a
       
   400   $ hg amend
       
   401   $ hg up --hidden 'min(desc("More addition"))'
       
   402   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   403   updated to hidden changeset 867e43582046
       
   404   (hidden revision '867e43582046' was rewritten as: fc6349f931da)
       
   405   working directory parent is obsolete! (867e43582046)
       
   406   (use 'hg evolve' to update to its successor: fc6349f931da)
       
   407   $ mv a a.old
       
   408   $ echo 'jungle' > a
       
   409   $ cat a.old >> a
       
   410   $ rm a.old
       
   411   $ hg amend
       
   412   2 new content-divergent changesets
       
   413   $ glog
       
   414   @  3:051337a45e7c@default(draft) bk:[] More addition
       
   415   |
       
   416   | *  2:fc6349f931da@default(draft) bk:[] More addition
       
   417   |/
       
   418   o  0:6569b5a81c7e@default(public) bk:[] root
       
   419   
       
   420 
       
   421 Stabilize it
       
   422 
       
   423   $ hg evolve -qn --confirm --content-divergent
       
   424   merge:[3] More addition
       
   425   with: [2] More addition
       
   426   base: [1] More addition
       
   427   perform evolve? [Ny] n
       
   428   abort: evolve aborted by user
       
   429   [255]
       
   430   $ echo y | hg evolve -qn --confirm --config ui.interactive=True --content-divergent
       
   431   merge:[3] More addition
       
   432   with: [2] More addition
       
   433   base: [1] More addition
       
   434   perform evolve? [Ny] y
       
   435   hg update -c 051337a45e7c &&
       
   436   hg merge fc6349f931da &&
       
   437   hg commit -m "auto merge resolving conflict between 051337a45e7c and fc6349f931da"&&
       
   438   hg up -C 867e43582046 &&
       
   439   hg revert --all --rev tip &&
       
   440   hg commit -m "`hg log -r 051337a45e7c --template={desc}`";
       
   441   $ hg evolve -v --content-divergent
       
   442   merge:[3] More addition
       
   443   with: [2] More addition
       
   444   base: [1] More addition
       
   445   merging "other" content-divergent changeset 'fc6349f931da'
       
   446   resolving manifests
       
   447   merging a
       
   448   0 files updated, 1 files merged, 0 files removed, 0 files unresolved
       
   449   committing files:
       
   450   a
       
   451   committing manifest
       
   452   committing changelog
       
   453   working directory is now at 5bf84d1d71d1
       
   454   $ hg st
       
   455   $ glog
       
   456   @  4:5bf84d1d71d1@default(draft) bk:[] More addition
       
   457   |
       
   458   o  0:6569b5a81c7e@default(public) bk:[] root
       
   459   
       
   460   $ hg summary
       
   461   parent: 4:5bf84d1d71d1 tip
       
   462    More addition
       
   463   branch: default
       
   464   commit: (clean)
       
   465   update: (current)
       
   466   phases: 1 draft
       
   467   $ hg export . --config diff.unified=3
       
   468   # HG changeset patch
       
   469   # User test
       
   470   # Date 0 0
       
   471   #      Thu Jan 01 00:00:00 1970 +0000
       
   472   # Node ID 5bf84d1d71d12f451bfe1e09b93045eb6338cd6c
       
   473   # Parent  6569b5a81c7e307ddc076550e8c0f6d75b6effcd
       
   474   More addition
       
   475   
       
   476   diff --git a/a b/a
       
   477   --- a/a
       
   478   +++ b/a
       
   479   @@ -1,1 +1,9 @@
       
   480   +jungle
       
   481    a
       
   482   +flore
       
   483   +arthur
       
   484   +zephir
       
   485   +some
       
   486   +less
       
   487   +conflict
       
   488   +babar
       
   489 
       
   490 Check conflict during divergence resolution
       
   491 -------------------------------------------------
       
   492 
       
   493   $ hg up --hidden 'min(desc("More addition"))'
       
   494   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   495   updated to hidden changeset 867e43582046
       
   496   (hidden revision '867e43582046' was rewritten as: 5bf84d1d71d1)
       
   497   working directory parent is obsolete! (867e43582046)
       
   498   (use 'hg evolve' to update to its successor: 5bf84d1d71d1)
       
   499   $ echo 'gotta break' >> a
       
   500   $ hg amend
       
   501   2 new content-divergent changesets
       
   502 # reamend so that the case is not the first precursor.
       
   503   $ hg amend -m "More addition (2)"
       
   504   $ hg phase 'contentdivergent()'
       
   505   4: draft
       
   506   6: draft
       
   507 
       
   508   $ glog
       
   509   @  6:13c1b75640a1@default(draft) bk:[] More addition (2)
       
   510   |
       
   511   | *  4:5bf84d1d71d1@default(draft) bk:[] More addition
       
   512   |/
       
   513   o  0:6569b5a81c7e@default(public) bk:[] root
       
   514   
       
   515 
       
   516   $ hg evolve -qn --content-divergent
       
   517   hg update -c 13c1b75640a1 &&
       
   518   hg merge 5bf84d1d71d1 &&
       
   519   hg commit -m "auto merge resolving conflict between 13c1b75640a1 and 5bf84d1d71d1"&&
       
   520   hg up -C 867e43582046 &&
       
   521   hg revert --all --rev tip &&
       
   522   hg commit -m "`hg log -r 13c1b75640a1 --template={desc}`";
       
   523   $ hg evolve --content-divergent
       
   524   merge:[6] More addition (2)
       
   525   with: [4] More addition
       
   526   base: [1] More addition
       
   527   merging "other" content-divergent changeset '5bf84d1d71d1'
       
   528   merging a
       
   529   warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
       
   530   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
       
   531   fix conflicts and see `hg help evolve.interrupted`
       
   532   [1]
       
   533 
       
   534   $ cat > a <<EOF
       
   535   > jungle
       
   536   > a
       
   537   > flore
       
   538   > arthur
       
   539   > zephir
       
   540   > some
       
   541   > less
       
   542   > conflict
       
   543   > babar
       
   544   > EOF
       
   545 
       
   546   $ hg resolve -m
       
   547   (no more unresolved files)
       
   548   continue: hg evolve --continue
       
   549   $ hg evolve --continue
       
   550   working directory is now at 2346e1147fed
       
   551   $ glog
       
   552   @  7:2346e1147fed@default(draft) bk:[] More addition (2)
       
   553   |
       
   554   o  0:6569b5a81c7e@default(public) bk:[] root
       
   555   
       
   556   $ hg exp  --config diff.unified=3
       
   557   # HG changeset patch
       
   558   # User test
       
   559   # Date 0 0
       
   560   #      Thu Jan 01 00:00:00 1970 +0000
       
   561   # Node ID 2346e1147fedc8c9aa17f9ba7870dcd8be52f567
       
   562   # Parent  6569b5a81c7e307ddc076550e8c0f6d75b6effcd
       
   563   More addition (2)
       
   564   
       
   565   diff --git a/a b/a
       
   566   --- a/a
       
   567   +++ b/a
       
   568   @@ -1,1 +1,9 @@
       
   569   +jungle
       
   570    a
       
   571   +flore
       
   572   +arthur
       
   573   +zephir
       
   574   +some
       
   575   +less
       
   576   +conflict
       
   577   +babar
       
   578   $ cd ..