summaryrefslogtreecommitdiff
path: root/tests/test-histedit-no-change.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-histedit-no-change.t')
-rw-r--r--tests/test-histedit-no-change.t187
1 files changed, 187 insertions, 0 deletions
diff --git a/tests/test-histedit-no-change.t b/tests/test-histedit-no-change.t
new file mode 100644
index 0000000..6d9ce27
--- /dev/null
+++ b/tests/test-histedit-no-change.t
@@ -0,0 +1,187 @@
+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:^....::'
+ > # 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
+ > echo % start editing the history ${comment}
+ > HGEDITOR="sh ./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 ..