1
# Copyright (C) 2006 Canonical Ltd
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
Generate a changeset and send it by mail.
21
import bzrlib, bzrlib.changeset
22
import common, smtplib
24
from email import Encoders
25
from email.Message import Message
26
from email.MIMEBase import MIMEBase
27
from email.MIMEMultipart import MIMEMultipart
28
from email.MIMEText import MIMEText
31
def send_changeset(branch, revisions, to_address, message, file):
33
from bzrlib import find_branch
34
from bzrlib.commands import BzrCommandError
37
from cStringIO import StringIO
39
base_rev_id, target_rev_id = common.canonicalize_revision(branch, revisions)
40
rev = branch.get_revision(target_rev_id)
42
message = rev.message.split('\n')[0]
44
from_address = bzrlib.osutils._get_user_id()
46
outer = MIMEMultipart()
47
outer['Subject'] = '[PATCH] ' + message
48
outer['To'] = to_address
49
outer['From'] = from_address
51
# Either read the mail body from the specified file, or spawn
52
# an editor and let the user type a description.
54
mail_body = open(file, "U").read()
56
info = "Changeset by %s\n" % rev.committer
57
info += "From %s\n" % base_rev_id
58
info += "with the following message:\n"
59
for line in rev.message.split('\n'):
60
info += " " + line + "\n"
62
mail_body = bzrlib.osutils.get_text_message(info)
64
raise BzrCommandError("aborted")
65
outer.attach(MIMEText(mail_body))
67
changeset_fp = StringIO()
68
gen_changeset.show_changeset(branch, revisions, to_file=changeset_fp)
69
outer.attach(MIMEText(changeset_fp.getvalue()))
72
fp = open(os.path.join(bzrlib.osutils.config_dir(), 'smtp-host'), 'U')
73
smtpconn = smtplib.SMTP(fp.readline().strip('\n'))
75
smtpconn = smtplib.SMTP()
78
smtpconn.sendmail(from_address, to_address, outer.as_string())