[merge] change branchbuilder example to a doctest
Martin Pool
mbp at canonical.com
Tue Nov 11 02:34:00 GMT 2008
Branchbuilder's docstring contains an example of how to use it, but
it's not actually correct. This changes it to a docstring so it can
be tested, changes branchbuilder not to emit messages to the user when
it commits, and fixes the docstring to actually work. ;-)
doctests are not great for general testing but it is nice to make sure
api examples work...
--
Martin <http://launchpad.net/~mbp/>
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: mbp at sourcefrog.net-20081111023157-ylori8pmnbsef6hm
# target_branch: http://sourcefrog.net/bzr/trunk
# testament_sha1: c6213e12badb73d0a63c9f3a14116151815b8da3
# timestamp: 2008-11-11 12:32:14 +1000
# source_branch: http://sourcefrog.net/bzr/branchbuilder
# base_revision_id: pqm at pqm.ubuntu.com-20081107225426-gezbao014attrca8
#
# Begin patch
=== modified file 'NEWS'
--- NEWS 2008-11-07 18:10:32 +0000
+++ NEWS 2008-11-11 01:19:28 +0000
@@ -27,11 +27,15 @@
DOCUMENTATION:
API CHANGES:
+
* Transport implementations must provide copy_tree_to_transport. A default
implementation is provided for Transport subclasses.
TESTING:
+ * ``bzr selftest`` now fails if no doctests are found in a module
+ that's expected to have them. (Martin Pool)
+
INTERNALS:
=== modified file 'bzrlib/branchbuilder.py'
--- bzrlib/branchbuilder.py 2008-07-29 16:34:09 +0000
+++ bzrlib/branchbuilder.py 2008-11-11 02:31:57 +0000
@@ -16,11 +16,16 @@
"""Utility for create branches with particular contents."""
-from bzrlib import bzrdir, errors, memorytree
+from bzrlib import (
+ bzrdir,
+ commit,
+ errors,
+ memorytree,
+ )
class BranchBuilder(object):
- """A BranchBuilder aids creating Branches with particular shapes.
+ r"""A BranchBuilder aids creating Branches with particular shapes.
The expected way to use BranchBuilder is to construct a
BranchBuilder on the transport you want your branch on, and then call
@@ -30,14 +35,19 @@
real data.
For instance:
- builder = BranchBuilder(self.get_transport().clone('relpath'))
- builder.start_series()
- builder.build_snapshot('rev-id', [],
- [('add', ('filename', 'f-id', 'file', 'content\n'))])
- builder.build_snapshot('rev2-id', ['rev-id'],
- [('modify', ('f-id', 'new-content\n'))])
- builder.finish_series()
- branch = builder.get_branch()
+
+ >>> from bzrlib.transport.memory import MemoryTransport
+ >>> builder = BranchBuilder(MemoryTransport("memory:///"))
+ >>> builder.start_series()
+ >>> builder.build_snapshot('rev-id', None, [
+ ... ('add', ('', 'root-id', 'directory', '')),
+ ... ('add', ('filename', 'f-id', 'file', 'content\n'))])
+ 'rev-id'
+ >>> builder.build_snapshot('rev2-id', ['rev-id'],
+ ... [('modify', ('f-id', 'new-content\n'))])
+ 'rev2-id'
+ >>> builder.finish_series()
+ >>> branch = builder.get_branch()
:ivar _tree: This is a private member which is not meant to be modified by
users of this class. While a 'series' is in progress, it should hold a
@@ -71,10 +81,18 @@
tree.lock_write()
try:
tree.add('')
- return tree.commit('commit %d' % (self._branch.revno() + 1))
+ return self._do_commit(tree)
finally:
tree.unlock()
+ def _do_commit(self, tree, message=None, **kwargs):
+ reporter = commit.NullCommitReporter()
+ if message is None:
+ message = u'commit %d' % (self._branch.revno() + 1,)
+ return tree.commit(message,
+ reporter=reporter,
+ **kwargs)
+
def _move_branch_pointer(self, new_revision_id):
"""Point self._branch to a different revision id."""
self._branch.lock_write()
@@ -192,10 +210,7 @@
tree.add(to_add_files, to_add_file_ids, to_add_kinds)
for file_id, content in new_contents.iteritems():
tree.put_file_bytes_non_atomic(file_id, content)
-
- if message is None:
- message = u'commit %d' % (self._branch.revno() + 1,)
- return tree.commit(message, rev_id=revision_id)
+ return self._do_commit(tree, message=message, rev_id=revision_id)
finally:
tree.unlock()
=== modified file 'bzrlib/tests/__init__.py'
--- bzrlib/tests/__init__.py 2008-11-03 19:01:14 +0000
+++ bzrlib/tests/__init__.py 2008-11-11 02:31:57 +0000
@@ -2953,14 +2953,13 @@
modules_to_doctest = [
'bzrlib',
- 'bzrlib.errors',
+ 'bzrlib.branchbuilder',
'bzrlib.export',
'bzrlib.inventory',
'bzrlib.iterablefile',
'bzrlib.lockdir',
'bzrlib.merge3',
'bzrlib.option',
- 'bzrlib.store',
'bzrlib.symbol_versioning',
'bzrlib.tests',
'bzrlib.timestamp',
@@ -2976,6 +2975,8 @@
except ValueError, e:
print '**failed to get doctest for: %s\n%s' % (mod, e)
raise
+ if len(doc_suite._tests) == 0:
+ raise errors.BzrError("no doctests found in %s" % (mod,))
suite.addTest(doc_suite)
default_encoding = sys.getdefaultencoding()
# Begin bundle
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
More information about the bazaar
mailing list