tests/test-merge-no-file-change.t
changeset 39110 f0c2653ca706
child 39111 46da52f4b820
equal deleted inserted replaced
39109:a915db9a5e77 39110:f0c2653ca706
       
     1   $ cat <<'EOF' >> "$HGRCPATH"
       
     2   > [extensions]
       
     3   > convert =
       
     4   > [templates]
       
     5   > l = '{rev}:{node|short} p={p1rev},{p2rev} m={manifest} f={files|json}'
       
     6   > EOF
       
     7 
       
     8   $ check_convert_identity () {
       
     9   >     hg convert -q "$1" "$1.converted"
       
    10   >     hg outgoing -q -R "$1.converted" "$1"
       
    11   >     if [ "$?" != 1 ]; then
       
    12   >         echo '*** BUG: hash changes on convert ***'
       
    13   >         hg log -R "$1.converted" -GTl
       
    14   >     fi
       
    15   > }
       
    16 
       
    17 Files added at both parents:
       
    18 
       
    19   $ hg init added-both
       
    20   $ cd added-both
       
    21   $ touch a b c
       
    22   $ hg ci -qAm0 a
       
    23   $ hg ci -qAm1 b
       
    24   $ hg up -q 0
       
    25   $ hg ci -qAm2 c
       
    26 
       
    27   $ hg merge
       
    28   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
    29   (branch merge, don't forget to commit)
       
    30   $ hg ci --debug -m merge
       
    31   committing files:
       
    32   b
       
    33   committing manifest
       
    34   committing changelog
       
    35   updating the branch cache
       
    36   committed changeset 3:7aa8a293f5d97377037afc21e871e036e718d659
       
    37   $ hg log -GTl
       
    38   @    3:7aa8a293f5d9 p=2,1 m=3:8667461869a1 f=[]
       
    39   |\
       
    40   | o  2:e0ea47086fce p=0,-1 m=2:b2e5b07f9374 f=["c"]
       
    41   | |
       
    42   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
    43   |/
       
    44   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"]
       
    45   
       
    46 
       
    47   $ cd ..
       
    48   $ check_convert_identity added-both
       
    49 
       
    50 Files added at both parents, but the other removed at the merge:
       
    51 (In this case, ctx.files() after the commit contains the removed file "b", but
       
    52 its manifest does not differ from p1.)
       
    53 
       
    54   $ hg init added-both-removed-at-merge
       
    55   $ cd added-both-removed-at-merge
       
    56   $ touch a b c
       
    57   $ hg ci -qAm0 a
       
    58   $ hg ci -qAm1 b
       
    59   $ hg up -q 0
       
    60   $ hg ci -qAm2 c
       
    61 
       
    62   $ hg merge
       
    63   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
    64   (branch merge, don't forget to commit)
       
    65   $ hg rm -f b
       
    66   $ hg ci --debug -m merge
       
    67   committing files:
       
    68   committing manifest
       
    69   committing changelog
       
    70   updating the branch cache
       
    71   committed changeset 3:915745f3ca3d9d699925269474c2d0a9526e8dfa
       
    72   $ hg log -GTl
       
    73   @    3:915745f3ca3d p=2,1 m=3:8e9cf3456921 f=["b"]
       
    74   |\
       
    75   | o  2:e0ea47086fce p=0,-1 m=2:b2e5b07f9374 f=["c"]
       
    76   | |
       
    77   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
    78   |/
       
    79   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"]
       
    80   
       
    81 
       
    82   $ cd ..
       
    83   $ check_convert_identity added-both
       
    84 
       
    85 An identical file added at both parents:
       
    86 
       
    87   $ hg init added-identical
       
    88   $ cd added-identical
       
    89   $ touch a b
       
    90   $ hg ci -qAm0 a
       
    91   $ hg ci -qAm1 b
       
    92   $ hg up -q 0
       
    93   $ touch b
       
    94   $ hg ci -qAm2 b
       
    95 
       
    96   $ hg merge
       
    97   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
    98   (branch merge, don't forget to commit)
       
    99   $ hg ci --debug -m merge
       
   100   reusing manifest from p1 (no file change)
       
   101   committing changelog
       
   102   updating the branch cache
       
   103   committed changeset 3:de26182cd210f0c3fb175ca7616704ab963d3024
       
   104   $ hg log -GTl
       
   105   @    3:de26182cd210 p=2,1 m=1:686dbf0aeca4 f=[]
       
   106   |\
       
   107   | o  2:f00991f11eca p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   108   | |
       
   109   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   110   |/
       
   111   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"]
       
   112   
       
   113 
       
   114   $ cd ..
       
   115   $ check_convert_identity added-identical
       
   116 
       
   117 #if execbit
       
   118 
       
   119 An identical file added at both parents, but the flag differs. Take local:
       
   120 
       
   121   $ hg init flag-change-take-p1
       
   122   $ cd flag-change-take-p1
       
   123   $ touch a b
       
   124   $ hg ci -qAm0 a
       
   125   $ hg ci -qAm1 b
       
   126   $ hg up -q 0
       
   127   $ touch b
       
   128   $ chmod +x b
       
   129   $ hg ci -qAm2 b
       
   130 
       
   131   $ hg merge
       
   132   warning: cannot merge flags for b without common ancestor - keeping local flags
       
   133   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   134   (branch merge, don't forget to commit)
       
   135   $ chmod +x b
       
   136   $ hg ci --debug -m merge
       
   137   committing files:
       
   138   b
       
   139   committing manifest
       
   140   committing changelog
       
   141   updating the branch cache
       
   142   committed changeset 3:4bfaad7f925b7f17f60524dc5d4e605f7bfbba3f
       
   143   $ hg log -GTl
       
   144   @    3:4bfaad7f925b p=2,1 m=3:a3a9fe23a5b8 f=[]
       
   145   |\
       
   146   | o  2:99451f16b3f5 p=0,-1 m=2:36b69ba4b24b f=["b"]
       
   147   | |
       
   148   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   149   |/
       
   150   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"]
       
   151   
       
   152   $ hg files -vr3
       
   153            0   a
       
   154            0 x b
       
   155 
       
   156   $ cd ..
       
   157   $ check_convert_identity flag-change-take-p1
       
   158   3:c8d50407916e
       
   159   *** BUG: hash changes on convert ***
       
   160   o    3:c8d50407916e p=2,1 m=2:36b69ba4b24b f=[]
       
   161   |\
       
   162   | o  2:99451f16b3f5 p=0,-1 m=2:36b69ba4b24b f=["b"]
       
   163   | |
       
   164   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   165   |/
       
   166   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"]
       
   167   
       
   168 
       
   169 An identical file added at both parents, but the flag differs. Take other:
       
   170 
       
   171   $ hg init flag-change-take-p2
       
   172   $ cd flag-change-take-p2
       
   173   $ touch a b
       
   174   $ hg ci -qAm0 a
       
   175   $ hg ci -qAm1 b
       
   176   $ hg up -q 0
       
   177   $ touch b
       
   178   $ chmod +x b
       
   179   $ hg ci -qAm2 b
       
   180 
       
   181   $ hg merge
       
   182   warning: cannot merge flags for b without common ancestor - keeping local flags
       
   183   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   184   (branch merge, don't forget to commit)
       
   185   $ chmod -x b
       
   186   $ hg ci --debug -m merge
       
   187   committing files:
       
   188   b
       
   189   committing manifest
       
   190   committing changelog
       
   191   updating the branch cache
       
   192   committed changeset 3:06a62a687d87c7d8944743dee1ee9d8c66b3f6e3
       
   193   $ hg log -GTl
       
   194   @    3:06a62a687d87 p=2,1 m=3:2a315ba1aa45 f=["b"]
       
   195   |\
       
   196   | o  2:99451f16b3f5 p=0,-1 m=2:36b69ba4b24b f=["b"]
       
   197   | |
       
   198   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   199   |/
       
   200   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"]
       
   201   
       
   202   $ hg files -vr3
       
   203            0   a
       
   204            0   b
       
   205 
       
   206   $ cd ..
       
   207   $ check_convert_identity flag-change-take-p2
       
   208 
       
   209 #endif
       
   210 
       
   211 An identical file added at both parents, one more file added at p2:
       
   212 
       
   213   $ hg init added-some-p2
       
   214   $ cd added-some-p2
       
   215   $ touch a b c
       
   216   $ hg ci -qAm0 a
       
   217   $ hg ci -qAm1 b
       
   218   $ hg ci -qAm2 c
       
   219   $ hg up -q 0
       
   220   $ touch b
       
   221   $ hg ci -qAm3 b
       
   222 
       
   223   $ hg merge
       
   224   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   225   (branch merge, don't forget to commit)
       
   226   $ hg ci --debug -m merge
       
   227   committing files:
       
   228   c
       
   229   committing manifest
       
   230   committing changelog
       
   231   updating the branch cache
       
   232   committed changeset 4:f7fbc4e4d9a8fde03ba475adad675578c8bf472d
       
   233   $ hg log -GTl
       
   234   @    4:f7fbc4e4d9a8 p=3,2 m=3:92acd5bfd716 f=[]
       
   235   |\
       
   236   | o  3:e9d9f3cc981f p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   237   | |
       
   238   o |  2:93c5529a4ec7 p=1,-1 m=2:ae25a31b30b3 f=["c"]
       
   239   | |
       
   240   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   241   |/
       
   242   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"]
       
   243   
       
   244 
       
   245   $ cd ..
       
   246   $ check_convert_identity added-some-p2
       
   247 
       
   248 An identical file added at both parents, one more file added at p1:
       
   249 (In this case, p1 manifest is reused at the merge commit, which means the
       
   250 manifest DAG does not have the same shape as the changelog.)
       
   251 
       
   252   $ hg init added-some-p1
       
   253   $ cd added-some-p1
       
   254   $ touch a b
       
   255   $ hg ci -qAm0 a
       
   256   $ hg ci -qAm1 b
       
   257   $ hg up -q 0
       
   258   $ touch b c
       
   259   $ hg ci -qAm2 b
       
   260   $ hg ci -qAm3 c
       
   261 
       
   262   $ hg merge
       
   263   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   264   (branch merge, don't forget to commit)
       
   265   $ hg ci --debug -m merge
       
   266   reusing manifest from p1 (no file change)
       
   267   committing changelog
       
   268   updating the branch cache
       
   269   committed changeset 4:a9f0f589a913f5a149dc10dfbd5af726977c36c4
       
   270   $ hg log -GTl
       
   271   @    4:a9f0f589a913 p=3,1 m=2:ae25a31b30b3 f=[]
       
   272   |\
       
   273   | o  3:b8dc385241b5 p=2,-1 m=2:ae25a31b30b3 f=["c"]
       
   274   | |
       
   275   | o  2:f00991f11eca p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   276   | |
       
   277   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"]
       
   278   |/
       
   279   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"]
       
   280   
       
   281 
       
   282   $ cd ..
       
   283   $ check_convert_identity added-some-p1
       
   284 
       
   285 A file added at p2, a named branch created at p1:
       
   286 
       
   287   $ hg init named-branch-p1
       
   288   $ cd named-branch-p1
       
   289   $ touch a b
       
   290   $ hg ci -qAm0 a
       
   291   $ hg ci -qAm1 b
       
   292   $ hg up -q 0
       
   293   $ hg branch -q foo
       
   294   $ hg ci -m2
       
   295 
       
   296   $ hg merge default
       
   297   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   298   (branch merge, don't forget to commit)
       
   299   $ hg ci --debug -m merge
       
   300   committing files:
       
   301   b
       
   302   committing manifest
       
   303   committing changelog
       
   304   updating the branch cache
       
   305   committed changeset 3:fb97d83b02fd072295cfc2171f21b7d38509bfd7
       
   306   $ hg log -GT'{l} branch={branch}'
       
   307   @    3:fb97d83b02fd p=2,1 m=2:9091c64f4ea1 f=[] branch=foo
       
   308   |\
       
   309   | o  2:a3a9fa6587e5 p=0,-1 m=0:8515d4bfda76 f=[] branch=foo
       
   310   | |
       
   311   o |  1:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] branch=default
       
   312   |/
       
   313   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] branch=default
       
   314   
       
   315 
       
   316   $ cd ..
       
   317   $ check_convert_identity named-branch-p1
       
   318 
       
   319 A file added at p1, a named branch created at p2:
       
   320 (In this case, p1 manifest is reused at the merge commit, which means the
       
   321 manifest DAG does not have the same shape as the changelog.)
       
   322 
       
   323   $ hg init named-branch-p2
       
   324   $ cd named-branch-p2
       
   325   $ touch a b
       
   326   $ hg ci -qAm0 a
       
   327   $ hg branch -q foo
       
   328   $ hg ci -m1
       
   329   $ hg up -q 0
       
   330   $ hg ci -qAm1 b
       
   331 
       
   332   $ hg merge foo
       
   333   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   334   (branch merge, don't forget to commit)
       
   335   $ hg ci --debug -m merge
       
   336   reusing manifest from p1 (no file change)
       
   337   committing changelog
       
   338   updating the branch cache
       
   339   committed changeset 3:036823e24692218324d4af43b07ff89f8a000096
       
   340   $ hg log -GT'{l} branch={branch}'
       
   341   @    3:036823e24692 p=2,1 m=1:686dbf0aeca4 f=[] branch=default
       
   342   |\
       
   343   | o  2:64d01526d4c2 p=0,-1 m=1:686dbf0aeca4 f=["b"] branch=default
       
   344   | |
       
   345   o |  1:da38c8e00727 p=0,-1 m=0:8515d4bfda76 f=[] branch=foo
       
   346   |/
       
   347   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] branch=default
       
   348   
       
   349 
       
   350   $ cd ..
       
   351   $ check_convert_identity named-branch-p2
       
   352 
       
   353 A file changed once at both parents, but amended to have identical content:
       
   354 
       
   355   $ hg init amend-p1
       
   356   $ cd amend-p1
       
   357   $ touch a
       
   358   $ hg ci -qAm0 a
       
   359   $ echo foo > a
       
   360   $ hg ci -m1
       
   361   $ hg up -q 0
       
   362   $ echo bar > a
       
   363   $ hg ci -qm2
       
   364   $ echo foo > a
       
   365   $ hg ci -qm3 --amend
       
   366 
       
   367   $ hg merge
       
   368   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
       
   369   (branch merge, don't forget to commit)
       
   370   $ hg ci --debug -m merge
       
   371   reusing manifest from p1 (no file change)
       
   372   committing changelog
       
   373   updating the branch cache
       
   374   committed changeset 3:314e5bc5adf5c58ea571efabe33eedba20a201aa
       
   375   $ hg log -GT'{l} branch={branch}'
       
   376   @    3:314e5bc5adf5 p=2,1 m=1:d33ea248bd73 f=[] branch=default
       
   377   |\
       
   378   | o  2:de9c64f226a3 p=0,-1 m=1:d33ea248bd73 f=["a"] branch=default
       
   379   | |
       
   380   o |  1:6a74aec01b3c p=0,-1 m=1:d33ea248bd73 f=["a"] branch=default
       
   381   |/
       
   382   o  0:487a0a245cea p=-1,-1 m=0:8515d4bfda76 f=["a"] branch=default
       
   383   
       
   384 
       
   385   $ cd ..
       
   386   $ check_convert_identity amend-p1