diff tests/test-histedit-no-change @ 17064:168cc52ad7c2

histedit: new extension for interactive history editing
author Augie Fackler <raf@durin42.com>
date Wed, 27 Jun 2012 17:52:54 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-histedit-no-change	Wed Jun 27 17:52:54 2012 -0500
@@ -0,0 +1,110 @@
+#!/bin/sh
+
+# test for 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
+}
+
+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"
+graphlog "log before editing"
+startediting 2 3 "(not changing anything)" # edit the 2nd of 3 changesets
+continueediting true "(leaving commit message unaltered)"
+
+echo "% check state of working copy"
+hg id
+
+graphlog "log after history editing"
+
+
+cd ..
+initrepo r2 "test editing with no change, then abort"
+graphlog "log before editing"
+startediting 1,2 3 "(not changing anything)" # edit the 1st two of 3 changesets
+continueediting true "(leaving commit message unaltered)"
+graphlog "log after first edit"
+
+echo % abort editing session
+hg histedit --abort 2>&1 | fixbundle
+
+graphlog "log after abort"
+
+echo % EOF