3
Generate a changeset and send it by mail.
6
import bzrlib, bzrlib.changeset
9
from email import Encoders
10
from email.Message import Message
11
from email.MIMEBase import MIMEBase
12
from email.MIMEMultipart import MIMEMultipart
13
from email.MIMEText import MIMEText
16
def send_changeset(branch, revisions, to_address, message, file):
18
from bzrlib import find_branch
19
from bzrlib.commands import BzrCommandError
22
from cStringIO import StringIO
24
base_rev_id, target_rev_id = common.canonicalize_revision(branch, revisions)
25
rev = branch.get_revision(target_rev_id)
27
message = rev.message.split('\n')[0]
29
from_address = bzrlib.osutils._get_user_id()
31
outer = MIMEMultipart()
32
outer['Subject'] = '[PATCH] ' + message
33
outer['To'] = to_address
34
outer['From'] = from_address
36
# Either read the mail body from the specified file, or spawn
37
# an editor and let the user type a description.
39
mail_body = open(file, "U").read()
41
info = "Changeset by %s\n" % rev.committer
42
info += "From %s\n" % base_rev_id
43
info += "with the following message:\n"
44
for line in rev.message.split('\n'):
45
info += " " + line + "\n"
47
mail_body = bzrlib.osutils.get_text_message(info)
49
raise BzrCommandError("aborted")
50
outer.attach(MIMEText(mail_body))
52
changeset_fp = StringIO()
53
gen_changeset.show_changeset(branch, revisions, to_file=changeset_fp)
54
outer.attach(MIMEText(changeset_fp.getvalue()))
57
fp = open(os.path.join(bzrlib.osutils.config_dir(), 'smtp-host'), 'U')
58
smtpconn = smtplib.SMTP(fp.readline().strip('\n'))
60
smtpconn = smtplib.SMTP()
63
smtpconn.sendmail(from_address, to_address, outer.as_string())