test-histedit-arguments.t
590 lines
| 15.2 KiB
| text/troff
|
Tads3Lexer
/ tests / test-histedit-arguments.t
|
r19035 | Test argument handling and various data parsing | ||
================================================== | ||||
Enable extensions used by this test. | ||||
$ cat >>$HGRCPATH <<EOF | ||||
> [extensions] | ||||
> histedit= | ||||
> EOF | ||||
Repo setup. | ||||
$ hg init foo | ||||
$ cd foo | ||||
$ echo alpha >> alpha | ||||
$ hg addr | ||||
adding alpha | ||||
$ hg ci -m one | ||||
$ echo alpha >> alpha | ||||
$ hg ci -m two | ||||
$ echo alpha >> alpha | ||||
$ hg ci -m three | ||||
$ echo alpha >> alpha | ||||
$ hg ci -m four | ||||
$ echo alpha >> alpha | ||||
$ hg ci -m five | ||||
$ hg log --style compact --graph | ||||
@ 4[tip] 08d98a8350f3 1970-01-01 00:00 +0000 test | ||||
| five | ||||
| | ||||
o 3 c8e68270e35a 1970-01-01 00:00 +0000 test | ||||
| four | ||||
| | ||||
o 2 eb57da33312f 1970-01-01 00:00 +0000 test | ||||
| three | ||||
| | ||||
o 1 579e40513370 1970-01-01 00:00 +0000 test | ||||
| two | ||||
| | ||||
o 0 6058cbb6cfd7 1970-01-01 00:00 +0000 test | ||||
one | ||||
|
r22368 | histedit --continue/--abort with no existing state | ||
-------------------------------------------------- | ||||
$ hg histedit --continue | ||||
abort: no histedit in progress | ||||
[255] | ||||
$ hg histedit --abort | ||||
abort: no histedit in progress | ||||
[255] | ||||
|
r19035 | Run a dummy edit to make sure we get tip^^ correctly via revsingle. | ||
-------------------------------------------------------------------- | ||||
$ HGEDITOR=cat hg histedit "tip^^" | ||||
pick eb57da33312f 2 three | ||||
pick c8e68270e35a 3 four | ||||
pick 08d98a8350f3 4 five | ||||
# Edit history between eb57da33312f and 08d98a8350f3 | ||||
# | ||||
|
r20503 | # Commits are listed from least to most recent | ||
# | ||||
|
r28396 | # You can reorder changesets by reordering the lines | ||
# | ||||
|
r19035 | # Commands: | ||
|
r27674 | # | ||
# e, edit = use commit, but stop for amending | ||||
# m, mess = edit commit message without changing commit content | ||||
|
r19035 | # p, pick = use commit | ||
|
r34490 | # b, base = checkout changeset and apply further changesets from there | ||
|
r27674 | # d, drop = remove commit from history | ||
|
r20511 | # f, fold = use commit, but combine it with the one above | ||
|
r31056 | # r, roll = like fold, but discard this commit's description and date | ||
|
r19035 | # | ||
Run on a revision not ancestors of the current working directory. | ||||
-------------------------------------------------------------------- | ||||
$ hg up 2 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg histedit -r 4 | ||||
abort: 08d98a8350f3 is not an ancestor of working directory | ||||
[255] | ||||
|
r19039 | $ hg up --quiet | ||
|
r20806 | |||
Test that we pick the minimum of a revrange | ||||
--------------------------------------- | ||||
$ HGEDITOR=cat hg histedit '2::' --commands - << EOF | ||||
> pick eb57da33312f 2 three | ||||
> pick c8e68270e35a 3 four | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
$ hg up --quiet | ||||
$ HGEDITOR=cat hg histedit 'tip:2' --commands - << EOF | ||||
> pick eb57da33312f 2 three | ||||
> pick c8e68270e35a 3 four | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
$ hg up --quiet | ||||
|
r24009 | Test config specified default | ||
----------------------------- | ||||
$ HGEDITOR=cat hg histedit --config "histedit.defaultrev=only(.) - ::eb57da33312f" --commands - << EOF | ||||
> pick c8e68270e35a 3 four | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
|
r19847 | Run on a revision not descendants of the initial parent | ||
-------------------------------------------------------------------- | ||||
Test the message shown for inconsistent histedit state, which may be | ||||
created (and forgotten) by Mercurial earlier than 2.7. This emulates | ||||
Mercurial earlier than 2.7 by renaming ".hg/histedit-state" | ||||
temporarily. | ||||
|
r24764 | $ hg log -G -T '{rev} {shortest(node)} {desc}\n' -r 2:: | ||
@ 4 08d9 five | ||||
| | ||||
o 3 c8e6 four | ||||
| | ||||
o 2 eb57 three | ||||
| | ||||
|
r28627 | ~ | ||
|
r19847 | $ HGEDITOR=cat hg histedit -r 4 --commands - << EOF | ||
> edit 08d98a8350f3 4 five | ||||
> EOF | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
reverting alpha | ||||
|
r27629 | Editing (08d98a8350f3), you may commit or record as needed now. | ||
(hg histedit --continue to resume) | ||||
|
r19847 | [1] | ||
|
r28123 | $ hg graft --continue | ||
abort: no graft in progress | ||||
(continue: hg histedit --continue) | ||||
[255] | ||||
|
r19847 | $ mv .hg/histedit-state .hg/histedit-state.back | ||
$ hg update --quiet --clean 2 | ||||
|
r24764 | $ echo alpha >> alpha | ||
|
r19847 | $ mv .hg/histedit-state.back .hg/histedit-state | ||
$ hg histedit --continue | ||||
|
r35394 | saved backup bundle to $TESTTMP/foo/.hg/strip-backup/08d98a8350f3-02594089-histedit.hg | ||
|
r24764 | $ hg log -G -T '{rev} {shortest(node)} {desc}\n' -r 2:: | ||
@ 4 f5ed five | ||||
| | ||||
| o 3 c8e6 four | ||||
|/ | ||||
o 2 eb57 three | ||||
| | ||||
|
r28627 | ~ | ||
|
r19847 | |||
|
r33351 | $ hg unbundle -q $TESTTMP/foo/.hg/strip-backup/08d98a8350f3-02594089-histedit.hg | ||
|
r24764 | $ hg strip -q -r f5ed --config extensions.strip= | ||
$ hg up -q 08d98a8350f3 | ||||
|
r19847 | |||
|
r19040 | Test that missing revisions are detected | ||
--------------------------------------- | ||||
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF | ||||
> pick eb57da33312f 2 three | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
|
r27545 | hg: parse error: missing rules for changeset c8e68270e35a | ||
|
r29970 | (use "drop c8e68270e35a" to discard, see also: 'hg help -e histedit.config') | ||
|
r19040 | [255] | ||
|
r19041 | Test that extra revisions are detected | ||
--------------------------------------- | ||||
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF | ||||
> pick 6058cbb6cfd7 0 one | ||||
> pick c8e68270e35a 3 four | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
|
r27955 | hg: parse error: pick "6058cbb6cfd7" changeset was not a candidate | ||
|
r27712 | (only use listed changesets) | ||
|
r19041 | [255] | ||
|
r19042 | Test malformed line | ||
--------------------------------------- | ||||
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF | ||||
> pickeb57da33312f2three | ||||
> pick c8e68270e35a 3 four | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
|
r27545 | hg: parse error: malformed line "pickeb57da33312f2three" | ||
|
r19042 | [255] | ||
|
r19043 | Test unknown changeset | ||
--------------------------------------- | ||||
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF | ||||
> pick 0123456789ab 2 three | ||||
> pick c8e68270e35a 3 four | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
|
r27545 | hg: parse error: unknown changeset 0123456789ab listed | ||
|
r19043 | [255] | ||
|
r19044 | Test unknown command | ||
--------------------------------------- | ||||
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF | ||||
> coin eb57da33312f 2 three | ||||
> pick c8e68270e35a 3 four | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
|
r27545 | hg: parse error: unknown action "coin" | ||
|
r19044 | [255] | ||
|
r19047 | Test duplicated changeset | ||
--------------------------------------- | ||||
So one is missing and one appear twice. | ||||
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF | ||||
> pick eb57da33312f 2 three | ||||
> pick eb57da33312f 2 three | ||||
> pick 08d98a8350f3 4 five | ||||
> EOF | ||||
|
r27545 | hg: parse error: duplicated command for changeset eb57da33312f | ||
|
r19047 | [255] | ||
|
r27547 | Test bogus rev | ||
--------------------------------------- | ||||
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF | ||||
> pick eb57da33312f 2 three | ||||
|
r37124 | > pick 0u98 | ||
|
r27547 | > pick 08d98a8350f3 4 five | ||
> EOF | ||||
|
r37124 | hg: parse error: invalid changeset 0u98 | ||
|
r27547 | [255] | ||
|
r19039 | Test short version of command | ||
--------------------------------------- | ||||
Note: we use varying amounts of white space between command name and changeset | ||||
short hash. This tests issue3893. | ||||
$ HGEDITOR=cat hg histedit "tip^^" --commands - << EOF | ||||
> pick eb57da33312f 2 three | ||||
> p c8e68270e35a 3 four | ||||
> f 08d98a8350f3 4 five | ||||
> EOF | ||||
four | ||||
*** | ||||
five | ||||
HG: Enter commit message. Lines beginning with 'HG:' are removed. | ||||
HG: Leave message empty to abort commit. | ||||
HG: -- | ||||
HG: user: test | ||||
HG: branch 'default' | ||||
HG: changed alpha | ||||
|
r35394 | saved backup bundle to $TESTTMP/foo/.hg/strip-backup/c8e68270e35a-63d8b8d8-histedit.hg | ||
|
r20806 | |||
$ hg update -q 2 | ||||
$ echo x > x | ||||
$ hg add x | ||||
$ hg commit -m'x' x | ||||
created new head | ||||
$ hg histedit -r 'heads(all())' | ||||
abort: The specified revisions must have exactly one common root | ||||
[255] | ||||
|
r21858 | |||
Test that trimming description using multi-byte characters | ||||
-------------------------------------------------------------------- | ||||
|
r33262 | $ $PYTHON <<EOF | ||
|
r36190 | > fp = open('logfile', 'wb') | ||
> fp.write(b'12345678901234567890123456789012345678901234567890' + | ||||
> b'12345') # there are 5 more columns for 80 columns | ||||
|
r21858 | > | ||
> # 2 x 4 = 8 columns, but 3 x 4 = 12 bytes | ||||
> fp.write(u'\u3042\u3044\u3046\u3048'.encode('utf-8')) | ||||
> | ||||
> fp.close() | ||||
> EOF | ||||
$ echo xx >> x | ||||
$ hg --encoding utf-8 commit --logfile logfile | ||||
$ HGEDITOR=cat hg --encoding utf-8 histedit tip | ||||
pick 3d3ea1f3a10b 5 1234567890123456789012345678901234567890123456789012345\xe3\x81\x82... (esc) | ||||
# Edit history between 3d3ea1f3a10b and 3d3ea1f3a10b | ||||
# | ||||
# Commits are listed from least to most recent | ||||
# | ||||
|
r28396 | # You can reorder changesets by reordering the lines | ||
# | ||||
|
r21858 | # Commands: | ||
|
r27674 | # | ||
# e, edit = use commit, but stop for amending | ||||
# m, mess = edit commit message without changing commit content | ||||
|
r21858 | # p, pick = use commit | ||
|
r34490 | # b, base = checkout changeset and apply further changesets from there | ||
|
r27674 | # d, drop = remove commit from history | ||
|
r21858 | # f, fold = use commit, but combine it with the one above | ||
|
r31056 | # r, roll = like fold, but discard this commit's description and date | ||
|
r21858 | # | ||
|
r25330 | |||
Test --continue with --keep | ||||
$ hg strip -q -r . --config extensions.strip= | ||||
$ hg histedit '.^' -q --keep --commands - << EOF | ||||
> edit eb57da33312f 2 three | ||||
> pick f3cfcca30c44 4 x | ||||
> EOF | ||||
|
r27629 | Editing (eb57da33312f), you may commit or record as needed now. | ||
(hg histedit --continue to resume) | ||||
|
r25330 | [1] | ||
$ echo edit >> alpha | ||||
$ hg histedit -q --continue | ||||
$ hg log -G -T '{rev}:{node|short} {desc}' | ||||
@ 6:8fda0c726bf2 x | ||||
| | ||||
o 5:63379946892c three | ||||
| | ||||
| o 4:f3cfcca30c44 x | ||||
| | | ||||
| | o 3:2a30f3cfee78 four | ||||
| |/ *** | ||||
| | five | ||||
| o 2:eb57da33312f three | ||||
|/ | ||||
o 1:579e40513370 two | ||||
| | ||||
o 0:6058cbb6cfd7 one | ||||
|
r26584 | |||
Test that abort fails gracefully on exception | ||||
---------------------------------------------- | ||||
$ hg histedit . -q --commands - << EOF | ||||
> edit 8fda0c726bf2 6 x | ||||
> EOF | ||||
|
r27629 | Editing (8fda0c726bf2), you may commit or record as needed now. | ||
(hg histedit --continue to resume) | ||||
|
r26584 | [1] | ||
Corrupt histedit state file | ||||
$ sed 's/8fda0c726bf2/123456789012/' .hg/histedit-state > ../corrupt-histedit | ||||
$ mv ../corrupt-histedit .hg/histedit-state | ||||
$ hg histedit --abort | ||||
warning: encountered an exception during histedit --abort; the repository may not have been completely cleaned up | ||||
|
r35230 | abort: $TESTTMP/foo/.hg/strip-backup/*-histedit.hg: $ENOENT$ (glob) (windows !) | ||
abort: $ENOENT$: $TESTTMP/foo/.hg/strip-backup/*-histedit.hg (glob) (no-windows !) | ||||
|
r26584 | [255] | ||
Histedit state has been exited | ||||
$ hg summary -q | ||||
parent: 5:63379946892c | ||||
commit: 1 added, 1 unknown (new branch head) | ||||
update: 4 new changesets (update) | ||||
|
r27262 | $ cd .. | ||
Set up default base revision tests | ||||
$ hg init defaultbase | ||||
$ cd defaultbase | ||||
$ touch foo | ||||
$ hg -q commit -A -m root | ||||
$ echo 1 > foo | ||||
$ hg commit -m 'public 1' | ||||
$ hg phase --force --public -r . | ||||
$ echo 2 > foo | ||||
$ hg commit -m 'draft after public' | ||||
$ hg -q up -r 1 | ||||
$ echo 3 > foo | ||||
$ hg commit -m 'head 1 public' | ||||
created new head | ||||
$ hg phase --force --public -r . | ||||
$ echo 4 > foo | ||||
$ hg commit -m 'head 1 draft 1' | ||||
$ echo 5 > foo | ||||
$ hg commit -m 'head 1 draft 2' | ||||
$ hg -q up -r 2 | ||||
$ echo 6 > foo | ||||
$ hg commit -m 'head 2 commit 1' | ||||
$ echo 7 > foo | ||||
$ hg commit -m 'head 2 commit 2' | ||||
$ hg -q up -r 2 | ||||
$ echo 8 > foo | ||||
$ hg commit -m 'head 3' | ||||
created new head | ||||
$ hg -q up -r 2 | ||||
$ echo 9 > foo | ||||
$ hg commit -m 'head 4' | ||||
created new head | ||||
$ hg merge --tool :local -r 8 | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg commit -m 'merge head 3 into head 4' | ||||
$ echo 11 > foo | ||||
$ hg commit -m 'commit 1 after merge' | ||||
$ echo 12 > foo | ||||
$ hg commit -m 'commit 2 after merge' | ||||
$ hg log -G -T '{rev}:{node|short} {phase} {desc}\n' | ||||
@ 12:8cde254db839 draft commit 2 after merge | ||||
| | ||||
o 11:6f2f0241f119 draft commit 1 after merge | ||||
| | ||||
o 10:90506cc76b00 draft merge head 3 into head 4 | ||||
|\ | ||||
| o 9:f8607a373a97 draft head 4 | ||||
| | | ||||
o | 8:0da92be05148 draft head 3 | ||||
|/ | ||||
| o 7:4c35cdf97d5e draft head 2 commit 2 | ||||
| | | ||||
| o 6:931820154288 draft head 2 commit 1 | ||||
|/ | ||||
| o 5:8cdc02b9bc63 draft head 1 draft 2 | ||||
| | | ||||
| o 4:463b8c0d2973 draft head 1 draft 1 | ||||
| | | ||||
| o 3:23a0c4eefcbf public head 1 public | ||||
| | | ||||
o | 2:4117331c3abb draft draft after public | ||||
|/ | ||||
o 1:4426d359ea59 public public 1 | ||||
| | ||||
o 0:54136a8ddf32 public root | ||||
Default base revision should stop at public changesets | ||||
$ hg -q up 8cdc02b9bc63 | ||||
$ hg histedit --commands - <<EOF | ||||
> pick 463b8c0d2973 | ||||
> pick 8cdc02b9bc63 | ||||
> EOF | ||||
Default base revision should stop at branchpoint | ||||
$ hg -q up 4c35cdf97d5e | ||||
$ hg histedit --commands - <<EOF | ||||
> pick 931820154288 | ||||
> pick 4c35cdf97d5e | ||||
> EOF | ||||
Default base revision should stop at merge commit | ||||
$ hg -q up 8cde254db839 | ||||
$ hg histedit --commands - <<EOF | ||||
> pick 6f2f0241f119 | ||||
> pick 8cde254db839 | ||||
> EOF | ||||
|
r28359 | |||
commit --amend should abort if histedit is in progress | ||||
(issue4800) and markers are not being created. | ||||
Eventually, histedit could perhaps look at `source` extra, | ||||
in which case this test should be revisited. | ||||
$ hg -q up 8cde254db839 | ||||
$ hg histedit 6f2f0241f119 --commands - <<EOF | ||||
> pick 8cde254db839 | ||||
> edit 6f2f0241f119 | ||||
> EOF | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
merging foo | ||||
warning: conflicts while merging foo! (edit, then use 'hg resolve --mark') | ||||
Fix up the change (pick 8cde254db839) | ||||
(hg histedit --continue to resume) | ||||
[1] | ||||
$ hg resolve -m --all | ||||
(no more unresolved files) | ||||
continue: hg histedit --continue | ||||
$ hg histedit --cont | ||||
merging foo | ||||
warning: conflicts while merging foo! (edit, then use 'hg resolve --mark') | ||||
Editing (6f2f0241f119), you may commit or record as needed now. | ||||
(hg histedit --continue to resume) | ||||
[1] | ||||
$ hg resolve -m --all | ||||
(no more unresolved files) | ||||
continue: hg histedit --continue | ||||
$ hg commit --amend -m 'reject this fold' | ||||
abort: histedit in progress | ||||
(use 'hg histedit --continue' or 'hg histedit --abort') | ||||
[255] | ||||
With markers enabled, histedit does not get confused, and | ||||
amend should not be blocked by the ongoing histedit. | ||||
$ cat >>$HGRCPATH <<EOF | ||||
> [experimental] | ||||
|
r34867 | > evolution.createmarkers=True | ||
|
r34868 | > evolution.allowunstable=True | ||
|
r28359 | > EOF | ||
$ hg commit --amend -m 'allow this fold' | ||||
$ hg histedit --continue | ||||
|
r29214 | |||
$ cd .. | ||||
Test autoverb feature | ||||
$ hg init autoverb | ||||
$ cd autoverb | ||||
$ echo alpha >> alpha | ||||
|
r29470 | $ hg ci -qAm one | ||
|
r29214 | $ echo alpha >> alpha | ||
|
r29470 | $ hg ci -qm two | ||
$ echo beta >> beta | ||||
$ hg ci -qAm "roll! one" | ||||
|
r29214 | |||
$ hg log --style compact --graph | ||||
|
r29470 | @ 2[tip] 4f34d0f8b5fa 1970-01-01 00:00 +0000 test | ||
| roll! one | ||||
|
r29214 | | | ||
o 1 579e40513370 1970-01-01 00:00 +0000 test | ||||
| two | ||||
| | ||||
o 0 6058cbb6cfd7 1970-01-01 00:00 +0000 test | ||||
one | ||||
Check that 'roll' is selected by default | ||||
|
r29470 | $ HGEDITOR=cat hg histedit 0 --config experimental.histedit.autoverb=True | ||
pick 6058cbb6cfd7 0 one | ||||
roll 4f34d0f8b5fa 2 roll! one | ||||
|
r29214 | pick 579e40513370 1 two | ||
|
r29470 | # Edit history between 6058cbb6cfd7 and 4f34d0f8b5fa | ||
|
r29214 | # | ||
# Commits are listed from least to most recent | ||||
# | ||||
# You can reorder changesets by reordering the lines | ||||
# | ||||
# Commands: | ||||
# | ||||
# e, edit = use commit, but stop for amending | ||||
# m, mess = edit commit message without changing commit content | ||||
# p, pick = use commit | ||||
|
r34490 | # b, base = checkout changeset and apply further changesets from there | ||
|
r29214 | # d, drop = remove commit from history | ||
# f, fold = use commit, but combine it with the one above | ||||
|
r31056 | # r, roll = like fold, but discard this commit's description and date | ||
|
r29214 | # | ||
$ cd .. | ||||
|
r37124 | |||
Check that histedit's commands accept revsets | ||||
$ hg init bar | ||||
$ cd bar | ||||
$ echo w >> a | ||||
$ hg ci -qAm "adds a" | ||||
$ echo x >> b | ||||
$ hg ci -qAm "adds b" | ||||
$ echo y >> c | ||||
$ hg ci -qAm "adds c" | ||||
$ echo z >> d | ||||
$ hg ci -qAm "adds d" | ||||
$ hg log -G -T '{rev} {desc}\n' | ||||
@ 3 adds d | ||||
| | ||||
o 2 adds c | ||||
| | ||||
o 1 adds b | ||||
| | ||||
o 0 adds a | ||||
$ HGEDITOR=cat hg histedit "2" --commands - << EOF | ||||
> base -4 adds c | ||||
> pick 2 adds c | ||||
> pick tip adds d | ||||
> EOF | ||||
$ hg log -G -T '{rev} {desc}\n' | ||||
@ 5 adds d | ||||
| | ||||
o 4 adds c | ||||
| | ||||
| o 1 adds b | ||||
|/ | ||||
o 0 adds a | ||||