tests/test-divergent.t
author Pulkit Goyal <7895pulkit@gmail.com>
Tue, 05 Jun 2018 21:02:09 +0530
changeset 3798 7c05ee4a8cc7
parent 3787 dc81a788f278
child 3799 037ccbf41c6d
permissions -rw-r--r--
tests: don't use mkcommit shell function in test-divergent.t Upcoming series will start merging commit descriptions while resolving content-divergence. This tests are here to test the basics of content-divegrence resolution and we should not be testing much of commit description merge here. Replacing mkcommit function with normal hg calls will help us decide on the commit messages ourselves and prevent conflicts while merging commit messages.

Tests the resolution of divergence

  $ cat >> $HGRCPATH <<EOF
  > [defaults]
  > amend=-d "0 0"
  > fold=-d "0 0"
  > [web]
  > push_ssl = false
  > allow_push = *
  > [phases]
  > publish = False
  > [diff]
  > git = 1
  > unified = 0
  > [ui]
  > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{troubles}]\n
  > [extensions]
  > EOF
  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH
  $ mkcommit() {
  >    echo "$1" > "$1"
  >    hg add "$1"
  >    hg ci -m "add $1"
  > }

  $ mkcommits() {
  >   for i in $@; do mkcommit $i ; done
  > }

Basic test of divergence: two divergent changesets with the same parents
With --all --any we dedupe the divergent and solve the divergence once

  $ hg init test1
  $ cd test1
  $ echo a > a
  $ hg ci -Aqm "added a"
  $ echo b > b
  $ hg ci -Aqm "added b"

  $ hg up .^
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo bdivergent > bdivergent1
  $ hg ci -Am "divergent1"
  adding bdivergent1
  created new head

  $ hg up .^
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo bdivergent > bdivergent2
  $ hg ci -Am "divergent2"
  adding bdivergent2
  created new head

  $ hg prune -s "desc(divergent1)" "desc('added b')"
  1 changesets pruned
  $ hg prune -s "desc(divergent2)" "desc('added b')" --hidden
  1 changesets pruned
  2 new content-divergent changesets

  $ hg log -G
  @  3:527aaa00354a@default(draft) divergent2 [content-divergent]
  |
  | *  2:e97948280e0f@default(draft) divergent1 [content-divergent]
  |/
  o  0:9092f1db7931@default(draft) added a []
  

  $ hg evolve --all --any --content-divergent
  merge:[2] divergent1
  with: [3] divergent2
  base: [1] added b
  updating to "local" side of the conflict: e97948280e0f
  merging "other" content-divergent changeset '527aaa00354a'
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  working directory is now at bcd04eb3c8c5
  $ hg log -G
  @  4:bcd04eb3c8c5@default(draft) divergent1 []
  |
  o  0:9092f1db7931@default(draft) added a []
  
Test divergence resolution when it yields to an empty commit (issue4950)
cdivergent2 contains the same content than cdivergent1 and they are divergent
versions of the revision _c

  $ hg up .^
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ mkcommit _c
  created new head

  $ hg up .^
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ mkcommit cdivergent1
  created new head

  $ hg up .^
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo "cdivergent1" > cdivergent1
  $ hg add cdivergent1
  $ hg ci -m "cdivergent2"
  created new head

  $ hg prune -s "desc(cdivergent1)" "desc(_c)"
  1 changesets pruned
  $ hg prune -s "desc(cdivergent2)" "desc(_c)" --hidden
  1 changesets pruned
  2 new content-divergent changesets

  $ hg log -G
  @  7:8debdf3c1fbd@default(draft) cdivergent2 [content-divergent]
  |
  | *  6:e3ff64ce8d4c@default(draft) add cdivergent1 [content-divergent]
  |/
  | o  4:bcd04eb3c8c5@default(draft) divergent1 []
  |/
  o  0:9092f1db7931@default(draft) added a []
  
  $ hg evolve --all --any --content-divergent
  merge:[6] add cdivergent1
  with: [7] cdivergent2
  base: [5] add _c
  updating to "local" side of the conflict: e3ff64ce8d4c
  merging "other" content-divergent changeset '8debdf3c1fbd'
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  nothing changed
  working directory is now at e3ff64ce8d4c

  $ cd ..

Test None docstring issue of evolve divergent, which caused hg crush

  $ hg init test2
  $ cd test2
  $ mkcommits _a _b

  $ hg up .^
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo bdivergent > bdivergent11
  $ hg ci -Am "bdivergent11"
  adding bdivergent11
  created new head

  $ hg up .^
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
  $ echo bdivergent > bdivergent22
  $ hg ci -Am "bdivergent22"
  adding bdivergent22
  created new head

  $ hg prune -s "desc(bdivergent11)" "desc(_b)"
  1 changesets pruned
  $ hg prune -s "desc(bdivergent22)" "desc(_b)" --hidden
  1 changesets pruned
  2 new content-divergent changesets
  $ hg log -G
  @  3:31e50386b33b@default(draft) bdivergent22 [content-divergent]
  |
  | *  2:4bcc9397dfb9@default(draft) bdivergent11 [content-divergent]
  |/
  o  0:135f39f4bd78@default(draft) add _a []
  

  $ cat >$TESTTMP/test_extension.py  << EOF
  > from mercurial import merge
  > origupdate = merge.update
  > def newupdate(*args, **kwargs):
  >   return origupdate(*args, **kwargs)
  > merge.update = newupdate
  > EOF
  $ cat >> $HGRCPATH << EOF
  > [extensions]
  > testextension=$TESTTMP/test_extension.py
  > EOF
  $ hg evolve --all
  nothing to evolve on current working copy parent
  (do you want to use --content-divergent)
  [2]
  $ hg evolve --content-divergent
  merge:[3] bdivergent22
  with: [2] bdivergent11
  base: [1] add _b
  merging "other" content-divergent changeset '4bcc9397dfb9'
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  working directory is now at 1a7876768e59

  $ cd ..