##// END OF EJS Templates
wireprotov2: implement commands as a generator of objects...
wireprotov2: implement commands as a generator of objects Previously, wire protocol version 2 inherited version 1's model of having separate types to represent the results of different wire protocol commands. As I implemented more powerful commands in future commits, I found I was using a common pattern of returning a special type to hold a generator. This meant the command function required a closure to do most of the work. That made logic flow more difficult to follow. I also noticed that many commands were effectively a sequence of objects to be CBOR encoded. I think it makes sense to define version 2 commands as generators. This way, commands can simply emit the data structures they wish to send to the client. This eliminates the need for a closure in command functions and removes encoding from the bodies of commands. As part of this commit, the handling of response objects has been moved into the serverreactor class. This puts the reactor in the driver's seat with regards to CBOR encoding and error handling. Having error handling in the function that emits frames is particularly important because exceptions in that function can lead to things getting in a bad state: I'm fairly certain that uncaught exceptions in the frame generator were causing deadlocks. I also introduced a dedicated error type for explicit error reporting in command handlers. This will be used in subsequent commits. There's still a bit of work to be done here, especially around formalizing the error handling "protocol." I've added yet another TODO to track this so we don't forget. Test output changed because we're using generators and no longer know we are at the end of the data until we hit the end of the generator. This means we can't emit the end-of-stream flag until we've exhausted the generator. Hence the introduction of 0-sized end-of-stream frames. Differential Revision: https://phab.mercurial-scm.org/D4472

File last commit:

