mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
6e45a5e5e2
Before this patch, "message" action of "hg histedit" uses "ui.edit()" explicitly to get commit message edited manually. This requires explicit "localrepository.savecommitmessage()" invocation to save edited commit message into ".hg/last-message.txt", because unexpected exception raising may abort command execution before saving it in "localrepository.commit()". This patch uses "editor" argument of "localrepository.commit()" instead of explicit "ui.edit()" invocation for "message" action of "hg histedit" "localrepository.commit()" will invoke "editor()" function newly added in this patch, and save edited commit message into ".hg/last-message.txt" automatically.
301 lines
7.8 KiB
Perl
301 lines
7.8 KiB
Perl
$ . "$TESTDIR/histedit-helpers.sh"
|
|
|
|
$ cat >> $HGRCPATH <<EOF
|
|
> [extensions]
|
|
> histedit=
|
|
> EOF
|
|
|
|
$ initrepo ()
|
|
> {
|
|
> hg init r
|
|
> cd r
|
|
> for x in a b c d e f ; do
|
|
> echo $x > $x
|
|
> hg add $x
|
|
> hg ci -m $x
|
|
> done
|
|
> }
|
|
|
|
$ initrepo
|
|
|
|
log before edit
|
|
$ hg log --graph
|
|
@ changeset: 5:652413bf663e
|
|
| tag: tip
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: f
|
|
|
|
|
o changeset: 4:e860deea161a
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: e
|
|
|
|
|
o changeset: 3:055a42cdd887
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: d
|
|
|
|
|
o changeset: 2:177f92b77385
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: c
|
|
|
|
|
o changeset: 1:d2ae7f538514
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: b
|
|
|
|
|
o changeset: 0:cb9a9f314b8b
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
|
|
edit the history
|
|
$ hg histedit 177f92b77385 --commands - 2>&1 << EOF| fixbundle
|
|
> pick 177f92b77385 c
|
|
> pick 055a42cdd887 d
|
|
> edit e860deea161a e
|
|
> pick 652413bf663e f
|
|
> EOF
|
|
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
|
|
Make changes as needed, you may commit or record as needed now.
|
|
When you are finished, run hg histedit --continue to resume.
|
|
|
|
Go at a random point and try to continue
|
|
|
|
$ hg id -n
|
|
3+
|
|
$ hg up 0
|
|
abort: histedit in progress
|
|
(use 'hg histedit --continue' or 'hg histedit --abort')
|
|
[255]
|
|
|
|
commit, then edit the revision
|
|
$ hg ci -m 'wat'
|
|
created new head
|
|
$ echo a > e
|
|
$ HGEDITOR='echo foobaz > ' hg histedit --continue 2>&1 | fixbundle
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
$ hg log --graph
|
|
@ changeset: 6:b5f70786f9b0
|
|
| tag: tip
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: f
|
|
|
|
|
o changeset: 5:a5e1ba2f7afb
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: foobaz
|
|
|
|
|
o changeset: 4:1a60820cd1f6
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: wat
|
|
|
|
|
o changeset: 3:055a42cdd887
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: d
|
|
|
|
|
o changeset: 2:177f92b77385
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: c
|
|
|
|
|
o changeset: 1:d2ae7f538514
|
|
| user: test
|
|
| date: Thu Jan 01 00:00:00 1970 +0000
|
|
| summary: b
|
|
|
|
|
o changeset: 0:cb9a9f314b8b
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: a
|
|
|
|
|
|
$ hg cat e
|
|
a
|
|
|
|
check histedit_source
|
|
|
|
$ hg log --debug --rev 5
|
|
changeset: 5:a5e1ba2f7afb899ef1581cea528fd885d2fca70d
|
|
phase: draft
|
|
parent: 4:1a60820cd1f6004a362aa622ebc47d59bc48eb34
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
manifest: 5:5ad3be8791f39117565557781f5464363b918a45
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
files: e
|
|
extra: branch=default
|
|
extra: histedit_source=e860deea161a2f77de56603b340ebbb4536308ae
|
|
description:
|
|
foobaz
|
|
|
|
|
|
|
|
$ hg histedit tip --commands - 2>&1 <<EOF| fixbundle
|
|
> edit b5f70786f9b0 f
|
|
> EOF
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
Make changes as needed, you may commit or record as needed now.
|
|
When you are finished, run hg histedit --continue to resume.
|
|
$ hg status
|
|
A f
|
|
|
|
$ hg summary
|
|
parent: 5:a5e1ba2f7afb
|
|
foobaz
|
|
branch: default
|
|
commit: 1 added (new branch head)
|
|
update: 1 new changesets (update)
|
|
hist: 1 remaining (histedit --continue)
|
|
|
|
$ HGEDITOR='true' hg histedit --continue
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
saved backup bundle to $TESTTMP/r/.hg/strip-backup/b5f70786f9b0-backup.hg (glob)
|
|
|
|
$ hg status
|
|
|
|
log after edit
|
|
$ hg log --limit 1
|
|
changeset: 6:a107ee126658
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: f
|
|
|
|
|
|
say we'll change the message, but don't.
|
|
$ cat > ../edit.sh <<EOF
|
|
> cat "\$1" | sed s/pick/mess/ > tmp
|
|
> mv tmp "\$1"
|
|
> EOF
|
|
$ HGEDITOR="sh ../edit.sh" hg histedit tip 2>&1 | fixbundle
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg status
|
|
$ hg log --limit 1
|
|
changeset: 6:1fd3b2fe7754
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: f
|
|
|
|
|
|
modify the message
|
|
|
|
check saving last-message.txt, at first
|
|
|
|
$ cat > $TESTTMP/commitfailure.py <<EOF
|
|
> from mercurial import util
|
|
> def reposetup(ui, repo):
|
|
> class commitfailure(repo.__class__):
|
|
> def commit(self, *args, **kwargs):
|
|
> raise util.Abort('emulating unexpected abort')
|
|
> repo.__class__ = commitfailure
|
|
> EOF
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> # this failure occurs before editor invocation
|
|
> commitfailure = $TESTTMP/commitfailure.py
|
|
> EOF
|
|
|
|
$ cat > $TESTTMP/editor.sh <<EOF
|
|
> echo "==== before editing"
|
|
> cat \$1
|
|
> echo "===="
|
|
> echo "check saving last-message.txt" >> \$1
|
|
> EOF
|
|
|
|
(test that editor is not invoked before transaction starting)
|
|
|
|
$ rm -f .hg/last-message.txt
|
|
$ HGEDITOR="sh $TESTTMP/editor.sh" hg histedit tip --commands - 2>&1 << EOF | fixbundle
|
|
> mess 1fd3b2fe7754 f
|
|
> EOF
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
abort: emulating unexpected abort
|
|
$ cat .hg/last-message.txt
|
|
cat: .hg/last-message.txt: No such file or directory
|
|
[1]
|
|
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [extensions]
|
|
> commitfailure = !
|
|
> EOF
|
|
$ hg histedit --abort -q
|
|
|
|
(test that editor is invoked and commit message is saved into
|
|
"last-message.txt")
|
|
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [hooks]
|
|
> # this failure occurs after editor invocation
|
|
> pretxncommit.unexpectedabort = false
|
|
> EOF
|
|
|
|
$ rm -f .hg/last-message.txt
|
|
$ HGEDITOR="sh $TESTTMP/editor.sh" hg histedit tip --commands - 2>&1 << EOF | fixbundle
|
|
> mess 1fd3b2fe7754 f
|
|
> EOF
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
==== before editing
|
|
f
|
|
====
|
|
transaction abort!
|
|
rollback completed
|
|
note: commit message saved in .hg/last-message.txt
|
|
abort: pretxncommit.unexpectedabort hook exited with status 1
|
|
$ cat .hg/last-message.txt
|
|
f
|
|
check saving last-message.txt
|
|
|
|
$ cat >> .hg/hgrc <<EOF
|
|
> [hooks]
|
|
> pretxncommit.unexpectedabort =
|
|
> EOF
|
|
$ hg histedit --abort -q
|
|
|
|
then, check "modify the message" itself
|
|
|
|
$ hg histedit tip --commands - 2>&1 << EOF | fixbundle
|
|
> mess 1fd3b2fe7754 f
|
|
> EOF
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ hg status
|
|
$ hg log --limit 1
|
|
changeset: 6:62feedb1200e
|
|
tag: tip
|
|
user: test
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
summary: f
|
|
|
|
|
|
rollback should not work after a histedit
|
|
$ hg rollback
|
|
no rollback information available
|
|
[1]
|
|
|
|
$ cd ..
|
|
$ hg clone -qr0 r r0
|
|
$ cd r0
|
|
$ hg phase -fdr0
|
|
$ hg histedit --commands - 0 2>&1 << EOF
|
|
> edit cb9a9f314b8b a > $EDITED
|
|
> EOF
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
adding a
|
|
Make changes as needed, you may commit or record as needed now.
|
|
When you are finished, run hg histedit --continue to resume.
|
|
[1]
|
|
$ HGEDITOR=true hg histedit --continue
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
saved backup bundle to $TESTTMP/r0/.hg/strip-backup/cb9a9f314b8b-backup.hg (glob)
|