Rev 4389: (Jelmer) Add bzr send format registry. in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Thu May 28 19:06:47 BST 2009
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 4389
revision-id: pqm at pqm.ubuntu.com-20090528180643-13zpler3llbz9c47
parent: pqm at pqm.ubuntu.com-20090528171438-4bnwgf4n2gcdf9jt
parent: jelmer at samba.org-20090528162538-0j8dynysuqmwofcy
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2009-05-28 19:06:43 +0100
message:
(Jelmer) Add bzr send format registry.
added:
bzrlib/send.py send.py-20090521192735-j7cdb33ykmtmzx4w-1
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
------------------------------------------------------------
revno: 4367.1.6
revision-id: jelmer at samba.org-20090528162538-0j8dynysuqmwofcy
parent: jelmer at samba.org-20090528161416-k7x0l8hwuk2kyvsf
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: send-format-registry
timestamp: Thu 2009-05-28 18:25:38 +0200
message:
Fix bundle revisions.
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
------------------------------------------------------------
revno: 4367.1.5
revision-id: jelmer at samba.org-20090528161416-k7x0l8hwuk2kyvsf
parent: jelmer at samba.org-20090528143208-hu7uwbmcwhvz7htb
parent: pqm at pqm.ubuntu.com-20090528153456-c5piafs9t37b0nz4
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: send-format-registry
timestamp: Thu 2009-05-28 18:14:16 +0200
message:
merge bzr.dev.
added:
bzrlib/_rio_py.py _rio_py.py-20090514104624-ied3d39oju8anmfz-1
bzrlib/_rio_pyx.pyx _rio_pyx.pyx-20090514104636-8203jcqvfny56yrd-1
bzrlib/tests/test__rio.py test__rio.py-20090514191748-cy74k8yj46gzoeq6-1
renamed:
bzrlib/tests/workingtree_implementations/test_get_file_with_stat.py => bzrlib/tests/tree_implementations/test_get_file_with_stat.py test_get_file_with_s-20080922035909-lhdovrr36jpxmu0v-1
modified:
.bzrignore bzrignore-20050311232317-81f7b71efa2db11a
NEWS NEWS-20050323055033-4e00b5db738777ff
bzr bzr.py-20050313053754-5485f144c7006fa6
bzrlib/__init__.py __init__.py-20050309040759-33e65acf91bbcd5d
bzrlib/branch.py branch.py-20050309040759-e4baf4e0d046576e
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/foreign.py foreign.py-20081112170002-olsxmandkk8qyfuq-1
bzrlib/groupcompress.py groupcompress.py-20080705181503-ccbxd6xuy1bdnrpu-8
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/mutabletree.py mutabletree.py-20060906023413-4wlkalbdpsxi2r4y-2
bzrlib/osutils.py osutils.py-20050309040759-eeaff12fbf77ac86
bzrlib/repofmt/groupcompress_repo.py repofmt.py-20080715094215-wp1qfvoo7093c8qr-1
bzrlib/revisiontree.py revisiontree.py-20060724012533-bg8xyryhxd0o0i0h-1
bzrlib/rio.py rio.py-20051128032247-770b120b34dfff60
bzrlib/send.py send.py-20090521192735-j7cdb33ykmtmzx4w-1
bzrlib/smart/server.py server.py-20061110062051-chzu10y32vx8gvur-1
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/blackbox/test_dpush.py test_dpush.py-20090108125928-st1td6le59g0vyv2-1
bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
bzrlib/tests/blackbox/test_send.py test_bundle.py-20060616222707-c21c8b7ea5ef57b1
bzrlib/tests/blackbox/test_serve.py test_serve.py-20060913064329-8t2pvmsikl4s3xhl-1
bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
bzrlib/tests/branch_implementations/test_push.py test_push.py-20070130153159-fhfap8uoifevg30j-1
bzrlib/tests/test_foreign.py test_foreign.py-20081125004048-ywb901edgp9lluxo-1
bzrlib/tests/test_http.py testhttp.py-20051018020158-b2eef6e867c514d9
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
bzrlib/tests/tree_implementations/__init__.py __init__.py-20060717075546-420s7b0bj9hzeowi-2
bzrlib/tests/workingtree_implementations/__init__.py __init__.py-20060203003124-b2aa5aca21a8bfad
bzrlib/transform.py transform.py-20060105172343-dd99e54394d91687
bzrlib/transport/__init__.py transport.py-20050711165921-4978aa7ce1285ad5
bzrlib/tree.py tree.py-20050309040759-9d5f2496be663e77
bzrlib/workingtree.py workingtree.py-20050511021032-29b6ec0a681e02e3
bzrlib/workingtree_4.py workingtree_4.py-20070208044105-5fgpc5j3ljlh5q6c-1
doc/en/user-guide/svn_plugin.txt svn_plugin.txt-20080509065016-cjc90f46407vi9a0-2
setup.py setup.py-20050314065409-02f8a0a6e3f9bc70
bzrlib/tests/tree_implementations/test_get_file_with_stat.py test_get_file_with_s-20080922035909-lhdovrr36jpxmu0v-1
------------------------------------------------------------
revno: 4367.1.4
revision-id: jelmer at samba.org-20090528143208-hu7uwbmcwhvz7htb
parent: jelmer at samba.org-20090526141018-5y160uts6358b29e
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: send-format-registry
timestamp: Thu 2009-05-28 16:32:08 +0200
message:
Remove unused imports.
modified:
bzrlib/send.py send.py-20090521192735-j7cdb33ykmtmzx4w-1
------------------------------------------------------------
revno: 4367.1.3
revision-id: jelmer at samba.org-20090526141018-5y160uts6358b29e
parent: jelmer at samba.org-20090521193300-t9lh68tu76djhb9h
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: send-format-registry
timestamp: Tue 2009-05-26 16:10:18 +0200
message:
Move cmd_{send,bundle_revisions} back to bzrlib.builtins per Ians request.
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/send.py send.py-20090521192735-j7cdb33ykmtmzx4w-1
------------------------------------------------------------
revno: 4367.1.2
revision-id: jelmer at samba.org-20090521193300-t9lh68tu76djhb9h
parent: jelmer at samba.org-20090516124005-65vemd1on2x2vaiz
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: send-format-registry
timestamp: Thu 2009-05-21 21:33:00 +0200
message:
Move send command to a separate file, move send format registry out of cmd_send.
added:
bzrlib/send.py send.py-20090521192735-j7cdb33ykmtmzx4w-1
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
------------------------------------------------------------
revno: 4367.1.1
revision-id: jelmer at samba.org-20090516124005-65vemd1on2x2vaiz
parent: pqm at pqm.ubuntu.com-20090514222335-85rfl946254b3vk2
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: send-format
timestamp: Sat 2009-05-16 14:40:05 +0200
message:
Add format registry for send formats.
modified:
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py 2009-05-28 17:14:38 +0000
+++ b/bzrlib/builtins.py 2009-05-28 18:06:43 +0000
@@ -4844,137 +4844,22 @@
'revision',
'message',
Option('body', help='Body for the email.', type=unicode),
- RegistryOption.from_kwargs('format',
- 'Use the specified output format.',
- **{'4': 'Bundle format 4, Merge Directive 2 (default)',
- '0.9': 'Bundle format 0.9, Merge Directive 1',})
+ RegistryOption('format',
+ help='Use the specified output format.',
+ lazy_registry=('bzrlib.send', 'format_registry'))
]
def run(self, submit_branch=None, public_branch=None, no_bundle=False,
no_patch=False, revision=None, remember=False, output=None,
format=None, mail_to=None, message=None, body=None, **kwargs):
- return self._run(submit_branch, revision, public_branch, remember,
+ from bzrlib.send import send
+ return send(submit_branch, revision, public_branch, remember,
format, no_bundle, no_patch, output,
- kwargs.get('from', '.'), mail_to, message, body)
-
- def _run(self, submit_branch, revision, public_branch, remember, format,
- no_bundle, no_patch, output, from_, mail_to, message, body):
- from bzrlib.revision import NULL_REVISION
- tree, branch = bzrdir.BzrDir.open_containing_tree_or_branch(from_)[:2]
- # we may need to write data into branch's repository to calculate
- # the data to send.
- branch.lock_write()
- try:
- if output is None:
- config = branch.get_config()
- if mail_to is None:
- mail_to = config.get_user_option('submit_to')
- mail_client = config.get_mail_client()
- if (not getattr(mail_client, 'supports_body', False)
- and body is not None):
- raise errors.BzrCommandError(
- 'Mail client "%s" does not support specifying body' %
- mail_client.__class__.__name__)
- if remember and submit_branch is None:
- raise errors.BzrCommandError(
- '--remember requires a branch to be specified.')
- stored_submit_branch = branch.get_submit_branch()
- remembered_submit_branch = None
- if submit_branch is None:
- submit_branch = stored_submit_branch
- remembered_submit_branch = "submit"
- else:
- if stored_submit_branch is None or remember:
- branch.set_submit_branch(submit_branch)
- if submit_branch is None:
- submit_branch = branch.get_parent()
- remembered_submit_branch = "parent"
- if submit_branch is None:
- raise errors.BzrCommandError('No submit branch known or'
- ' specified')
- if remembered_submit_branch is not None:
- note('Using saved %s location "%s" to determine what '
- 'changes to submit.', remembered_submit_branch,
- submit_branch)
-
- if mail_to is None or format is None:
- submit_br = Branch.open(submit_branch)
- submit_config = submit_br.get_config()
- if mail_to is None:
- mail_to = submit_config.get_user_option("child_submit_to")
- if format is None:
- format = submit_br.get_child_submit_format()
-
- stored_public_branch = branch.get_public_branch()
- if public_branch is None:
- public_branch = stored_public_branch
- elif stored_public_branch is None or remember:
- branch.set_public_branch(public_branch)
- if no_bundle and public_branch is None:
- raise errors.BzrCommandError('No public branch specified or'
- ' known')
- base_revision_id = None
- revision_id = None
- if revision is not None:
- if len(revision) > 2:
- raise errors.BzrCommandError('bzr send takes '
- 'at most two one revision identifiers')
- revision_id = revision[-1].as_revision_id(branch)
- if len(revision) == 2:
- base_revision_id = revision[0].as_revision_id(branch)
- if revision_id is None:
- revision_id = branch.last_revision()
- if revision_id == NULL_REVISION:
- raise errors.BzrCommandError('No revisions to submit.')
- if format is None:
- format = '4'
- if format == '4':
- directive = merge_directive.MergeDirective2.from_objects(
- branch.repository, revision_id, time.time(),
- osutils.local_time_offset(), submit_branch,
- public_branch=public_branch, include_patch=not no_patch,
- include_bundle=not no_bundle, message=message,
- base_revision_id=base_revision_id)
- elif format == '0.9':
- if not no_bundle:
- if not no_patch:
- patch_type = 'bundle'
- else:
- raise errors.BzrCommandError('Format 0.9 does not'
- ' permit bundle with no patch')
- else:
- if not no_patch:
- patch_type = 'diff'
- else:
- patch_type = None
- directive = merge_directive.MergeDirective.from_objects(
- branch.repository, revision_id, time.time(),
- osutils.local_time_offset(), submit_branch,
- public_branch=public_branch, patch_type=patch_type,
- message=message)
- else:
- raise errors.BzrCommandError("No such send format '%s'." %
- format)
-
- if output is None:
- directive.compose_merge_request(mail_client, mail_to, body,
- branch, tree)
- else:
- if output == '-':
- outfile = self.outf
- else:
- outfile = open(output, 'wb')
- try:
- outfile.writelines(directive.to_lines())
- finally:
- if outfile is not self.outf:
- outfile.close()
- finally:
- branch.unlock()
+ kwargs.get('from', '.'), mail_to, message, body,
+ self.outf)
class cmd_bundle_revisions(cmd_send):
-
"""Create a merge-directive for submitting changes.
A merge directive provides many things needed for requesting merges:
@@ -5022,10 +4907,9 @@
Option('output', short_name='o', help='Write directive to this file.',
type=unicode),
'revision',
- RegistryOption.from_kwargs('format',
- 'Use the specified output format.',
- **{'4': 'Bundle format 4, Merge Directive 2 (default)',
- '0.9': 'Bundle format 0.9, Merge Directive 1',})
+ RegistryOption('format',
+ help='Use the specified output format.',
+ lazy_registry=('bzrlib.send', 'format_registry')),
]
aliases = ['bundle']
@@ -5038,9 +4922,11 @@
format=None, **kwargs):
if output is None:
output = '-'
- return self._run(submit_branch, revision, public_branch, remember,
+ from bzrlib.send import send
+ return send(submit_branch, revision, public_branch, remember,
format, no_bundle, no_patch, output,
- kwargs.get('from', '.'), None, None, None)
+ kwargs.get('from', '.'), None, None, None,
+ self.outf)
class cmd_tag(Command):
=== added file 'bzrlib/send.py'
--- a/bzrlib/send.py 1970-01-01 00:00:00 +0000
+++ b/bzrlib/send.py 2009-05-28 16:14:16 +0000
@@ -0,0 +1,169 @@
+# Copyright (C) 2009 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+import time
+
+from bzrlib import (
+ bzrdir,
+ errors,
+ merge_directive,
+ osutils,
+ registry,
+ trace,
+ )
+from bzrlib.branch import (
+ Branch,
+ )
+from bzrlib.revision import (
+ NULL_REVISION,
+ )
+
+
+format_registry = registry.Registry()
+
+
+def send(submit_branch, revision, public_branch, remember, format,
+ no_bundle, no_patch, output, from_, mail_to, message, body,
+ to_file):
+ tree, branch = bzrdir.BzrDir.open_containing_tree_or_branch(from_)[:2]
+ # we may need to write data into branch's repository to calculate
+ # the data to send.
+ branch.lock_write()
+ try:
+ if output is None:
+ config = branch.get_config()
+ if mail_to is None:
+ mail_to = config.get_user_option('submit_to')
+ mail_client = config.get_mail_client()
+ if (not getattr(mail_client, 'supports_body', False)
+ and body is not None):
+ raise errors.BzrCommandError(
+ 'Mail client "%s" does not support specifying body' %
+ mail_client.__class__.__name__)
+ if remember and submit_branch is None:
+ raise errors.BzrCommandError(
+ '--remember requires a branch to be specified.')
+ stored_submit_branch = branch.get_submit_branch()
+ remembered_submit_branch = None
+ if submit_branch is None:
+ submit_branch = stored_submit_branch
+ remembered_submit_branch = "submit"
+ else:
+ if stored_submit_branch is None or remember:
+ branch.set_submit_branch(submit_branch)
+ if submit_branch is None:
+ submit_branch = branch.get_parent()
+ remembered_submit_branch = "parent"
+ if submit_branch is None:
+ raise errors.BzrCommandError('No submit branch known or'
+ ' specified')
+ if remembered_submit_branch is not None:
+ trace.note('Using saved %s location "%s" to determine what '
+ 'changes to submit.', remembered_submit_branch,
+ submit_branch)
+
+ if mail_to is None or format is None:
+ submit_br = Branch.open(submit_branch)
+ submit_config = submit_br.get_config()
+ if mail_to is None:
+ mail_to = submit_config.get_user_option("child_submit_to")
+ if format is None:
+ formatname = submit_br.get_child_submit_format()
+ try:
+ format = format_registry.get(formatname)
+ except KeyError:
+ raise errors.BzrCommandError("No such send format '%s'." %
+ formatname)
+
+ stored_public_branch = branch.get_public_branch()
+ if public_branch is None:
+ public_branch = stored_public_branch
+ elif stored_public_branch is None or remember:
+ branch.set_public_branch(public_branch)
+ if no_bundle and public_branch is None:
+ raise errors.BzrCommandError('No public branch specified or'
+ ' known')
+ base_revision_id = None
+ revision_id = None
+ if revision is not None:
+ if len(revision) > 2:
+ raise errors.BzrCommandError('bzr send takes '
+ 'at most two one revision identifiers')
+ revision_id = revision[-1].as_revision_id(branch)
+ if len(revision) == 2:
+ base_revision_id = revision[0].as_revision_id(branch)
+ if revision_id is None:
+ revision_id = branch.last_revision()
+ if revision_id == NULL_REVISION:
+ raise errors.BzrCommandError('No revisions to submit.')
+ if format is None:
+ # TODO: Query submit branch for its preferred format
+ format = format_registry.get()
+ directive = format(branch, revision_id, submit_branch,
+ public_branch, no_patch, no_bundle, message, base_revision_id)
+ if output is None:
+ directive.compose_merge_request(mail_client, mail_to, body,
+ branch, tree)
+ else:
+ if output == '-':
+ outfile = to_file
+ else:
+ outfile = open(output, 'wb')
+ try:
+ outfile.writelines(directive.to_lines())
+ finally:
+ if outfile is not to_file:
+ outfile.close()
+ finally:
+ branch.unlock()
+
+
+def _send_4(branch, revision_id, submit_branch, public_branch,
+ no_patch, no_bundle, message, base_revision_id):
+ return merge_directive.MergeDirective2.from_objects(
+ branch.repository, revision_id, time.time(),
+ osutils.local_time_offset(), submit_branch,
+ public_branch=public_branch, include_patch=not no_patch,
+ include_bundle=not no_bundle, message=message,
+ base_revision_id=base_revision_id)
+
+
+def _send_0_9(branch, revision_id, submit_branch, public_branch,
+ no_patch, no_bundle, message, base_revision_id):
+ if not no_bundle:
+ if not no_patch:
+ patch_type = 'bundle'
+ else:
+ raise errors.BzrCommandError('Format 0.9 does not'
+ ' permit bundle with no patch')
+ else:
+ if not no_patch:
+ patch_type = 'diff'
+ else:
+ patch_type = None
+ return merge_directive.MergeDirective.from_objects(
+ branch.repository, revision_id, time.time(),
+ osutils.local_time_offset(), submit_branch,
+ public_branch=public_branch, patch_type=patch_type,
+ message=message)
+
+
+format_registry.register('4',
+ _send_4, 'Bundle format 4, Merge Directive 2 (default)')
+format_registry.register('0.9',
+ _send_0_9, 'Bundle format 0.9, Merge Directive 1')
+format_registry.default_key = '4'
More information about the bazaar-commits
mailing list