test-commit.t
834 lines
| 20.2 KiB
| text/troff
|
Tads3Lexer
/ tests / test-commit.t
|
r11802 | commit date test | ||
$ hg init test | ||||
$ cd test | ||||
$ echo foo > foo | ||||
$ hg add foo | ||||
|
r22205 | $ cat > $TESTTMP/checkeditform.sh <<EOF | ||
> env | grep HGEDITFORM | ||||
> true | ||||
> EOF | ||||
$ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg commit -m "" | ||||
|
r22248 | HGEDITFORM=commit.normal.normal | ||
|
r11802 | abort: empty commit message | ||
|
r12316 | [255] | ||
|
r11802 | $ hg commit -d '0 0' -m commit-1 | ||
$ echo foo >> foo | ||||
$ hg commit -d '1 4444444' -m commit-3 | ||||
|
r32462 | hg: parse error: impossible time zone offset: 4444444 | ||
|
r12316 | [255] | ||
|
r11802 | $ hg commit -d '1 15.1' -m commit-4 | ||
|
r32462 | hg: parse error: invalid date: '1\t15.1' | ||
|
r12316 | [255] | ||
|
r11802 | $ hg commit -d 'foo bar' -m commit-5 | ||
|
r32462 | hg: parse error: invalid date: 'foo bar' | ||
|
r12316 | [255] | ||
|
r11802 | $ hg commit -d ' 1 4444' -m commit-6 | ||
$ hg commit -d '111111111111 0' -m commit-7 | ||||
|
r32462 | hg: parse error: date exceeds 32 bits: 111111111111 | ||
|
r12316 | [255] | ||
|
r28825 | $ hg commit -d '-111111111111 0' -m commit-7 | ||
|
r32462 | hg: parse error: date exceeds 32 bits: -111111111111 | ||
|
r28825 | [255] | ||
$ echo foo >> foo | ||||
|
r28864 | $ hg commit -d '1901-12-13 20:45:52 +0000' -m commit-7-2 | ||
|
r28825 | $ echo foo >> foo | ||
|
r28864 | $ hg commit -d '-2147483648 0' -m commit-7-3 | ||
|
r28825 | $ hg log -T '{rev} {date|isodatesec}\n' -l2 | ||
|
r28864 | 3 1901-12-13 20:45:52 +0000 | ||
2 1901-12-13 20:45:52 +0000 | ||||
$ hg commit -d '1901-12-13 20:45:51 +0000' -m commit-7 | ||||
|
r32462 | hg: parse error: date exceeds 32 bits: -2147483649 | ||
|
r28825 | [255] | ||
|
r28864 | $ hg commit -d '-2147483649 0' -m commit-7 | ||
|
r32462 | hg: parse error: date exceeds 32 bits: -2147483649 | ||
|
r13062 | [255] | ||
|
r11802 | |||
commit added file that has been deleted | ||||
$ echo bar > bar | ||||
$ hg add bar | ||||
$ rm bar | ||||
|
r12156 | $ hg commit -m commit-8 | ||
|
r13899 | nothing changed (1 missing files, see 'hg status') | ||
|
r12316 | [1] | ||
|
r12156 | $ hg commit -m commit-8-2 bar | ||
|
r11802 | abort: bar: file not found! | ||
|
r12316 | [255] | ||
|
r11802 | |||
$ hg -q revert -a --no-backup | ||||
$ mkdir dir | ||||
$ echo boo > dir/file | ||||
$ hg add | ||||
|
r35394 | adding dir/file | ||
|
r11802 | $ hg -v commit -m commit-9 dir | ||
|
r23749 | committing files: | ||
|
r11802 | dir/file | ||
|
r23749 | committing manifest | ||
committing changelog | ||||
|
r28864 | committed changeset 4:1957363f1ced | ||
|
r11802 | |||
$ echo > dir.file | ||||
$ hg add | ||||
adding dir.file | ||||
$ hg commit -m commit-10 dir dir.file | ||||
abort: dir: no match under directory! | ||||
|
r12316 | [255] | ||
|
r11802 | |||
$ echo >> dir/file | ||||
$ mkdir bleh | ||||
$ mkdir dir2 | ||||
$ cd bleh | ||||
$ hg commit -m commit-11 . | ||||
abort: bleh: no match under directory! | ||||
|
r12316 | [255] | ||
|
r11802 | $ hg commit -m commit-12 ../dir ../dir2 | ||
abort: dir2: no match under directory! | ||||
|
r12316 | [255] | ||
|
r11802 | $ hg -v commit -m commit-13 ../dir | ||
|
r23749 | committing files: | ||
|
r11802 | dir/file | ||
|
r23749 | committing manifest | ||
committing changelog | ||||
|
r28864 | committed changeset 5:a31d8f87544a | ||
|
r11802 | $ cd .. | ||
$ hg commit -m commit-14 does-not-exist | ||||
|
r15521 | abort: does-not-exist: * (glob) | ||
|
r12316 | [255] | ||
|
r16842 | |||
#if symlink | ||||
|
r11802 | $ ln -s foo baz | ||
$ hg commit -m commit-15 baz | ||||
abort: baz: file not tracked! | ||||
|
r12316 | [255] | ||
|
r33577 | $ rm baz | ||
|
r16842 | #endif | ||
|
r11802 | $ touch quux | ||
$ hg commit -m commit-16 quux | ||||
abort: quux: file not tracked! | ||||
|
r12316 | [255] | ||
|
r11802 | $ echo >> dir/file | ||
$ hg -v commit -m commit-17 dir/file | ||||
|
r23749 | committing files: | ||
|
r11802 | dir/file | ||
|
r23749 | committing manifest | ||
committing changelog | ||||
|
r28864 | committed changeset 6:32d054c9d085 | ||
|
r11802 | |||
An empty date was interpreted as epoch origin | ||||
$ echo foo >> foo | ||||
r32410 | $ hg commit -d '' -m commit-no-date --config devel.default-date= | |||
|
r11802 | $ hg tip --template '{date|isodate}\n' | grep '1970' | ||
|
r12316 | [1] | ||
|
r13447 | |||
|
r33547 | Using the advanced --extra flag | ||
$ echo "[extensions]" >> $HGRCPATH | ||||
$ echo "commitextras=" >> $HGRCPATH | ||||
$ hg status | ||||
? quux | ||||
|
r33577 | $ hg add quux | ||
$ hg commit -m "adding internal used extras" --extra amend_source=hash | ||||
abort: key 'amend_source' is used internally, can't be set manually | ||||
[255] | ||||
|
r33603 | $ hg commit -m "special chars in extra" --extra id@phab=214 | ||
abort: keys can only contain ascii letters, digits, '_' and '-' | ||||
[255] | ||||
|
r33607 | $ hg commit -m "empty key" --extra =value | ||
abort: unable to parse '=value', keys can't be empty | ||||
[255] | ||||
|
r33547 | $ hg commit -m "adding extras" --extra sourcehash=foo --extra oldhash=bar | ||
$ hg log -r . -T '{extras % "{extra}\n"}' | ||||
branch=default | ||||
oldhash=bar | ||||
sourcehash=foo | ||||
|
r33618 | Failed commit with --addremove should not update dirstate | ||
$ echo foo > newfile | ||||
$ hg status | ||||
? newfile | ||||
$ HGEDITOR=false hg ci --addremove | ||||
adding newfile | ||||
abort: edit failed: false exited with status 1 | ||||
[255] | ||||
$ hg status | ||||
|
r33619 | ? newfile | ||
|
r33618 | |||
|
r13447 | Make sure we do not obscure unknown requires file entries (issue2649) | ||
$ echo foo >> foo | ||||
$ echo fake >> .hg/requires | ||||
$ hg commit -m bla | ||||
|
r20820 | abort: repository requires features unknown to this Mercurial: fake! | ||
|
r26421 | (see https://mercurial-scm.org/wiki/MissingRequirement for more information) | ||
|
r13447 | [255] | ||
|
r11802 | $ cd .. | ||
partial subdir commit test | ||||
$ hg init test2 | ||||
$ cd test2 | ||||
$ mkdir foo | ||||
$ echo foo > foo/foo | ||||
$ mkdir bar | ||||
$ echo bar > bar/bar | ||||
$ hg add | ||||
|
r35394 | adding bar/bar | ||
adding foo/foo | ||||
|
r21021 | $ HGEDITOR=cat hg ci -e -m commit-subdir-1 foo | ||
commit-subdir-1 | ||||
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: added foo/foo | ||||
|
r12156 | $ hg ci -m commit-subdir-2 bar | ||
|
r11802 | |||
subdir log 1 | ||||
$ hg log -v foo | ||||
|
r12156 | changeset: 0:f97e73a25882 | ||
|
r11802 | user: test | ||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11802 | files: foo/foo | ||
description: | ||||
commit-subdir-1 | ||||
subdir log 2 | ||||
$ hg log -v bar | ||||
|
r12156 | changeset: 1:aa809156d50d | ||
|
r11802 | tag: tip | ||
user: test | ||||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11802 | files: bar/bar | ||
description: | ||||
commit-subdir-2 | ||||
full log | ||||
$ hg log -v | ||||
|
r12156 | changeset: 1:aa809156d50d | ||
|
r11802 | tag: tip | ||
user: test | ||||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11802 | files: bar/bar | ||
description: | ||||
commit-subdir-2 | ||||
|
r12156 | changeset: 0:f97e73a25882 | ||
|
r11802 | user: test | ||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11802 | files: foo/foo | ||
description: | ||||
commit-subdir-1 | ||||
$ cd .. | ||||
dot and subdir commit test | ||||
$ hg init test3 | ||||
|
r21021 | $ echo commit-foo-subdir > commit-log-test | ||
|
r11802 | $ cd test3 | ||
$ mkdir foo | ||||
$ echo foo content > foo/plain-file | ||||
$ hg add foo/plain-file | ||||
|
r21021 | $ HGEDITOR=cat hg ci --edit -l ../commit-log-test foo | ||
commit-foo-subdir | ||||
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: added foo/plain-file | ||||
|
r11802 | $ echo modified foo content > foo/plain-file | ||
|
r12156 | $ hg ci -m commit-foo-dot . | ||
|
r11802 | |||
full log | ||||
$ hg log -v | ||||
|
r12156 | changeset: 1:95b38e3a5b2e | ||
|
r11802 | tag: tip | ||
user: test | ||||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11802 | files: foo/plain-file | ||
description: | ||||
commit-foo-dot | ||||
|
r12156 | changeset: 0:65d4e9386227 | ||
|
r11802 | user: test | ||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11802 | files: foo/plain-file | ||
description: | ||||
commit-foo-subdir | ||||
subdir log | ||||
$ cd foo | ||||
$ hg log . | ||||
|
r12156 | changeset: 1:95b38e3a5b2e | ||
|
r11802 | tag: tip | ||
user: test | ||||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11802 | summary: commit-foo-dot | ||
|
r12156 | changeset: 0:65d4e9386227 | ||
|
r11802 | user: test | ||
|
r12156 | date: Thu Jan 01 00:00:00 1970 +0000 | ||
|
r11802 | summary: commit-foo-subdir | ||
$ cd .. | ||||
$ cd .. | ||||
|
r12399 | Issue1049: Hg permits partial commit of merge without warning | ||
|
r11802 | $ hg init issue1049 | ||
$ cd issue1049 | ||||
$ echo a > a | ||||
$ hg ci -Ama | ||||
adding a | ||||
$ echo a >> a | ||||
$ hg ci -mb | ||||
$ hg up 0 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo b >> a | ||||
$ hg ci -mc | ||||
created new head | ||||
$ HGMERGE=true hg merge | ||||
merging a | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
should fail because we are specifying a file name | ||||
$ hg ci -mmerge a | ||||
abort: cannot partially commit a merge (do not specify files or patterns) | ||||
|
r12316 | [255] | ||
|
r11802 | |||
should fail because we are specifying a pattern | ||||
$ hg ci -mmerge -I a | ||||
abort: cannot partially commit a merge (do not specify files or patterns) | ||||
|
r12316 | [255] | ||
|
r11802 | |||
should succeed | ||||
|
r22248 | $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg ci -mmerge --edit | ||
HGEDITFORM=commit.normal.merge | ||||
|
r11802 | $ cd .. | ||
test commit message content | ||||
$ hg init commitmsg | ||||
$ cd commitmsg | ||||
$ echo changed > changed | ||||
$ echo removed > removed | ||||
|
r25014 | $ hg book activebookmark | ||
|
r11802 | $ hg ci -qAm init | ||
$ hg rm removed | ||||
$ echo changed >> changed | ||||
$ echo added > added | ||||
$ hg add added | ||||
$ HGEDITOR=cat hg ci -A | ||||
HG: Enter commit message. Lines beginning with 'HG:' are removed. | ||||
HG: Leave message empty to abort commit. | ||||
HG: -- | ||||
HG: user: test | ||||
HG: branch 'default' | ||||
|
r25014 | HG: bookmark 'activebookmark' | ||
|
r11802 | HG: added added | ||
HG: changed changed | ||||
HG: removed removed | ||||
abort: empty commit message | ||||
|
r12316 | [255] | ||
|
r20765 | |||
test saving last-message.txt | ||||
$ hg init sub | ||||
$ echo a > sub/a | ||||
$ hg -R sub add sub/a | ||||
$ cat > sub/.hg/hgrc <<EOF | ||||
> [hooks] | ||||
> precommit.test-saving-last-message = false | ||||
> EOF | ||||
$ echo 'sub = sub' > .hgsub | ||||
$ hg add .hgsub | ||||
|
r20859 | $ cat > $TESTTMP/editor.sh <<EOF | ||
|
r20765 | > echo "==== before editing:" | ||
> cat \$1 | ||||
> echo "====" | ||||
> echo "test saving last-message.txt" >> \$1 | ||||
> EOF | ||||
$ rm -f .hg/last-message.txt | ||||
|
r20859 | $ HGEDITOR="sh $TESTTMP/editor.sh" hg commit -S -q | ||
|
r20765 | ==== before editing: | ||
HG: Enter commit message. Lines beginning with 'HG:' are removed. | ||||
HG: Leave message empty to abort commit. | ||||
HG: -- | ||||
HG: user: test | ||||
HG: branch 'default' | ||||
|
r25014 | HG: bookmark 'activebookmark' | ||
|
r20765 | HG: subrepo sub | ||
HG: added .hgsub | ||||
HG: added added | ||||
HG: changed .hgsubstate | ||||
HG: changed changed | ||||
HG: removed removed | ||||
==== | ||||
|
r33365 | abort: precommit.test-saving-last-message hook exited with status 1 (in subrepository "sub") | ||
|
r20765 | [255] | ||
$ cat .hg/last-message.txt | ||||
test saving last-message.txt | ||||
|
r21924 | test that '[committemplate] changeset' definition and commit log | ||
specific template keywords work well | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [committemplate] | ||||
|
r32046 | > changeset.commit.normal = 'HG: this is "commit.normal" template | ||
|
r22012 | > HG: {extramsg} | ||
|
r25014 | > {if(activebookmark, | ||
> "HG: bookmark '{activebookmark}' is activated\n", | ||||
|
r22012 | > "HG: no bookmark is activated\n")}{subrepos % | ||
|
r32046 | > "HG: subrepo '{subrepo}' is changed\n"}' | ||
|
r22012 | > | ||
> changeset.commit = HG: this is "commit" template | ||||
> HG: {extramsg} | ||||
|
r25014 | > {if(activebookmark, | ||
> "HG: bookmark '{activebookmark}' is activated\n", | ||||
|
r22012 | > "HG: no bookmark is activated\n")}{subrepos % | ||
> "HG: subrepo '{subrepo}' is changed\n"} | ||||
> | ||||
|
r21924 | > changeset = HG: this is customized commit template | ||
> HG: {extramsg} | ||||
|
r25014 | > {if(activebookmark, | ||
> "HG: bookmark '{activebookmark}' is activated\n", | ||||
|
r21924 | > "HG: no bookmark is activated\n")}{subrepos % | ||
> "HG: subrepo '{subrepo}' is changed\n"} | ||||
> EOF | ||||
$ hg init sub2 | ||||
$ echo a > sub2/a | ||||
$ hg -R sub2 add sub2/a | ||||
$ echo 'sub2 = sub2' >> .hgsub | ||||
$ HGEDITOR=cat hg commit -S -q | ||||
|
r22012 | HG: this is "commit.normal" template | ||
|
r21924 | HG: Leave message empty to abort commit. | ||
|
r25014 | HG: bookmark 'activebookmark' is activated | ||
|
r21924 | HG: subrepo 'sub' is changed | ||
HG: subrepo 'sub2' is changed | ||||
abort: empty commit message | ||||
[255] | ||||
|
r22012 | $ cat >> .hg/hgrc <<EOF | ||
> [committemplate] | ||||
> changeset.commit.normal = | ||||
> # now, "changeset.commit" should be chosen for "hg commit" | ||||
> EOF | ||||
|
r25014 | $ hg bookmark --inactive activebookmark | ||
|
r21924 | $ hg forget .hgsub | ||
$ HGEDITOR=cat hg commit -q | ||||
|
r22012 | HG: this is "commit" template | ||
HG: Leave message empty to abort commit. | ||||
HG: no bookmark is activated | ||||
abort: empty commit message | ||||
[255] | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [committemplate] | ||||
> changeset.commit = | ||||
> # now, "changeset" should be chosen for "hg commit" | ||||
> EOF | ||||
$ HGEDITOR=cat hg commit -q | ||||
|
r21924 | HG: this is customized commit template | ||
HG: Leave message empty to abort commit. | ||||
HG: no bookmark is activated | ||||
abort: empty commit message | ||||
[255] | ||||
$ cat >> .hg/hgrc <<EOF | ||||
|
r23711 | > [committemplate] | ||
> changeset = {desc} | ||||
|
r25392 | > HG: mods={file_mods} | ||
> HG: adds={file_adds} | ||||
> HG: dels={file_dels} | ||||
|
r23711 | > HG: files={files} | ||
> HG: | ||||
|
r23712 | > {splitlines(diff()) % 'HG: {line}\n' | ||
|
r23711 | > }HG: | ||
|
r25392 | > HG: mods={file_mods} | ||
> HG: adds={file_adds} | ||||
> HG: dels={file_dels} | ||||
|
r23711 | > HG: files={files}\n | ||
> EOF | ||||
$ hg status -amr | ||||
M changed | ||||
A added | ||||
R removed | ||||
$ HGEDITOR=cat hg commit -q -e -m "foo bar" changed | ||||
foo bar | ||||
|
r25392 | HG: mods=changed | ||
HG: adds= | ||||
HG: dels= | ||||
|
r23711 | HG: files=changed | ||
HG: | ||||
|
r23712 | HG: --- a/changed Thu Jan 01 00:00:00 1970 +0000 | ||
HG: +++ b/changed Thu Jan 01 00:00:00 1970 +0000 | ||||
HG: @@ -1,1 +1,2 @@ | ||||
HG: changed | ||||
HG: +changed | ||||
|
r23711 | HG: | ||
|
r25392 | HG: mods=changed | ||
HG: adds= | ||||
HG: dels= | ||||
|
r23711 | HG: files=changed | ||
$ hg status -amr | ||||
A added | ||||
R removed | ||||
$ hg parents --template "M {file_mods}\nA {file_adds}\nR {file_dels}\n" | ||||
M changed | ||||
A | ||||
R | ||||
$ hg rollback -q | ||||
$ cat >> .hg/hgrc <<EOF | ||||
|
r23712 | > [committemplate] | ||
> changeset = {desc} | ||||
|
r25392 | > HG: mods={file_mods} | ||
> HG: adds={file_adds} | ||||
> HG: dels={file_dels} | ||||
|
r23712 | > HG: files={files} | ||
> HG: | ||||
> {splitlines(diff("changed")) % 'HG: {line}\n' | ||||
> }HG: | ||||
|
r25392 | > HG: mods={file_mods} | ||
> HG: adds={file_adds} | ||||
> HG: dels={file_dels} | ||||
|
r23712 | > HG: files={files} | ||
> HG: | ||||
> {splitlines(diff("added")) % 'HG: {line}\n' | ||||
> }HG: | ||||
|
r25392 | > HG: mods={file_mods} | ||
> HG: adds={file_adds} | ||||
> HG: dels={file_dels} | ||||
|
r23712 | > HG: files={files} | ||
> HG: | ||||
> {splitlines(diff("removed")) % 'HG: {line}\n' | ||||
> }HG: | ||||
|
r25392 | > HG: mods={file_mods} | ||
> HG: adds={file_adds} | ||||
> HG: dels={file_dels} | ||||
|
r23712 | > HG: files={files}\n | ||
> EOF | ||||
$ HGEDITOR=cat hg commit -q -e -m "foo bar" added removed | ||||
foo bar | ||||
|
r25392 | HG: mods= | ||
HG: adds=added | ||||
HG: dels=removed | ||||
|
r23712 | HG: files=added removed | ||
HG: | ||||
HG: | ||||
|
r25392 | HG: mods= | ||
HG: adds=added | ||||
HG: dels=removed | ||||
|
r23712 | HG: files=added removed | ||
HG: | ||||
HG: --- /dev/null Thu Jan 01 00:00:00 1970 +0000 | ||||
HG: +++ b/added Thu Jan 01 00:00:00 1970 +0000 | ||||
HG: @@ -0,0 +1,1 @@ | ||||
HG: +added | ||||
HG: | ||||
|
r25392 | HG: mods= | ||
HG: adds=added | ||||
HG: dels=removed | ||||
|
r23712 | HG: files=added removed | ||
HG: | ||||
HG: --- a/removed Thu Jan 01 00:00:00 1970 +0000 | ||||
HG: +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 | ||||
HG: @@ -1,1 +0,0 @@ | ||||
HG: -removed | ||||
HG: | ||||
|
r25392 | HG: mods= | ||
HG: adds=added | ||||
HG: dels=removed | ||||
|
r23712 | HG: files=added removed | ||
$ hg status -amr | ||||
M changed | ||||
$ hg parents --template "M {file_mods}\nA {file_adds}\nR {file_dels}\n" | ||||
M | ||||
A added | ||||
R removed | ||||
$ hg rollback -q | ||||
$ cat >> .hg/hgrc <<EOF | ||||
|
r21924 | > # disable customizing for subsequent tests | ||
> [committemplate] | ||||
> changeset = | ||||
> EOF | ||||
|
r16849 | $ cd .. | ||
commit copy | ||||
$ hg init dir2 | ||||
$ cd dir2 | ||||
$ echo bleh > bar | ||||
$ hg add bar | ||||
$ hg ci -m 'add bar' | ||||
$ hg cp bar foo | ||||
$ echo >> bar | ||||
$ hg ci -m 'cp bar foo; change bar' | ||||
$ hg debugrename foo | ||||
foo renamed from bar:26d3ca0dfd18e44d796b564e38dd173c9668d3a9 | ||||
$ hg debugindex bar | ||||
|
r17132 | rev offset length ..... linkrev nodeid p1 p2 (re) | ||
0 0 6 ..... 0 26d3ca0dfd18 000000000000 000000000000 (re) | ||||
1 6 7 ..... 1 d267bddd54f7 26d3ca0dfd18 000000000000 (re) | ||||
|
r16913 | |||
|
r25018 | Test making empty commits | ||
$ hg commit --config ui.allowemptycommit=True -m "empty commit" | ||||
$ hg log -r . -v --stat | ||||
changeset: 2:d809f3644287 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
description: | ||||
empty commit | ||||
|
r23598 | verify pathauditor blocks evil filepaths | ||
$ cat > evil-commit.py <<EOF | ||||
|
r33953 | > from __future__ import absolute_import | ||
> from mercurial import context, hg, node, ui as uimod | ||||
|
r23598 | > notrc = u".h\u200cg".encode('utf-8') + '/hgrc' | ||
|
r33953 | > u = uimod.ui.load() | ||
|
r23598 | > r = hg.repository(u, '.') | ||
> def filectxfn(repo, memctx, path): | ||||
|
r35401 | > return context.memfilectx(repo, memctx, path, | ||
> '[hooks]\nupdate = echo owned') | ||||
|
r23598 | > c = context.memctx(r, [r['tip'].node(), node.nullid], | ||
> 'evil', [notrc], filectxfn, 0) | ||||
> r.commitctx(c) | ||||
> EOF | ||||
$ $PYTHON evil-commit.py | ||||
|
r23627 | #if windows | ||
$ hg co --clean tip | ||||
abort: path contains illegal component: .h\xe2\x80\x8cg\\hgrc (esc) | ||||
[255] | ||||
#else | ||||
|
r23598 | $ hg co --clean tip | ||
abort: path contains illegal component: .h\xe2\x80\x8cg/hgrc (esc) | ||||
[255] | ||||
|
r23627 | #endif | ||
|
r23598 | |||
|
r23599 | $ hg rollback -f | ||
|
r25018 | repository tip rolled back to revision 2 (undo commit) | ||
|
r23599 | $ cat > evil-commit.py <<EOF | ||
|
r33953 | > from __future__ import absolute_import | ||
> from mercurial import context, hg, node, ui as uimod | ||||
|
r23599 | > notrc = "HG~1/hgrc" | ||
|
r33953 | > u = uimod.ui.load() | ||
|
r23599 | > r = hg.repository(u, '.') | ||
> def filectxfn(repo, memctx, path): | ||||
|
r35401 | > return context.memfilectx(repo, memctx, path, | ||
> '[hooks]\nupdate = echo owned') | ||||
|
r23599 | > c = context.memctx(r, [r['tip'].node(), node.nullid], | ||
> 'evil', [notrc], filectxfn, 0) | ||||
> r.commitctx(c) | ||||
> EOF | ||||
$ $PYTHON evil-commit.py | ||||
$ hg co --clean tip | ||||
|
r35394 | abort: path contains illegal component: HG~1/hgrc | ||
|
r23599 | [255] | ||
$ hg rollback -f | ||||
|
r25018 | repository tip rolled back to revision 2 (undo commit) | ||
|
r23599 | $ cat > evil-commit.py <<EOF | ||
|
r33953 | > from __future__ import absolute_import | ||
> from mercurial import context, hg, node, ui as uimod | ||||
|
r23599 | > notrc = "HG8B6C~2/hgrc" | ||
|
r33953 | > u = uimod.ui.load() | ||
|
r23599 | > r = hg.repository(u, '.') | ||
> def filectxfn(repo, memctx, path): | ||||
|
r35401 | > return context.memfilectx(repo, memctx, path, | ||
> '[hooks]\nupdate = echo owned') | ||||
|
r23599 | > c = context.memctx(r, [r['tip'].node(), node.nullid], | ||
> 'evil', [notrc], filectxfn, 0) | ||||
> r.commitctx(c) | ||||
> EOF | ||||
$ $PYTHON evil-commit.py | ||||
$ hg co --clean tip | ||||
|
r35394 | abort: path contains illegal component: HG8B6C~2/hgrc | ||
|
r23599 | [255] | ||
|
r26742 | |||
# test that an unmodified commit template message aborts | ||||
$ hg init unmodified_commit_template | ||||
$ cd unmodified_commit_template | ||||
$ echo foo > foo | ||||
$ hg add foo | ||||
$ hg commit -m "foo" | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [committemplate] | ||||
> changeset.commit = HI THIS IS NOT STRIPPED | ||||
> HG: this is customized commit template | ||||
> HG: {extramsg} | ||||
> {if(activebookmark, | ||||
> "HG: bookmark '{activebookmark}' is activated\n", | ||||
> "HG: no bookmark is activated\n")}{subrepos % | ||||
> "HG: subrepo '{subrepo}' is changed\n"} | ||||
> EOF | ||||
$ cat > $TESTTMP/notouching.sh <<EOF | ||||
> true | ||||
> EOF | ||||
$ echo foo2 > foo2 | ||||
$ hg add foo2 | ||||
$ HGEDITOR="sh $TESTTMP/notouching.sh" hg commit | ||||
abort: commit message unchanged | ||||
[255] | ||||
|
r30703 | |||
test that text below the --- >8 --- special string is ignored | ||||
|
r30723 | $ cat <<'EOF' > $TESTTMP/lowercaseline.sh | ||
> cat $1 | sed s/LINE/line/ | tee $1.new | ||||
> mv $1.new $1 | ||||
> EOF | ||||
|
r30703 | $ hg init ignore_below_special_string | ||
$ cd ignore_below_special_string | ||||
$ echo foo > foo | ||||
$ hg add foo | ||||
$ hg commit -m "foo" | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [committemplate] | ||||
|
r30723 | > changeset.commit = first LINE | ||
|
r30703 | > HG: this is customized commit template | ||
> HG: {extramsg} | ||||
> HG: ------------------------ >8 ------------------------ | ||||
> {diff()} | ||||
> EOF | ||||
$ echo foo2 > foo2 | ||||
$ hg add foo2 | ||||
|
r30724 | $ HGEDITOR="sh $TESTTMP/notouching.sh" hg ci | ||
abort: commit message unchanged | ||||
[255] | ||||
|
r30723 | $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci | ||
|
r30703 | first line | ||
HG: this is customized commit template | ||||
HG: Leave message empty to abort commit. | ||||
HG: ------------------------ >8 ------------------------ | ||||
diff -r e63c23eaa88a foo2 | ||||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/foo2 Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -0,0 +1,1 @@ | ||||
+foo2 | ||||
$ hg log -T '{desc}\n' -r . | ||||
first line | ||||
test that the special string --- >8 --- isn't used when not at the beginning of | ||||
a line | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [committemplate] | ||||
|
r30723 | > changeset.commit = first LINE2 | ||
|
r30703 | > another line HG: ------------------------ >8 ------------------------ | ||
> HG: this is customized commit template | ||||
> HG: {extramsg} | ||||
> HG: ------------------------ >8 ------------------------ | ||||
> {diff()} | ||||
> EOF | ||||
$ echo foo >> foo | ||||
|
r30723 | $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci | ||
|
r30703 | first line2 | ||
another line HG: ------------------------ >8 ------------------------ | ||||
HG: this is customized commit template | ||||
HG: Leave message empty to abort commit. | ||||
HG: ------------------------ >8 ------------------------ | ||||
diff -r 3661b22b0702 foo | ||||
--- a/foo Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/foo Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -1,1 +1,2 @@ | ||||
foo | ||||
+foo | ||||
$ hg log -T '{desc}\n' -r . | ||||
first line2 | ||||
another line HG: ------------------------ >8 ------------------------ | ||||
also test that this special string isn't accepted when there is some extra text | ||||
at the end | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [committemplate] | ||||
|
r30723 | > changeset.commit = first LINE3 | ||
|
r30703 | > HG: ------------------------ >8 ------------------------foobar | ||
> second line | ||||
> HG: this is customized commit template | ||||
> HG: {extramsg} | ||||
> HG: ------------------------ >8 ------------------------ | ||||
> {diff()} | ||||
> EOF | ||||
$ echo foo >> foo | ||||
|
r30723 | $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci | ||
|
r30703 | first line3 | ||
HG: ------------------------ >8 ------------------------foobar | ||||
second line | ||||
HG: this is customized commit template | ||||
HG: Leave message empty to abort commit. | ||||
HG: ------------------------ >8 ------------------------ | ||||
diff -r ce648f5f066f foo | ||||
--- a/foo Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/foo Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -1,2 +1,3 @@ | ||||
foo | ||||
foo | ||||
+foo | ||||
$ hg log -T '{desc}\n' -r . | ||||
first line3 | ||||
second line | ||||
|
r26742 | $ cd .. | ||
|
r30703 | |||