D818: tests: add tests for histedit copy and move

mbthomas (Mark Thomas) phabricator at mercurial-scm.org
Tue Sep 26 10:14:35 UTC 2017


mbthomas created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D818

AFFECTED FILES
  tests/test-histedit-copymove-obs.t
  tests/test-histedit-copymove.t

CHANGE DETAILS

diff --git a/tests/test-histedit-copymove.t b/tests/test-histedit-copymove.t
new file mode 100644
--- /dev/null
+++ b/tests/test-histedit-copymove.t
@@ -0,0 +1,255 @@
+  $ . "$TESTDIR/histedit-helpers.sh"
+
+  $ cat >> $HGRCPATH <<EOF
+  > [alias]
+  > tglog = log -G --template "{rev}:{node}:{phase} '{desc}'\n"
+  > [extensions]
+  > histedit=
+  > EOF
+
+Create repo with an additional commit not in the linear history
+
+  $ hg init repo
+  $ cd repo
+  $ echo base > base
+  $ hg add base
+  $ hg commit -m "base"
+  $ echo other1 > other1
+  $ hg add other1
+  $ hg commit -m "other 1"
+  $ hg up -q 0
+  $ for x in a b c ; do
+  >   echo $x > $x
+  >   hg add $x
+  >   hg commit -m $x
+  > done
+  created new head
+  $ hg tglog
+  @  4:f9d2e574dc5853aac398917ed798d8640e8203af:draft 'c'
+  |
+  o  3:c87fe1ae405ff0a6dcc1ce27064cb9d303a05734:draft 'b'
+  |
+  o  2:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:draft 'a'
+  |
+  | o  1:1bd41d4d54b3433c51c6074309626007aa50c41b:draft 'other 1'
+  |/
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:draft 'base'
+  
+Use histedit to copy the extra commit into the linear history
+
+  $ hg histedit 2 --commands - 2>&1 << EOF | fixbundle
+  > pick c604726e05fb
+  > pick c87fe1ae405f
+  > copy 1bd41d4d54b3
+  > pick f9d2e574dc58
+  > EOF
+
+  $ hg tglog
+  @  5:48cb5c108f6a0ba49cf4c19f51e95a07a31aeee5:draft 'c'
+  |
+  o  4:08093bb58cfe15f581872229983b45aef50ce2eb:draft 'other 1'
+  |
+  o  3:c87fe1ae405ff0a6dcc1ce27064cb9d303a05734:draft 'b'
+  |
+  o  2:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:draft 'a'
+  |
+  | o  1:1bd41d4d54b3433c51c6074309626007aa50c41b:draft 'other 1'
+  |/
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:draft 'base'
+  
+Use histedit to move the extra commit into the linear history
+
+  $ hg histedit 2 --command  - 2>&1 << EOF | fixbundle
+  > pick c604726e05fb
+  > move 1bd41d4d54b3
+  > pick c87fe1ae405f
+  > drop 08093bb58cfe
+  > pick 48cb5c108f6a
+  > EOF
+
+  $ hg tglog
+  @  4:f647aec54d8c9b7688f475eb90127eb6bda0bc22:draft 'c'
+  |
+  o  3:bc3bbfd1a1e54a2b37fdd1d09cd138ea8641c5c8:draft 'b'
+  |
+  o  2:674f74e24e11522e03d59ea2593d93a77b715b3f:draft 'other 1'
+  |
+  o  1:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:draft 'a'
+  |
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:draft 'base'
+  
+Try to use histedit to copy a non-existent commit
+
+  $ hg histedit 3 --command - 2>&1 << EOF | fixbundle
+  > pick bc3bbfd1a1e5
+  > copy 123456789abc
+  > pick f647aec54d8c
+  > EOF
+  hg: parse error: unknown changeset 123456789abc listed
+
+Try to use histedit to move a commit in the pick set
+
+  $ hg histedit 3 --command - 2>&1 << EOF | fixbundle
+  > pick bc3bbfd1a1e5
+  > pick f647aec54d8c
+  > move bc3bbfd1a1e5
+  > EOF
+  hg: parse error: move "bc3bbfd1a1e5" changeset was an edited list candidate
+  (move must only use unlisted changesets)
+
+Try to use histedit to move a commit from the linear history
+
+  $ hg histedit 3 --command - 2>&1 << EOF | fixbundle
+  > pick bc3bbfd1a1e5
+  > pick f647aec54d8c
+  > move c604726e05fb
+  > EOF
+  hg: parse error: move "c604726e05fb" is an ancestor of base changeset "674f74e24e11"
+  (use histedit with a larger range to move older changesets)
+
+Try to use histedit to move a public commit
+
+  $ hg phase -p 1
+  $ hg histedit 3 --command - 2>&1 << EOF | fixbundle
+  > pick bc3bbfd1a1e5
+  > pick f647aec54d8c
+  > move c604726e05fb
+  > EOF
+  hg: parse error: move "c604726e05fb" is public
+  (cannot move public changesets)
+
+Add a new branch with some more commits
+
+  $ hg up -q 1
+  $ for x in d e f ; do
+  >   echo $x > $x
+  >   hg add $x
+  >   hg commit -m $x
+  > done
+  created new head
+  $ hg tglog
+  @  7:5e8ba7becadd7603f9dc3930bf2eca7e1de7b5b7:draft 'f'
+  |
+  o  6:85655859b8253b037439b48987f0c55bb37a7561:draft 'e'
+  |
+  o  5:73c0a6e5dda8e5233bdfa4ee0ec172d719046e92:draft 'd'
+  |
+  | o  4:f647aec54d8c9b7688f475eb90127eb6bda0bc22:draft 'c'
+  | |
+  | o  3:bc3bbfd1a1e54a2b37fdd1d09cd138ea8641c5c8:draft 'b'
+  | |
+  | o  2:674f74e24e11522e03d59ea2593d93a77b715b3f:draft 'other 1'
+  |/
+  o  1:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:public 'a'
+  |
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:public 'base'
+  
+Try to use histedit to orphan a changeset - this just copies as obsolescence markers are disabled
+
+  $ hg histedit 5 --command - 2>&1 << EOF | fixbundle
+  > pick 73c0a6e5dda8 'd'
+  > pick 85655859b825 'e'
+  > move bc3bbfd1a1e5 'b' (has child changeset 'c')
+  > pick 5e8ba7becadd 'f'
+  > EOF
+  warning: orphaned descendants detected, not stripping bc3bbfd1a1e5
+  $ hg tglog
+  @  8:befbee4980c1f797ffcb4c408511bf71a06c0d07:draft 'f'
+  |
+  o  7:397d9f24f9c7bc877948318e48b1ec1d58d65381:draft 'b'
+  |
+  o  6:85655859b8253b037439b48987f0c55bb37a7561:draft 'e'
+  |
+  o  5:73c0a6e5dda8e5233bdfa4ee0ec172d719046e92:draft 'd'
+  |
+  | o  4:f647aec54d8c9b7688f475eb90127eb6bda0bc22:draft 'c'
+  | |
+  | o  3:bc3bbfd1a1e54a2b37fdd1d09cd138ea8641c5c8:draft 'b'
+  | |
+  | o  2:674f74e24e11522e03d59ea2593d93a77b715b3f:draft 'other 1'
+  |/
+  o  1:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:public 'a'
+  |
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:public 'base'
+  
+
+Try to use histedit to move an ancestor changeset while splitting history
+
+  $ hg histedit 5 --config experimental.histeditng=true --command - 2>&1 << EOF | fixbundle
+  > pick 73c0a6e5dda8 'd'
+  > base f647aec54d8c 'c'
+  > pick 85655859b825 'e'
+  > pick 397d9f24f9c7 'b'
+  > move 674f74e24e11 'other 1' (ancestor of 'c')
+  > pick befbee4980c1 'f'
+  > EOF
+  hg: parse error: move "674f74e24e11" is an ancestor of base changeset "f647aec54d8c"
+  (use histedit with a larger range to move older changesets)
+
+Add a new branch with some more commits
+
+  $ hg up -q 1
+  $ for x in g h ; do
+  >   echo $x > $x
+  >   hg add $x
+  >   hg commit -m $x
+  > done
+  created new head
+  $ hg tglog
+  @  10:9ed351767a9bcb2c1599c78c51a563b34a89a51d:draft 'h'
+  |
+  o  9:b715e87e9d48541c48201bebae76adab0c52c267:draft 'g'
+  |
+  | o  8:befbee4980c1f797ffcb4c408511bf71a06c0d07:draft 'f'
+  | |
+  | o  7:397d9f24f9c7bc877948318e48b1ec1d58d65381:draft 'b'
+  | |
+  | o  6:85655859b8253b037439b48987f0c55bb37a7561:draft 'e'
+  | |
+  | o  5:73c0a6e5dda8e5233bdfa4ee0ec172d719046e92:draft 'd'
+  |/
+  | o  4:f647aec54d8c9b7688f475eb90127eb6bda0bc22:draft 'c'
+  | |
+  | o  3:bc3bbfd1a1e54a2b37fdd1d09cd138ea8641c5c8:draft 'b'
+  | |
+  | o  2:674f74e24e11522e03d59ea2593d93a77b715b3f:draft 'other 1'
+  |/
+  o  1:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:public 'a'
+  |
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:public 'base'
+  
+
+Use histedit to copy and move changesets while splitting history
+
+  $ hg histedit 9 --config experimental.histeditng=true --command - 2>&1 << EOF | fixbundle
+  > pick 9ed351767a9b 'h'
+  > base f647aec54d8c 'c'
+  > copy 85655859b825 'e'
+  > pick b715e87e9d48 'g'
+  > move befbee4980c1 'f'
+  > EOF
+  $ hg tglog
+  @  11:a243a7bd85a097c807ee9009c97af5f111ef6241:draft 'f'
+  |
+  o  10:c33a0add54804e6555c0e1c1ca930df2f39e0251:draft 'g'
+  |
+  o  9:eeabd497703b4776a37a8f49fa50ea894aef97d3:draft 'e'
+  |
+  | o  8:0650d87880a6a3b54da277dbd4eecc68fba74c2f:draft 'h'
+  | |
+  | | o  7:397d9f24f9c7bc877948318e48b1ec1d58d65381:draft 'b'
+  | | |
+  | | o  6:85655859b8253b037439b48987f0c55bb37a7561:draft 'e'
+  | | |
+  | | o  5:73c0a6e5dda8e5233bdfa4ee0ec172d719046e92:draft 'd'
+  | |/
+  o |  4:f647aec54d8c9b7688f475eb90127eb6bda0bc22:draft 'c'
+  | |
+  o |  3:bc3bbfd1a1e54a2b37fdd1d09cd138ea8641c5c8:draft 'b'
+  | |
+  o |  2:674f74e24e11522e03d59ea2593d93a77b715b3f:draft 'other 1'
+  |/
+  o  1:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:public 'a'
+  |
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:public 'base'
+  
diff --git a/tests/test-histedit-copymove-obs.t b/tests/test-histedit-copymove-obs.t
new file mode 100644
--- /dev/null
+++ b/tests/test-histedit-copymove-obs.t
@@ -0,0 +1,70 @@
+  $ . "$TESTDIR/histedit-helpers.sh"
+
+  $ cat >> $HGRCPATH <<EOF
+  > [alias]
+  > tglog = log -G --template "{rev}:{node}:{phase} '{desc}'\n"
+  > [extensions]
+  > histedit=
+  > [experimental]
+  > evolution=createmarkers, allowunstable
+  > EOF
+
+Create repo with two branches
+
+  $ hg init repo
+  $ cd repo
+  $ echo base > base
+  $ hg add base
+  $ hg commit -m "base"
+  $ for x in a b c ; do
+  >   echo $x > $x
+  >   hg add $x
+  >   hg commit -m $x
+  > done
+  $ hg up -q 0
+  $ for x in d e f ; do
+  >   echo $x > $x
+  >   hg add $x
+  >   hg commit -m $x
+  > done
+  created new head
+  $ hg tglog
+  @  6:1eb7eda15cd7b2222738a7c9b47d1f51349b2bdb:draft 'f'
+  |
+  o  5:581a2eefdc84e2ec03c03b152f4982eefd77d7d8:draft 'e'
+  |
+  o  4:331acda6ee0072ace4b46c46bf80bb585d55d799:draft 'd'
+  |
+  | o  3:f9d2e574dc5853aac398917ed798d8640e8203af:draft 'c'
+  | |
+  | o  2:c87fe1ae405ff0a6dcc1ce27064cb9d303a05734:draft 'b'
+  | |
+  | o  1:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:draft 'a'
+  |/
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:draft 'base'
+  
+Use histedit to orphan a changeset
+
+  $ hg histedit 4 --command - 2>&1 << EOF | fixbundle
+  > p 331acda6ee
+  > p 581a2eefdc
+  > v c87fe1ae40
+  > p 1eb7eda15c
+  > EOF
+  $ hg tglog
+  @  8:b5b75ed229c82a78962586c18f88e923a09fcbe1:draft 'f'
+  |
+  o  7:7a1a952d8f3643e0afae039e737b10b99a40ca03:draft 'b'
+  |
+  o  5:581a2eefdc84e2ec03c03b152f4982eefd77d7d8:draft 'e'
+  |
+  o  4:331acda6ee0072ace4b46c46bf80bb585d55d799:draft 'd'
+  |
+  | o  3:f9d2e574dc5853aac398917ed798d8640e8203af:draft 'c'
+  | |
+  | x  2:c87fe1ae405ff0a6dcc1ce27064cb9d303a05734:draft 'b'
+  | |
+  | o  1:c604726e05fb3a349978173b3ab4a3ee6e43cd6c:draft 'a'
+  |/
+  o  0:d20a80d4def38df63a4b330b7fb688f3d4cae1e3:draft 'base'
+  



To: mbthomas, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list