r37301:d4e62df1 default
r39595:07b58266 default
Show More
test-commit.t
833 lines | 20.1 KiB | text/troff | Tads3Lexer
Nicolas Dumazet
tests: unify test-commit
r11802 commit date test
$ hg init test
$ cd test
$ echo foo > foo
$ hg add foo
FUJIWARA Katsunori
ui: invoke editor for committing with HGEDITFORM environment variable...
r22205 $ cat > $TESTTMP/checkeditform.sh <<EOF
> env | grep HGEDITFORM
> true
> EOF
$ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg commit -m ""
FUJIWARA Katsunori
commit: change "editform" to distinguish merge commits from others...
r22248 HGEDITFORM=commit.normal.normal
Nicolas Dumazet
tests: unify test-commit
r11802 abort: empty commit message
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802 $ hg commit -d '0 0' -m commit-1
$ echo foo >> foo
$ hg commit -d '1 4444444' -m commit-3
Boris Feld
util: raise ParseError when parsing dates (BC)...
r32462 hg: parse error: impossible time zone offset: 4444444
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802 $ hg commit -d '1 15.1' -m commit-4
Boris Feld
util: raise ParseError when parsing dates (BC)...
r32462 hg: parse error: invalid date: '1\t15.1'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802 $ hg commit -d 'foo bar' -m commit-5
Boris Feld
util: raise ParseError when parsing dates (BC)...
r32462 hg: parse error: invalid date: 'foo bar'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802 $ hg commit -d ' 1 4444' -m commit-6
$ hg commit -d '111111111111 0' -m commit-7
Boris Feld
util: raise ParseError when parsing dates (BC)...
r32462 hg: parse error: date exceeds 32 bits: 111111111111
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Florent Gallaire
date: reallow negative timestamp, fix for Windows buggy gmtime() (issue2513)...
r28825 $ hg commit -d '-111111111111 0' -m commit-7
Boris Feld
util: raise ParseError when parsing dates (BC)...
r32462 hg: parse error: date exceeds 32 bits: -111111111111
Florent Gallaire
date: reallow negative timestamp, fix for Windows buggy gmtime() (issue2513)...
r28825 [255]
$ echo foo >> foo
Florent Gallaire
date: fix boundary check of negative integer
r28864 $ hg commit -d '1901-12-13 20:45:52 +0000' -m commit-7-2
Florent Gallaire
date: reallow negative timestamp, fix for Windows buggy gmtime() (issue2513)...
r28825 $ echo foo >> foo
Florent Gallaire
date: fix boundary check of negative integer
r28864 $ hg commit -d '-2147483648 0' -m commit-7-3
Florent Gallaire
date: reallow negative timestamp, fix for Windows buggy gmtime() (issue2513)...
r28825 $ hg log -T '{rev} {date|isodatesec}\n' -l2
Florent Gallaire
date: fix boundary check of negative integer
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
Boris Feld
util: raise ParseError when parsing dates (BC)...
r32462 hg: parse error: date exceeds 32 bits: -2147483649
Florent Gallaire
date: reallow negative timestamp, fix for Windows buggy gmtime() (issue2513)...
r28825 [255]
Florent Gallaire
date: fix boundary check of negative integer
r28864 $ hg commit -d '-2147483649 0' -m commit-7
Boris Feld
util: raise ParseError when parsing dates (BC)...
r32462 hg: parse error: date exceeds 32 bits: -2147483649
Adrian Buehlmann
parsedate: abort on negative dates (issue2513)...
r13062 [255]
Nicolas Dumazet
tests: unify test-commit
r11802
commit added file that has been deleted
$ echo bar > bar
$ hg add bar
$ rm bar
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m commit-8
Martin Geisler
commit: note when files are missing...
r13899 nothing changed (1 missing files, see 'hg status')
Matt Mackall
tests: add exit codes to unified tests
r12316 [1]
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m commit-8-2 bar
Nicolas Dumazet
tests: unify test-commit
r11802 abort: bar: file not found!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802
$ hg -q revert -a --no-backup
$ mkdir dir
$ echo boo > dir/file
$ hg add
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 adding dir/file
Nicolas Dumazet
tests: unify test-commit
r11802 $ hg -v commit -m commit-9 dir
Mads Kiilerich
localrepo: show headline notes in commitctx before showing filenames...
r23749 committing files:
Nicolas Dumazet
tests: unify test-commit
r11802 dir/file
Mads Kiilerich
localrepo: show headline notes in commitctx before showing filenames...
r23749 committing manifest
committing changelog
Florent Gallaire
date: fix boundary check of negative integer
r28864 committed changeset 4:1957363f1ced
Nicolas Dumazet
tests: unify test-commit
r11802
$ echo > dir.file
$ hg add
adding dir.file
$ hg commit -m commit-10 dir dir.file
abort: dir: no match under directory!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802
$ echo >> dir/file
$ mkdir bleh
$ mkdir dir2
$ cd bleh
$ hg commit -m commit-11 .
abort: bleh: no match under directory!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802 $ hg commit -m commit-12 ../dir ../dir2
abort: dir2: no match under directory!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802 $ hg -v commit -m commit-13 ../dir
Mads Kiilerich
localrepo: show headline notes in commitctx before showing filenames...
r23749 committing files:
Nicolas Dumazet
tests: unify test-commit
r11802 dir/file
Mads Kiilerich
localrepo: show headline notes in commitctx before showing filenames...
r23749 committing manifest
committing changelog
Florent Gallaire
date: fix boundary check of negative integer
r28864 committed changeset 5:a31d8f87544a
Nicolas Dumazet
tests: unify test-commit
r11802 $ cd ..
$ hg commit -m commit-14 does-not-exist
Mads Kiilerich
tests: hide 'No such file or directory' messages...
r15521 abort: does-not-exist: * (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Mads Kiilerich
tests: introduce c-style conditional sections in .t tests...
r16842
#if symlink
Nicolas Dumazet
tests: unify test-commit
r11802 $ ln -s foo baz
$ hg commit -m commit-15 baz
abort: baz: file not tracked!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Matt Harbison
test-commit: stabilize for filesystems without symlink support
r33577 $ rm baz
Mads Kiilerich
tests: introduce c-style conditional sections in .t tests...
r16842 #endif
Nicolas Dumazet
tests: unify test-commit
r11802 $ touch quux
$ hg commit -m commit-16 quux
abort: quux: file not tracked!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802 $ echo >> dir/file
$ hg -v commit -m commit-17 dir/file
Mads Kiilerich
localrepo: show headline notes in commitctx before showing filenames...
r23749 committing files:
Nicolas Dumazet
tests: unify test-commit
r11802 dir/file
Mads Kiilerich
localrepo: show headline notes in commitctx before showing filenames...
r23749 committing manifest
committing changelog
Florent Gallaire
date: fix boundary check of negative integer
r28864 committed changeset 6:32d054c9d085
Nicolas Dumazet
tests: unify test-commit
r11802
An empty date was interpreted as epoch origin
$ echo foo >> foo
devel: activate default-date in tests...
r32410 $ hg commit -d '' -m commit-no-date --config devel.default-date=
Nicolas Dumazet
tests: unify test-commit
r11802 $ hg tip --template '{date|isodate}\n' | grep '1970'
Matt Mackall
tests: add exit codes to unified tests
r12316 [1]
Adrian Buehlmann
introduce new RequirementError (issue2649)...
r13447
Pulkit Goyal
commitextras: check the format of the arguments and no internal key is used...
r33547 Using the advanced --extra flag
$ echo "[extensions]" >> $HGRCPATH
$ echo "commitextras=" >> $HGRCPATH
$ hg status
? quux
Matt Harbison
test-commit: stabilize for filesystems without symlink support
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]
Pulkit Goyal
commitextras: make sure keys contains ascii letters, numbers, '_' and '-' only
r33603 $ hg commit -m "special chars in extra" --extra id@phab=214
abort: keys can only contain ascii letters, digits, '_' and '-'
[255]
Pulkit Goyal
commitextras: make sure keys are not empty...
r33607 $ hg commit -m "empty key" --extra =value
abort: unable to parse '=value', keys can't be empty
[255]
Pulkit Goyal
commitextras: check the format of the arguments and no internal key is used...
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
Martin von Zweigbergk
tests: demonstrate that failed "hg ci -A" updates dirstate (issue5645)...
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
Martin von Zweigbergk
commit: don't let failed commit with --addremove update dirstate (issue5645)...
r33619 ? newfile
Martin von Zweigbergk
tests: demonstrate that failed "hg ci -A" updates dirstate (issue5645)...
r33618
Adrian Buehlmann
introduce new RequirementError (issue2649)...
r13447 Make sure we do not obscure unknown requires file entries (issue2649)
$ echo foo >> foo
$ echo fake >> .hg/requires
$ hg commit -m bla
Mads Kiilerich
repo: rephrase the "missing requirement" error message...
r20820 abort: repository requires features unknown to this Mercurial: fake!
Matt Mackall
urls: bulk-change primary website URLs
r26421 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
Adrian Buehlmann
introduce new RequirementError (issue2649)...
r13447 [255]
Nicolas Dumazet
tests: unify test-commit
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
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 adding bar/bar
adding foo/foo
"Bradley M. Kuhn"
commit: --edit/-e to force edit of otherwise-supplied commit message...
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
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg ci -m commit-subdir-2 bar
Nicolas Dumazet
tests: unify test-commit
r11802
subdir log 1
$ hg log -v foo
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 0:f97e73a25882
Nicolas Dumazet
tests: unify test-commit
r11802 user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Nicolas Dumazet
tests: unify test-commit
r11802 files: foo/foo
description:
commit-subdir-1
subdir log 2
$ hg log -v bar
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 1:aa809156d50d
Nicolas Dumazet
tests: unify test-commit
r11802 tag: tip
user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Nicolas Dumazet
tests: unify test-commit
r11802 files: bar/bar
description:
commit-subdir-2
full log
$ hg log -v
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 1:aa809156d50d
Nicolas Dumazet
tests: unify test-commit
r11802 tag: tip
user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Nicolas Dumazet
tests: unify test-commit
r11802 files: bar/bar
description:
commit-subdir-2
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 0:f97e73a25882
Nicolas Dumazet
tests: unify test-commit
r11802 user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Nicolas Dumazet
tests: unify test-commit
r11802 files: foo/foo
description:
commit-subdir-1
$ cd ..
dot and subdir commit test
$ hg init test3
"Bradley M. Kuhn"
commit: --edit/-e to force edit of otherwise-supplied commit message...
r21021 $ echo commit-foo-subdir > commit-log-test
Nicolas Dumazet
tests: unify test-commit
r11802 $ cd test3
$ mkdir foo
$ echo foo content > foo/plain-file
$ hg add foo/plain-file
"Bradley M. Kuhn"
commit: --edit/-e to force edit of otherwise-supplied commit message...
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
Nicolas Dumazet
tests: unify test-commit
r11802 $ echo modified foo content > foo/plain-file
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg ci -m commit-foo-dot .
Nicolas Dumazet
tests: unify test-commit
r11802
full log
$ hg log -v
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 1:95b38e3a5b2e
Nicolas Dumazet
tests: unify test-commit
r11802 tag: tip
user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Nicolas Dumazet
tests: unify test-commit
r11802 files: foo/plain-file
description:
commit-foo-dot
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 0:65d4e9386227
Nicolas Dumazet
tests: unify test-commit
r11802 user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Nicolas Dumazet
tests: unify test-commit
r11802 files: foo/plain-file
description:
commit-foo-subdir
subdir log
$ cd foo
$ hg log .
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 1:95b38e3a5b2e
Nicolas Dumazet
tests: unify test-commit
r11802 tag: tip
user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Nicolas Dumazet
tests: unify test-commit
r11802 summary: commit-foo-dot
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 0:65d4e9386227
Nicolas Dumazet
tests: unify test-commit
r11802 user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Nicolas Dumazet
tests: unify test-commit
r11802 summary: commit-foo-subdir
$ cd ..
$ cd ..
Martin Geisler
tests: added a short description to issue numbers...
r12399 Issue1049: Hg permits partial commit of merge without warning
Nicolas Dumazet
tests: unify test-commit
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)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
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)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-commit
r11802
should succeed
FUJIWARA Katsunori
commit: change "editform" to distinguish merge commits from others...
r22248 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg ci -mmerge --edit
HGEDITFORM=commit.normal.merge
Nicolas Dumazet
tests: unify test-commit
r11802 $ cd ..
test commit message content
$ hg init commitmsg
$ cd commitmsg
$ echo changed > changed
$ echo removed > removed
Ryan McElroy
templatekw: replace currentbookmark with activebookmark keyword...
r25014 $ hg book activebookmark
Nicolas Dumazet
tests: unify test-commit
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'
Ryan McElroy
templatekw: replace currentbookmark with activebookmark keyword...
r25014 HG: bookmark 'activebookmark'
Nicolas Dumazet
tests: unify test-commit
r11802 HG: added added
HG: changed changed
HG: removed removed
abort: empty commit message
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
FUJIWARA Katsunori
localrepo: save manually edited commit message as soon as possible...
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
Sean Farley
tests: use TESTTMP instead of TESTDIR...
r20859 $ cat > $TESTTMP/editor.sh <<EOF
FUJIWARA Katsunori
localrepo: save manually edited commit message as soon as possible...
r20765 > echo "==== before editing:"
> cat \$1
> echo "===="
> echo "test saving last-message.txt" >> \$1
> EOF
$ rm -f .hg/last-message.txt
Sean Farley
tests: use TESTTMP instead of TESTDIR...
r20859 $ HGEDITOR="sh $TESTTMP/editor.sh" hg commit -S -q
FUJIWARA Katsunori
localrepo: save manually edited commit message as soon as possible...
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'
Ryan McElroy
templatekw: replace currentbookmark with activebookmark keyword...
r25014 HG: bookmark 'activebookmark'
FUJIWARA Katsunori
localrepo: save manually edited commit message as soon as possible...
r20765 HG: subrepo sub
HG: added .hgsub
HG: added added
HG: changed .hgsubstate
HG: changed changed
HG: removed removed
====
Matt Harbison
subrepo: make the output references to subrepositories consistent...
r33365 abort: precommit.test-saving-last-message hook exited with status 1 (in subrepository "sub")
FUJIWARA Katsunori
localrepo: save manually edited commit message as soon as possible...
r20765 [255]
$ cat .hg/last-message.txt
test saving last-message.txt
FUJIWARA Katsunori
cmdutil: make commit message shown in text editor customizable by template...
r21924 test that '[committemplate] changeset' definition and commit log
specific template keywords work well
$ cat >> .hg/hgrc <<EOF
> [committemplate]
Yuya Nishihara
commit: optionally strip quotes from commit template (BC)...
r32046 > changeset.commit.normal = 'HG: this is "commit.normal" template
FUJIWARA Katsunori
cmdutil: look commit template definition up by specified 'editform'...
r22012 > HG: {extramsg}
Ryan McElroy
templatekw: replace currentbookmark with activebookmark keyword...
r25014 > {if(activebookmark,
> "HG: bookmark '{activebookmark}' is activated\n",
FUJIWARA Katsunori
cmdutil: look commit template definition up by specified 'editform'...
r22012 > "HG: no bookmark is activated\n")}{subrepos %
Yuya Nishihara
commit: optionally strip quotes from commit template (BC)...
r32046 > "HG: subrepo '{subrepo}' is changed\n"}'
FUJIWARA Katsunori
cmdutil: look commit template definition up by specified 'editform'...
r22012 >
> changeset.commit = HG: this is "commit" template
> HG: {extramsg}
Ryan McElroy
templatekw: replace currentbookmark with activebookmark keyword...
r25014 > {if(activebookmark,
> "HG: bookmark '{activebookmark}' is activated\n",
FUJIWARA Katsunori
cmdutil: look commit template definition up by specified 'editform'...
r22012 > "HG: no bookmark is activated\n")}{subrepos %
> "HG: subrepo '{subrepo}' is changed\n"}
>
FUJIWARA Katsunori
cmdutil: make commit message shown in text editor customizable by template...
r21924 > changeset = HG: this is customized commit template
> HG: {extramsg}
Ryan McElroy
templatekw: replace currentbookmark with activebookmark keyword...
r25014 > {if(activebookmark,
> "HG: bookmark '{activebookmark}' is activated\n",
FUJIWARA Katsunori
cmdutil: make commit message shown in text editor customizable by template...
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
FUJIWARA Katsunori
cmdutil: look commit template definition up by specified 'editform'...
r22012 HG: this is "commit.normal" template
FUJIWARA Katsunori
cmdutil: make commit message shown in text editor customizable by template...
r21924 HG: Leave message empty to abort commit.
Ryan McElroy
templatekw: replace currentbookmark with activebookmark keyword...
r25014 HG: bookmark 'activebookmark' is activated
FUJIWARA Katsunori
cmdutil: make commit message shown in text editor customizable by template...
r21924 HG: subrepo 'sub' is changed
HG: subrepo 'sub2' is changed
abort: empty commit message
[255]
FUJIWARA Katsunori
cmdutil: look commit template definition up by specified 'editform'...
r22012 $ cat >> .hg/hgrc <<EOF
> [committemplate]
> changeset.commit.normal =
> # now, "changeset.commit" should be chosen for "hg commit"
> EOF
Ryan McElroy
templatekw: replace currentbookmark with activebookmark keyword...
r25014 $ hg bookmark --inactive activebookmark
FUJIWARA Katsunori
cmdutil: make commit message shown in text editor customizable by template...
r21924 $ hg forget .hgsub
$ HGEDITOR=cat hg commit -q
FUJIWARA Katsunori
cmdutil: look commit template definition up by specified 'editform'...
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
FUJIWARA Katsunori
cmdutil: make commit message shown in text editor customizable by template...
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
FUJIWARA Katsunori
context: avoid breaking already fixed self._status at ctx.status()...
r23711 > [committemplate]
> changeset = {desc}
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 > HG: mods={file_mods}
> HG: adds={file_adds}
> HG: dels={file_dels}
FUJIWARA Katsunori
context: avoid breaking already fixed self._status at ctx.status()...
r23711 > HG: files={files}
> HG:
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
r23712 > {splitlines(diff()) % 'HG: {line}\n'
FUJIWARA Katsunori
context: avoid breaking already fixed self._status at ctx.status()...
r23711 > }HG:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 > HG: mods={file_mods}
> HG: adds={file_adds}
> HG: dels={file_dels}
FUJIWARA Katsunori
context: avoid breaking already fixed self._status at ctx.status()...
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
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 HG: mods=changed
HG: adds=
HG: dels=
FUJIWARA Katsunori
context: avoid breaking already fixed self._status at ctx.status()...
r23711 HG: files=changed
HG:
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
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
FUJIWARA Katsunori
context: avoid breaking already fixed self._status at ctx.status()...
r23711 HG:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 HG: mods=changed
HG: adds=
HG: dels=
FUJIWARA Katsunori
context: avoid breaking already fixed self._status at ctx.status()...
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
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
r23712 > [committemplate]
> changeset = {desc}
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 > HG: mods={file_mods}
> HG: adds={file_adds}
> HG: dels={file_dels}
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
r23712 > HG: files={files}
> HG:
> {splitlines(diff("changed")) % 'HG: {line}\n'
> }HG:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 > HG: mods={file_mods}
> HG: adds={file_adds}
> HG: dels={file_dels}
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
r23712 > HG: files={files}
> HG:
> {splitlines(diff("added")) % 'HG: {line}\n'
> }HG:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 > HG: mods={file_mods}
> HG: adds={file_adds}
> HG: dels={file_dels}
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
r23712 > HG: files={files}
> HG:
> {splitlines(diff("removed")) % 'HG: {line}\n'
> }HG:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 > HG: mods={file_mods}
> HG: adds={file_adds}
> HG: dels={file_dels}
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
r23712 > HG: files={files}\n
> EOF
$ HGEDITOR=cat hg commit -q -e -m "foo bar" added removed
foo bar
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 HG: mods=
HG: adds=added
HG: dels=removed
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
r23712 HG: files=added removed
HG:
HG:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 HG: mods=
HG: adds=added
HG: dels=removed
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
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:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 HG: mods=
HG: adds=added
HG: dels=removed
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
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:
FUJIWARA Katsunori
templatekw: compare target context and its parent exactly (issue4690)...
r25392 HG: mods=
HG: adds=added
HG: dels=removed
FUJIWARA Katsunori
context: override _dirstatestatus in workingcommitctx for correct matching...
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
FUJIWARA Katsunori
cmdutil: make commit message shown in text editor customizable by template...
r21924 > # disable customizing for subsequent tests
> [committemplate]
> changeset =
> EOF
Adrian Buehlmann
tests: roll test-commit-copy.t into test-commit.t
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
Gregory Szorc
debugcommands: drop offset and length from debugindex by default...
r37301 rev linkrev nodeid p1 p2
0 0 26d3ca0dfd18 000000000000 000000000000
1 1 d267bddd54f7 26d3ca0dfd18 000000000000
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
Durham Goode
commit: add ui.allowemptycommit config option...
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
Augie Fackler
pathauditor: check for codepoints ignored on OS X
r23598 verify pathauditor blocks evil filepaths
$ cat > evil-commit.py <<EOF
Augie Fackler
tests: update test-commit to pass our import checker
r33953 > from __future__ import absolute_import
> from mercurial import context, hg, node, ui as uimod
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > notrc = u".h\u200cg".encode('utf-8') + b'/hgrc'
Augie Fackler
tests: update test-commit to pass our import checker
r33953 > u = uimod.ui.load()
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > r = hg.repository(u, b'.')
Augie Fackler
pathauditor: check for codepoints ignored on OS X
r23598 > def filectxfn(repo, memctx, path):
Martin von Zweigbergk
memfilectx: make changectx argument mandatory in constructor (API)...
r35401 > return context.memfilectx(repo, memctx, path,
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > b'[hooks]\nupdate = echo owned')
> c = context.memctx(r, [r[b'tip'].node(), node.nullid],
> b'evil', [notrc], filectxfn, 0)
Augie Fackler
pathauditor: check for codepoints ignored on OS X
r23598 > r.commitctx(c)
> EOF
$ $PYTHON evil-commit.py
Matt Harbison
tests: add missing globs for Windows...
r23627 #if windows
$ hg co --clean tip
abort: path contains illegal component: .h\xe2\x80\x8cg\\hgrc (esc)
[255]
#else
Augie Fackler
pathauditor: check for codepoints ignored on OS X
r23598 $ hg co --clean tip
abort: path contains illegal component: .h\xe2\x80\x8cg/hgrc (esc)
[255]
Matt Harbison
tests: add missing globs for Windows...
r23627 #endif
Augie Fackler
pathauditor: check for codepoints ignored on OS X
r23598
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 $ hg rollback -f
Durham Goode
commit: add ui.allowemptycommit config option...
r25018 repository tip rolled back to revision 2 (undo commit)
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 $ cat > evil-commit.py <<EOF
Augie Fackler
tests: update test-commit to pass our import checker
r33953 > from __future__ import absolute_import
> from mercurial import context, hg, node, ui as uimod
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > notrc = b"HG~1/hgrc"
Augie Fackler
tests: update test-commit to pass our import checker
r33953 > u = uimod.ui.load()
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > r = hg.repository(u, b'.')
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 > def filectxfn(repo, memctx, path):
Martin von Zweigbergk
memfilectx: make changectx argument mandatory in constructor (API)...
r35401 > return context.memfilectx(repo, memctx, path,
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > b'[hooks]\nupdate = echo owned')
> c = context.memctx(r, [r[b'tip'].node(), node.nullid],
> b'evil', [notrc], filectxfn, 0)
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 > r.commitctx(c)
> EOF
$ $PYTHON evil-commit.py
$ hg co --clean tip
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path contains illegal component: HG~1/hgrc
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 [255]
$ hg rollback -f
Durham Goode
commit: add ui.allowemptycommit config option...
r25018 repository tip rolled back to revision 2 (undo commit)
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 $ cat > evil-commit.py <<EOF
Augie Fackler
tests: update test-commit to pass our import checker
r33953 > from __future__ import absolute_import
> from mercurial import context, hg, node, ui as uimod
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > notrc = b"HG8B6C~2/hgrc"
Augie Fackler
tests: update test-commit to pass our import checker
r33953 > u = uimod.ui.load()
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > r = hg.repository(u, b'.')
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 > def filectxfn(repo, memctx, path):
Martin von Zweigbergk
memfilectx: make changectx argument mandatory in constructor (API)...
r35401 > return context.memfilectx(repo, memctx, path,
Augie Fackler
tests: add missing b prefixes in test-commit.t...
r36438 > b'[hooks]\nupdate = echo owned')
> c = context.memctx(r, [r[b'tip'].node(), node.nullid],
> b'evil', [notrc], filectxfn, 0)
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 > r.commitctx(c)
> EOF
$ $PYTHON evil-commit.py
$ hg co --clean tip
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 abort: path contains illegal component: HG8B6C~2/hgrc
Matt Mackall
pathauditor: check for Windows shortname aliases
r23599 [255]
Tony Tung
commit: abort when a committemplate is not changed...
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]
Sean Farley
cmdutil: add special string that ignores rest of text...
r30703
test that text below the --- >8 --- special string is ignored
Yuya Nishihara
commit: update test to actually modify template text...
r30723 $ cat <<'EOF' > $TESTTMP/lowercaseline.sh
> cat $1 | sed s/LINE/line/ | tee $1.new
> mv $1.new $1
> EOF
Sean Farley
cmdutil: add special string that ignores rest of text...
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]
Yuya Nishihara
commit: update test to actually modify template text...
r30723 > changeset.commit = first LINE
Sean Farley
cmdutil: add special string that ignores rest of text...
r30703 > HG: this is customized commit template
> HG: {extramsg}
> HG: ------------------------ >8 ------------------------
> {diff()}
> EOF
$ echo foo2 > foo2
$ hg add foo2
Yuya Nishihara
commit: fix unmodified message detection for the "--- >8 ----" magic...
r30724 $ HGEDITOR="sh $TESTTMP/notouching.sh" hg ci
abort: commit message unchanged
[255]
Yuya Nishihara
commit: update test to actually modify template text...
r30723 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
Sean Farley
cmdutil: add special string that ignores rest of text...
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]
Yuya Nishihara
commit: update test to actually modify template text...
r30723 > changeset.commit = first LINE2
Sean Farley
cmdutil: add special string that ignores rest of text...
r30703 > another line HG: ------------------------ >8 ------------------------
> HG: this is customized commit template
> HG: {extramsg}
> HG: ------------------------ >8 ------------------------
> {diff()}
> EOF
$ echo foo >> foo
Yuya Nishihara
commit: update test to actually modify template text...
r30723 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
Sean Farley
cmdutil: add special string that ignores rest of text...
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]
Yuya Nishihara
commit: update test to actually modify template text...
r30723 > changeset.commit = first LINE3
Sean Farley
cmdutil: add special string that ignores rest of text...
r30703 > HG: ------------------------ >8 ------------------------foobar
> second line
> HG: this is customized commit template
> HG: {extramsg}
> HG: ------------------------ >8 ------------------------
> {diff()}
> EOF
$ echo foo >> foo
Yuya Nishihara
commit: update test to actually modify template text...
r30723 $ HGEDITOR="sh $TESTTMP/lowercaseline.sh" hg ci
Sean Farley
cmdutil: add special string that ignores rest of text...
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
Tony Tung
commit: abort when a committemplate is not changed...
r26742 $ cd ..