##// END OF EJS Templates
histedit: new extension for interactive history editing
histedit: new extension for interactive history editing

File last commit:

r17064:168cc52a default
r17064:168cc52a default
Show More
test-histedit-no-change
110 lines | 2.3 KiB | text/plain | TextLexer
/ tests / test-histedit-no-change
#!/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