test-histedit-no-change
110 lines
| 2.3 KiB
| text/plain
|
TextLexer
/ tests / test-histedit-no-change
Augie Fackler
|
r17064 | #!/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 | ||||