39
40
def send(submit_branch, revision, public_branch, remember, format,
40
41
no_bundle, no_patch, output, from_, mail_to, message, body,
41
42
to_file, strict=None):
42
tree, branch = bzrdir.BzrDir.open_containing_tree_or_branch(from_)[:2]
43
tree, branch = controldir.ControlDir.open_containing_tree_or_branch(
43
45
# we may need to write data into branch's repository to calculate
44
46
# the data to send.
45
47
branch.lock_write()
51
53
mail_client = config.get_mail_client()
52
54
if (not getattr(mail_client, 'supports_body', False)
53
55
and body is not None):
54
raise errors.BzrCommandError(
55
'Mail client "%s" does not support specifying body' %
56
raise errors.BzrCommandError(gettext(
57
'Mail client "%s" does not support specifying body') %
56
58
mail_client.__class__.__name__)
57
59
if remember and submit_branch is None:
58
raise errors.BzrCommandError(
59
'--remember requires a branch to be specified.')
60
raise errors.BzrCommandError(gettext(
61
'--remember requires a branch to be specified.'))
60
62
stored_submit_branch = branch.get_submit_branch()
61
63
remembered_submit_branch = None
62
64
if submit_branch is None:
63
65
submit_branch = stored_submit_branch
64
66
remembered_submit_branch = "submit"
66
if stored_submit_branch is None or remember:
68
# Remembers if asked explicitly or no previous location is set
69
if remember or (remember is None and stored_submit_branch is None):
67
70
branch.set_submit_branch(submit_branch)
68
71
if submit_branch is None:
69
72
submit_branch = branch.get_parent()
70
73
remembered_submit_branch = "parent"
71
74
if submit_branch is None:
72
raise errors.BzrCommandError('No submit branch known or'
75
raise errors.BzrCommandError(gettext('No submit branch known or'
74
77
if remembered_submit_branch is not None:
75
trace.note('Using saved %s location "%s" to determine what '
76
'changes to submit.', remembered_submit_branch,
78
trace.note(gettext('Using saved {0} location "{1}" to determine '
79
'what changes to submit.').format(
80
remembered_submit_branch, submit_branch))
79
82
if mail_to is None or format is None:
80
83
# TODO: jam 20090716 we open the submit_branch here, but we *don't*
90
93
format = format_registry.get(formatname)
92
raise errors.BzrCommandError("No such send format '%s'." %
95
raise errors.BzrCommandError(gettext("No such send format '%s'.") %
95
98
stored_public_branch = branch.get_public_branch()
96
99
if public_branch is None:
97
100
public_branch = stored_public_branch
98
elif stored_public_branch is None or remember:
101
# Remembers if asked explicitly or no previous location is set
103
or (remember is None and stored_public_branch is None)):
99
104
branch.set_public_branch(public_branch)
100
105
if no_bundle and public_branch is None:
101
raise errors.BzrCommandError('No public branch specified or'
106
raise errors.BzrCommandError(gettext('No public branch specified or'
103
108
base_revision_id = None
104
109
revision_id = None
105
110
if revision is not None:
106
111
if len(revision) > 2:
107
raise errors.BzrCommandError('bzr send takes '
108
'at most two one revision identifiers')
112
raise errors.BzrCommandError(gettext('bzr send takes '
113
'at most two one revision identifiers'))
109
114
revision_id = revision[-1].as_revision_id(branch)
110
115
if len(revision) == 2:
111
116
base_revision_id = revision[0].as_revision_id(branch)
117
122
more_warning='Uncommitted changes will not be sent.')
118
123
revision_id = branch.last_revision()
119
124
if revision_id == NULL_REVISION:
120
raise errors.BzrCommandError('No revisions to submit.')
125
raise errors.BzrCommandError(gettext('No revisions to submit.'))
121
126
if format is None:
122
127
format = format_registry.get()
123
128
directive = format(branch, revision_id, submit_branch,
129
134
if directive.multiple_output_files:
130
135
if output == '-':
131
raise errors.BzrCommandError('- not supported for '
132
'merge directives that use more than one output file.')
136
raise errors.BzrCommandError(gettext('- not supported for '
137
'merge directives that use more than one output file.'))
133
138
if not os.path.exists(output):
134
139
os.mkdir(output, 0755)
135
140
for (filename, lines) in directive.to_files():