diff tests/test-histedit-no-change.t @ 17085:35729bdd59b6

tests: convert histedit tests to .t Mostly a trivial conversion.
author Mads Kiilerich <mads@kiilerich.com>
date Sat, 30 Jun 2012 03:34:44 +0200
parents tests/test-histedit-no-change@168cc52ad7c2
children 5f2cacb715dc
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-histedit-no-change.t	Sat Jun 30 03:34:44 2012 +0200
@@ -0,0 +1,189 @@
+test for old histedit issue #6:
+editing a changeset without any actual change would corrupt the repository
+
+  $ . "$TESTDIR/histedit-helpers.sh"
+
+  $ cat >> $HGRCPATH <<EOF
+  > [extensions]
+  > graphlog=
+  > histedit=
+  > EOF
+
+  $ initrepo ()
+  > {
+  >     dir="$1"
+  >     comment="$2"
+  >     if [ -n "${comment}" ]; then
+  >         echo % ${comment}
+  >         echo % ${comment} | sed 's:.:-:g'
+  >     fi
+  >     hg init ${dir}
+  >     cd ${dir}
+  >     for x in a b c d e f ; do
+  >         echo $x > $x
+  >         hg add $x
+  >         hg ci -m $x
+  >     done
+  >     cd ..
+  > }
+
+  $ geneditor ()
+  > {
+  >     # generate an editor script for selecting changesets to be edited
+  >     choice=$1  # changesets that should be edited (using sed line ranges)
+  >     cat <<EOF | sed 's:^....::'
+  >     #!/bin/sh
+  >     # editing the rules, replacing 'pick' with 'edit' for the chosen lines
+  >     sed '${choice}s:^pick:edit:' \$1 > \${1}.tmp
+  >     mv \${1}.tmp \$1
+  >     # displaying the resulting rules, minus comments and empty lines
+  >     sed '/^#/d;/^$/d;s:^:| :' \$1 >&2
+  > EOF
+  > }
+
+  $ startediting ()
+  > {
+  >     # begin an editing session
+  >     choice="$1"  # changesets that should be edited
+  >     number="$2"  # number of changesets considered (from tip)
+  >     comment="$3"
+  >     geneditor "${choice}" > edit.sh
+  >     chmod +x edit.sh
+  >     echo % start editing the history ${comment}
+  >     HGEDITOR=./edit.sh hg histedit -- -${number} 2>&1 | fixbundle
+  > }
+
+  $ continueediting ()
+  > {
+  >     # continue an edit already in progress
+  >     editor="$1"  # message editor when finalizing editing
+  >     comment="$2"
+  >     echo % finalize changeset editing ${comment}
+  >     HGEDITOR=${editor} hg histedit --continue 2>&1 | fixbundle
+  > }
+
+  $ graphlog ()
+  > {
+  >     comment="${1:-log}"
+  >     echo % "${comment}"
+  >     hg glog --template '{rev} {node} \"{desc|firstline}\"\n'
+  > }
+
+
+  $ initrepo r1 "test editing with no change"
+  % test editing with no change
+  -----------------------------
+  $ cd r1
+  $ graphlog "log before editing"
+  % log before editing
+  @  5 652413bf663ef2a641cab26574e46d5f5a64a55a "f"
+  |
+  o  4 e860deea161a2f77de56603b340ebbb4536308ae "e"
+  |
+  o  3 055a42cdd88768532f9cf79daa407fc8d138de9b "d"
+  |
+  o  2 177f92b773850b59254aa5e923436f921b55483b "c"
+  |
+  o  1 d2ae7f538514cd87c17547b0de4cea71fe1af9fb "b"
+  |
+  o  0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a"
+  
+  $ startediting 2 3 "(not changing anything)" # edit the 2nd of 3 changesets
+  % start editing the history (not changing anything)
+  | pick 055a42cdd887 3 d
+  | edit e860deea161a 4 e
+  | pick 652413bf663e 5 f
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  abort: Make changes as needed, you may commit or record as needed now.
+  When you are finished, run hg histedit --continue to resume.
+  $ continueediting true "(leaving commit message unaltered)"
+  % finalize changeset editing (leaving commit message unaltered)
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+check state of working copy
+  $ hg id
+  652413bf663e tip
+
+  $ graphlog "log after history editing"
+  % log after history editing
+  @  5 652413bf663ef2a641cab26574e46d5f5a64a55a "f"
+  |
+  o  4 e860deea161a2f77de56603b340ebbb4536308ae "e"
+  |
+  o  3 055a42cdd88768532f9cf79daa407fc8d138de9b "d"
+  |
+  o  2 177f92b773850b59254aa5e923436f921b55483b "c"
+  |
+  o  1 d2ae7f538514cd87c17547b0de4cea71fe1af9fb "b"
+  |
+  o  0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a"
+  
+
+  $ cd ..
+
+  $ initrepo r2 "test editing with no change, then abort"
+  % test editing with no change, then abort
+  -----------------------------------------
+  $ cd r2
+  $ graphlog "log before editing"
+  % log before editing
+  @  5 652413bf663ef2a641cab26574e46d5f5a64a55a "f"
+  |
+  o  4 e860deea161a2f77de56603b340ebbb4536308ae "e"
+  |
+  o  3 055a42cdd88768532f9cf79daa407fc8d138de9b "d"
+  |
+  o  2 177f92b773850b59254aa5e923436f921b55483b "c"
+  |
+  o  1 d2ae7f538514cd87c17547b0de4cea71fe1af9fb "b"
+  |
+  o  0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a"
+  
+  $ startediting 1,2 3 "(not changing anything)" # edit the 1st two of 3 changesets
+  % start editing the history (not changing anything)
+  | edit 055a42cdd887 3 d
+  | edit e860deea161a 4 e
+  | pick 652413bf663e 5 f
+  0 files updated, 0 files merged, 3 files removed, 0 files unresolved
+  abort: Make changes as needed, you may commit or record as needed now.
+  When you are finished, run hg histedit --continue to resume.
+  $ continueediting true "(leaving commit message unaltered)"
+  % finalize changeset editing (leaving commit message unaltered)
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  abort: Make changes as needed, you may commit or record as needed now.
+  When you are finished, run hg histedit --continue to resume.
+  $ graphlog "log after first edit"
+  % log after first edit
+  o  5 652413bf663ef2a641cab26574e46d5f5a64a55a "f"
+  |
+  o  4 e860deea161a2f77de56603b340ebbb4536308ae "e"
+  |
+  @  3 055a42cdd88768532f9cf79daa407fc8d138de9b "d"
+  |
+  o  2 177f92b773850b59254aa5e923436f921b55483b "c"
+  |
+  o  1 d2ae7f538514cd87c17547b0de4cea71fe1af9fb "b"
+  |
+  o  0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a"
+  
+
+abort editing session
+  $ hg histedit --abort 2>&1 | fixbundle
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+  $ graphlog "log after abort"
+  % log after abort
+  @  5 652413bf663ef2a641cab26574e46d5f5a64a55a "f"
+  |
+  o  4 e860deea161a2f77de56603b340ebbb4536308ae "e"
+  |
+  o  3 055a42cdd88768532f9cf79daa407fc8d138de9b "d"
+  |
+  o  2 177f92b773850b59254aa5e923436f921b55483b "c"
+  |
+  o  1 d2ae7f538514cd87c17547b0de4cea71fe1af9fb "b"
+  |
+  o  0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a"
+  
+
+  $ cd ..