Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:59:59 -0500] rev 15242
graft: add examples and information about copied metadata
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:48:57 -0500] rev 15241
graft: add --continue support
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:46:23 -0500] rev 15240
graft: add user, date, and tool options
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:46:03 -0500] rev 15239
graft: add --edit
Matt Mackall <mpm@selenic.com> [Wed, 12 Oct 2011 18:45:36 -0500] rev 15238
graft: add initial implementation
Augie Fackler <durin42@gmail.com> [Wed, 12 Oct 2011 11:09:57 -0500] rev 15237
bookmarks: delegate writing to the repo just like reading
This makes it easier for alternate storage backends to not use flat
files for bookmarks storage.
Idan Kamara <idankk86@gmail.com> [Wed, 12 Oct 2011 22:01:14 +0200] rev 15236
tests: add support for inline doctests in test files
This adds doctest like syntax to .t files, that can be interleaved with regular
shell code:
$ echo -n a > file
>>> print open('file').read()
a
>>> open('file', 'a').write('b')
$ cat file
ab
The syntax is exactly the same as regular doctests, so multiline statements
look like this:
>>> for i in range(3):
... print i
0
1
2
Each block has its own context, i.e.:
>>> x = 0
>>> print x
0
$ echo 'foo'
foo
>>> print x
will result in a NameError.
Errors are displayed in standard doctest format:
>>> print 'foo'
bar
--- /home/idan/dev/hg/default/tests/test-test.t
+++ /home/idan/dev/hg/default/tests/test-test.t.err
@@ -2,3 +2,16 @@
> >>> print 'foo'
> bar
> EOF
+ **********************************************************************
+ File "/tmp/tmps8X_0ohg-tst", line 1, in tmps8X_0ohg-tst
+ Failed example:
+ print 'foo'
+ Expected:
+ bar
+ Got:
+ foo
+ **********************************************************************
+ 1 items had failures:
+ 1 of 1 in tmps8X_0ohg-tst
+ ***Test Failed*** 1 failures.
+ [1]
As for the implementation, it's quite simple: when the test runner sees a line
starting with '>>>' it converts it, and all subsequent lines until the next
line that begins with '$' to a 'python -m heredoctest <<EOF' call with the
proper heredoc to follow. So if we have this test file:
>>> for c in 'abcd':
... print c
a
b
c
d
$ echo foo
foo
It gets converted to:
$ python -m heredoctest <<EOF
> >>> for c in 'abcd':
> ... print c
> a
> b
> c
> d
> EOF
$ echo foo
foo
And then processed like every other test file by converting it to a sh script.