test-amend.t
532 lines
| 14.0 KiB
| text/troff
|
Tads3Lexer
/ tests / test-amend.t
|
r33404 | #testcases obsstore-off obsstore-on | ||
$ cat << EOF >> $HGRCPATH | ||||
> [extensions] | ||||
> amend= | ||||
> debugdrawdag=$TESTDIR/drawdag.py | ||||
> [diff] | ||||
> git=1 | ||||
> EOF | ||||
#if obsstore-on | ||||
$ cat << EOF >> $HGRCPATH | ||||
> [experimental] | ||||
|
r34867 | > evolution.createmarkers=True | ||
|
r33404 | > EOF | ||
#endif | ||||
Basic amend | ||||
$ hg init repo1 | ||||
$ cd repo1 | ||||
$ hg debugdrawdag <<'EOS' | ||||
> B | ||||
> | | ||||
> A | ||||
> EOS | ||||
$ hg update B -q | ||||
$ echo 2 >> B | ||||
|
r34055 | $ hg amend | ||
|
r35394 | saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/112478962961-7e959a55-amend.hg (obsstore-off !) | ||
|
r33404 | #if obsstore-off | ||
$ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n' | ||||
@ 1 be169c7e8dbe B | ||||
| diff --git a/B b/B | ||||
| new file mode 100644 | ||||
| --- /dev/null | ||||
| +++ b/B | ||||
| @@ -0,0 +1,1 @@ | ||||
| +B2 | ||||
| | ||||
o 0 426bada5c675 A | ||||
diff --git a/A b/A | ||||
new file mode 100644 | ||||
--- /dev/null | ||||
+++ b/A | ||||
@@ -0,0 +1,1 @@ | ||||
+A | ||||
\ No newline at end of file | ||||
#else | ||||
$ hg log -p -G --hidden -T '{rev} {node|short} {desc}\n' | ||||
|
r34087 | @ 2 be169c7e8dbe B | ||
|
r33404 | | diff --git a/B b/B | ||
| new file mode 100644 | ||||
| --- /dev/null | ||||
| +++ b/B | ||||
| @@ -0,0 +1,1 @@ | ||||
| +B2 | ||||
| | ||||
| x 1 112478962961 B | ||||
|/ diff --git a/B b/B | ||||
| new file mode 100644 | ||||
| --- /dev/null | ||||
| +++ b/B | ||||
| @@ -0,0 +1,1 @@ | ||||
| +B | ||||
| \ No newline at end of file | ||||
| | ||||
o 0 426bada5c675 A | ||||
diff --git a/A b/A | ||||
new file mode 100644 | ||||
--- /dev/null | ||||
+++ b/A | ||||
@@ -0,0 +1,1 @@ | ||||
+A | ||||
\ No newline at end of file | ||||
#endif | ||||
Nothing changed | ||||
$ hg amend | ||||
nothing changed | ||||
[1] | ||||
|
r34123 | $ hg amend -d "0 0" | ||
nothing changed | ||||
[1] | ||||
$ hg amend -d "Thu Jan 01 00:00:00 1970 UTC" | ||||
nothing changed | ||||
[1] | ||||
|
r45947 | #if obsstore-on | ||
$ hg init repo-merge-state | ||||
$ cd repo-merge-state | ||||
$ echo a > f | ||||
$ hg ci -Aqm a | ||||
$ echo b > f | ||||
$ hg ci -Aqm b | ||||
$ echo c > f | ||||
$ hg co -m '.^' | ||||
merging f | ||||
warning: conflicts while merging f! (edit, then use 'hg resolve --mark') | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges | ||||
[1] | ||||
$ echo d > f | ||||
$ hg resolve -m f | ||||
(no more unresolved files) | ||||
$ hg ci --amend --config experimental.evolution.allowunstable=True | ||||
1 new orphan changesets | ||||
$ hg resolve -l | ||||
$ cd .. | ||||
#endif | ||||
|
r33404 | Matcher and metadata options | ||
$ echo 3 > C | ||||
$ echo 4 > D | ||||
$ hg add C D | ||||
|
r34055 | $ hg amend -m NEWMESSAGE -I C | ||
|
r35394 | saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/be169c7e8dbe-7684ddc5-amend.hg (obsstore-off !) | ||
|
r33404 | $ hg log -r . -T '{node|short} {desc} {files}\n' | ||
c7ba14d9075b NEWMESSAGE B C | ||||
$ echo 5 > E | ||||
$ rm C | ||||
|
r34055 | $ hg amend -d '2000 1000' -u 'Foo <foo@example.com>' -A C D | ||
|
r35394 | saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/c7ba14d9075b-b3e76daa-amend.hg (obsstore-off !) | ||
|
r33404 | $ hg log -r . -T '{node|short} {desc} {files} {author} {date}\n' | ||
|
r38318 | 14f6c4bcc865 NEWMESSAGE B D Foo <foo@example.com> 2000.01000 | ||
|
r33404 | |||
Amend with editor | ||||
$ cat > $TESTTMP/prefix.sh <<'EOF' | ||||
> printf 'EDITED: ' > $TESTTMP/msg | ||||
> cat "$1" >> $TESTTMP/msg | ||||
> mv $TESTTMP/msg "$1" | ||||
> EOF | ||||
$ chmod +x $TESTTMP/prefix.sh | ||||
|
r34055 | $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend --edit | ||
|
r35394 | saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/14f6c4bcc865-6591f15d-amend.hg (obsstore-off !) | ||
|
r33404 | $ hg log -r . -T '{node|short} {desc}\n' | ||
298f085230c3 EDITED: NEWMESSAGE | ||||
|
r34055 | $ HGEDITOR="sh $TESTTMP/prefix.sh" hg amend -e -m MSG | ||
|
r35394 | saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/298f085230c3-d81a6ad3-amend.hg (obsstore-off !) | ||
|
r33404 | $ hg log -r . -T '{node|short} {desc}\n' | ||
974f07f28537 EDITED: MSG | ||||
$ echo FOO > $TESTTMP/msg | ||||
$ hg amend -l $TESTTMP/msg -m BAR | ||||
|
r44346 | abort: cannot specify both --message and --logfile | ||
|
r46431 | [10] | ||
|
r34055 | $ hg amend -l $TESTTMP/msg | ||
|
r35394 | saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/974f07f28537-edb6470a-amend.hg (obsstore-off !) | ||
|
r33404 | $ hg log -r . -T '{node|short} {desc}\n' | ||
507be9bdac71 FOO | ||||
Interactive mode | ||||
$ touch F G | ||||
$ hg add F G | ||||
|
r34055 | $ cat <<EOS | hg amend -i --config ui.interactive=1 | ||
|
r33404 | > y | ||
> n | ||||
> EOS | ||||
diff --git a/F b/F | ||||
new file mode 100644 | ||||
|
r42766 | examine changes to 'F'? | ||
(enter ? for help) [Ynesfdaq?] y | ||||
|
r33404 | |||
diff --git a/G b/G | ||||
new file mode 100644 | ||||
|
r42766 | examine changes to 'G'? | ||
(enter ? for help) [Ynesfdaq?] n | ||||
|
r33404 | |||
|
r35394 | saved backup bundle to $TESTTMP/repo1/.hg/strip-backup/507be9bdac71-c8077452-amend.hg (obsstore-off !) | ||
|
r33404 | $ hg log -r . -T '{files}\n' | ||
B D F | ||||
Amend in the middle of a stack | ||||
$ hg init $TESTTMP/repo2 | ||||
$ cd $TESTTMP/repo2 | ||||
$ hg debugdrawdag <<'EOS' | ||||
> C | ||||
> | | ||||
> B | ||||
> | | ||||
> A | ||||
> EOS | ||||
$ hg update -q B | ||||
$ echo 2 >> B | ||||
$ hg amend | ||||
abort: cannot amend changeset with children | ||||
|
r47782 | (see 'hg help evolution.instability') | ||
|
r46457 | [10] | ||
|
r33404 | |||
#if obsstore-on | ||||
With allowunstable, amend could work in the middle of a stack | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [experimental] | ||||
|
r34867 | > evolution.createmarkers=True | ||
|
r34868 | > evolution.allowunstable=True | ||
|
r33404 | > EOF | ||
$ hg amend | ||||
|
r35727 | 1 new orphan changesets | ||
|
r33404 | $ hg log -T '{rev} {node|short} {desc}\n' -G | ||
|
r34087 | @ 3 be169c7e8dbe B | ||
|
r33404 | | | ||
r35524 | | * 2 26805aba1e60 C | |||
|
r33404 | | | | ||
| x 1 112478962961 B | ||||
|/ | ||||
o 0 426bada5c675 A | ||||
|
r34796 | Checking the note stored in the obsmarker | ||
$ echo foo > bar | ||||
$ hg add bar | ||||
|
r34890 | $ hg amend --note 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy' | ||
abort: cannot store a note of more than 255 bytes | ||||
|
r46431 | [10] | ||
|
r34796 | $ hg amend --note "adding bar" | ||
$ hg debugobsolete -r . | ||||
|
r34962 | 112478962961147124edd43549aedd1a335e44bf be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'operation': 'amend', 'user': 'test'} | ||
be169c7e8dbe21cd10b3d79691cbe7f241e3c21c 16084da537dd8f84cfdb3055c633772269d62e1b 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'adding bar', 'operation': 'amend', 'user': 'test'} | ||||
|
r33404 | #endif | ||
Cannot amend public changeset | ||||
$ hg phase -r A --public | ||||
$ hg update -C -q A | ||||
|
r34055 | $ hg amend -m AMEND | ||
|
r33404 | abort: cannot amend public changesets | ||
|
r35244 | (see 'hg help phases' for details) | ||
|
r46457 | [10] | ||
|
r33404 | |||
Amend a merge changeset | ||||
$ hg init $TESTTMP/repo3 | ||||
$ cd $TESTTMP/repo3 | ||||
$ hg debugdrawdag <<'EOS' | ||||
> C | ||||
> /| | ||||
> A B | ||||
> EOS | ||||
$ hg update -q C | ||||
|
r34055 | $ hg amend -m FOO | ||
|
r35394 | saved backup bundle to $TESTTMP/repo3/.hg/strip-backup/a35c07e8a2a4-15ff4612-amend.hg (obsstore-off !) | ||
|
r33404 | $ rm .hg/localtags | ||
$ hg log -G -T '{desc}\n' | ||||
@ FOO | ||||
|\ | ||||
| o B | ||||
| | ||||
o A | ||||
|
r35014 | |||
More complete test for status changes (issue5732) | ||||
------------------------------------------------- | ||||
Generates history of files having 3 states, r0_r1_wc: | ||||
r0: ground (content/missing) | ||||
r1: old state to be amended (content/missing, where missing means removed) | ||||
wc: changes to be included in r1 (content/missing-tracked/untracked) | ||||
$ hg init $TESTTMP/wcstates | ||||
$ cd $TESTTMP/wcstates | ||||
|
r39743 | $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 1 | ||
|
r35014 | $ hg addremove -q --similarity 0 | ||
$ hg commit -m0 | ||||
|
r39743 | $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 2 | ||
|
r35014 | $ hg addremove -q --similarity 0 | ||
$ hg commit -m1 | ||||
|
r39743 | $ "$PYTHON" $TESTDIR/generate-working-copy-states.py state 2 wc | ||
|
r35014 | $ hg addremove -q --similarity 0 | ||
$ hg forget *_*_*-untracked | ||||
$ rm *_*_missing-* | ||||
amend r1 to include wc changes | ||||
$ hg amend | ||||
saved backup bundle to * (glob) (obsstore-off !) | ||||
clean/modified/removed/added states of the amended revision | ||||
$ hg status --all --change . 'glob:content1_*_content1-tracked' | ||||
C content1_content1_content1-tracked | ||||
C content1_content2_content1-tracked | ||||
C content1_missing_content1-tracked | ||||
$ hg status --all --change . 'glob:content1_*_content[23]-tracked' | ||||
M content1_content1_content3-tracked | ||||
M content1_content2_content2-tracked | ||||
M content1_content2_content3-tracked | ||||
M content1_missing_content3-tracked | ||||
$ hg status --all --change . 'glob:content1_*_missing-tracked' | ||||
M content1_content2_missing-tracked | ||||
R content1_missing_missing-tracked | ||||
C content1_content1_missing-tracked | ||||
$ hg status --all --change . 'glob:content1_*_*-untracked' | ||||
|
r35015 | R content1_content1_content1-untracked | ||
R content1_content1_content3-untracked | ||||
|
r35014 | R content1_content1_missing-untracked | ||
|
r35015 | R content1_content2_content1-untracked | ||
R content1_content2_content2-untracked | ||||
R content1_content2_content3-untracked | ||||
|
r35014 | R content1_content2_missing-untracked | ||
R content1_missing_content1-untracked | ||||
R content1_missing_content3-untracked | ||||
R content1_missing_missing-untracked | ||||
$ hg status --all --change . 'glob:missing_content2_*' | ||||
A missing_content2_content2-tracked | ||||
A missing_content2_content3-tracked | ||||
|
r35016 | A missing_content2_missing-tracked | ||
|
r35014 | $ hg status --all --change . 'glob:missing_missing_*' | ||
A missing_missing_content3-tracked | ||||
working directory should be all clean (with some missing/untracked files) | ||||
$ hg status --all 'glob:*_content?-tracked' | ||||
C content1_content1_content1-tracked | ||||
C content1_content1_content3-tracked | ||||
C content1_content2_content1-tracked | ||||
C content1_content2_content2-tracked | ||||
C content1_content2_content3-tracked | ||||
C content1_missing_content1-tracked | ||||
C content1_missing_content3-tracked | ||||
C missing_content2_content2-tracked | ||||
C missing_content2_content3-tracked | ||||
C missing_missing_content3-tracked | ||||
$ hg status --all 'glob:*_missing-tracked' | ||||
! content1_content1_missing-tracked | ||||
! content1_content2_missing-tracked | ||||
! content1_missing_missing-tracked | ||||
! missing_content2_missing-tracked | ||||
! missing_missing_missing-tracked | ||||
$ hg status --all 'glob:*-untracked' | ||||
? content1_content1_content1-untracked | ||||
? content1_content1_content3-untracked | ||||
? content1_content2_content1-untracked | ||||
? content1_content2_content2-untracked | ||||
? content1_content2_content3-untracked | ||||
? content1_missing_content1-untracked | ||||
? content1_missing_content3-untracked | ||||
? missing_content2_content2-untracked | ||||
? missing_content2_content3-untracked | ||||
? missing_missing_content3-untracked | ||||
|
r38853 | |||
|
r41242 | ================================= | ||
Test backup-bundle config option| | ||||
================================= | ||||
|
r38853 | $ hg init $TESTTMP/repo4 | ||
$ cd $TESTTMP/repo4 | ||||
$ echo a>a | ||||
$ hg ci -Aqma | ||||
$ echo oops>b | ||||
$ hg ci -Aqm "b" | ||||
$ echo partiallyfixed > b | ||||
#if obsstore-off | ||||
$ hg amend | ||||
saved backup bundle to $TESTTMP/repo4/.hg/strip-backup/95e899acf2ce-f11cb050-amend.hg | ||||
|
r41242 | When backup-bundle config option is set: | ||
|
r38853 | $ cat << EOF >> $HGRCPATH | ||
|
r41242 | > [rewrite] | ||
> backup-bundle = False | ||||
|
r38853 | > EOF | ||
$ echo fixed > b | ||||
$ hg amend | ||||
#else | ||||
$ hg amend | ||||
|
r41242 | When backup-bundle config option is set: | ||
|
r38853 | $ cat << EOF >> $HGRCPATH | ||
|
r41242 | > [rewrite] | ||
> backup-bundle = False | ||||
|
r38853 | > EOF | ||
$ echo fixed > b | ||||
$ hg amend | ||||
#endif | ||||
|
r41155 | ========================================== | ||
Test update-timestamp config option| | ||||
========================================== | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [extensions] | ||||
> amend= | ||||
|
r41250 | > mockmakedate = $TESTDIR/mockmakedate.py | ||
|
r41155 | > EOF | ||
$ hg init $TESTTMP/repo5 | ||||
$ cd $TESTTMP/repo5 | ||||
|
r41157 | $ cat <<'EOF' >> .hg/hgrc | ||
|
r46350 | > [command-templates] | ||
> log = 'user: {user} | ||||
> date: {date|date} | ||||
> summary: {desc|firstline}\n' | ||||
|
r41157 | > EOF | ||
|
r41155 | $ echo a>a | ||
$ hg ci -Am 'commit 1' | ||||
adding a | ||||
When updatetimestamp is False | ||||
$ hg amend --date '1997-1-1 0:1' | ||||
$ hg log --limit 1 | ||||
user: test | ||||
date: Wed Jan 01 00:01:00 1997 +0000 | ||||
summary: commit 1 | ||||
|
r41157 | |||
|
r41155 | When update-timestamp is True and no other change than the date | ||
$ hg amend --config rewrite.update-timestamp=True | ||||
nothing changed | ||||
[1] | ||||
$ hg log --limit 1 | ||||
user: test | ||||
date: Wed Jan 01 00:01:00 1997 +0000 | ||||
summary: commit 1 | ||||
|
r41157 | |||
|
r41155 | When update-timestamp is True and there is other change than the date | ||
$ hg amend --user foobar --config rewrite.update-timestamp=True | ||||
$ hg log --limit 1 | ||||
user: foobar | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: commit 1 | ||||
When date option is applicable and update-timestamp is True | ||||
$ hg amend --date '1998-1-1 0:1' --config rewrite.update-timestamp=True | ||||
$ hg log --limit 1 | ||||
user: foobar | ||||
date: Thu Jan 01 00:01:00 1998 +0000 | ||||
summary: commit 1 | ||||
|
r41160 | |||
Unlike rewrite.update-timestamp, -D/--currentdate always updates the timestamp | ||||
$ hg amend -D | ||||
$ hg log --limit 1 | ||||
user: foobar | ||||
date: Thu Jan 01 00:00:04 1970 +0000 | ||||
summary: commit 1 | ||||
$ hg amend -D --config rewrite.update-timestamp=True | ||||
$ hg log --limit 1 | ||||
user: foobar | ||||
date: Thu Jan 01 00:00:05 1970 +0000 | ||||
summary: commit 1 | ||||
|
r41209 | rewrite.update-timestamp can be negated by --no-currentdate | ||
$ hg amend --config rewrite.update-timestamp=True --no-currentdate -u baz | ||||
$ hg log --limit 1 | ||||
user: baz | ||||
date: Thu Jan 01 00:00:05 1970 +0000 | ||||
summary: commit 1 | ||||
|
r41160 | Bad combination of date options: | ||
$ hg amend -D --date '0 0' | ||||
|
r44345 | abort: cannot specify both --date and --currentdate | ||
|
r46431 | [10] | ||
|
r41160 | |||
|
r43204 | Close branch | ||
|
r43205 | $ hg amend --secret --close-branch | ||
$ hg log --limit 1 -T 'close={get(extras, "close")}\nphase={phase}\n' | ||||
|
r43204 | close=1 | ||
|
r43205 | phase=secret | ||
|
r43204 | |||
|
r41160 | $ cd .. | ||
|
r42865 | |||
Corner case of amend from issue6157: | ||||
- working copy parent has a change to file `a` | ||||
- working copy has the inverse change | ||||
- we amend the working copy parent for files other than `a` | ||||
|
r42866 | hg used to include the changes to `a` anyway. | ||
|
r42865 | |||
$ hg init 6157; cd 6157 | ||||
$ echo a > a; echo b > b; hg commit -qAm_ | ||||
$ echo a2 > a; hg commit -qm_ | ||||
$ hg diff --stat -c . | ||||
a | 2 +- | ||||
1 files changed, 1 insertions(+), 1 deletions(-) | ||||
$ echo a > a; echo b2 > b; hg amend -q b | ||||
$ hg diff --stat -c . | ||||
|
r42866 | a | 2 +- | ||
|
r42865 | b | 2 +- | ||
|
r42866 | 2 files changed, 2 insertions(+), 2 deletions(-) | ||
|
r44238 | |||
Modifying a file while the editor is open can cause dirstate corruption | ||||
(issue6233) | ||||
$ cd $TESTTMP | ||||
$ hg init modify-during-amend; cd modify-during-amend | ||||
$ echo r0 > foo; hg commit -qAm "r0" | ||||
$ echo alpha > foo; hg commit -qm "alpha" | ||||
$ echo beta >> foo | ||||
r44731 | $ cat > $TESTTMP/touchy_editor.sh <<EOF | |||
> sleep 1 | ||||
|
r44861 | > echo delta >> "$TESTTMP/modify-during-amend/foo" | ||
r44731 | > sleep 1 | |||
|
r44238 | > echo hi > "\$1" | ||
r44731 | > sleep 1 | |||
|
r44238 | > EOF | ||
r44731 | $ HGEDITOR="sh $TESTTMP/touchy_editor.sh" hg commit --amend | |||
|
r44280 | $ if (hg diff -c . | grep 'delta' >/dev/null) || [ -n "$(hg status)" ]; then | ||
|
r44238 | > echo "OK." | ||
> else | ||||
> echo "Bug detected. 'delta' is not part of the commit OR the wdir" | ||||
> echo "Diff and status before rebuild:" | ||||
> hg diff | ||||
> hg status | ||||
> hg debugrebuilddirstate | ||||
> echo "Diff and status after rebuild:" | ||||
> hg diff | ||||
> hg status | ||||
> fi | ||||
OK. | ||||