/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.5.24 by John Arbash Meinel
Adding send-changeset from Johan Rydberg
1
#!/usr/bin/env python
2
"""\
3
Generate a changeset and send it by mail.
4
"""
5
6
import bzrlib, bzrlib.changeset
7
import common, smtplib
8
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
14
15
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
16
def send_changeset(branch, revisions, to_address, message, file):
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
17
    from bzrlib import find_branch
18
    from bzrlib.commands import BzrCommandError
19
    import gen_changeset
20
    import send_changeset
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
21
    from cStringIO import StringIO
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
22
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
23
    base_rev_id, target_rev_id = gen_changeset._canonicalize_revision(branch, revisions)
24
    rev = branch.get_revision(target_rev_id)
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
25
    if not message:
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
26
        message = rev.message.split('\n')[0]
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
27
28
    from_address = bzrlib.osutils._get_user_id()
29
0.5.24 by John Arbash Meinel
Adding send-changeset from Johan Rydberg
30
    outer = MIMEMultipart()
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
31
    outer['Subject'] = '[PATCH] ' + message
0.5.24 by John Arbash Meinel
Adding send-changeset from Johan Rydberg
32
    outer['To'] = to_address
33
    outer['From'] = from_address
34
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
35
    # Either read the mail body from the specified file, or spawn
36
    # an editor and let the user type a description.
37
    if file:
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
38
        mail_body = open(file, "U").read()
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
39
    else:
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
40
        info = "Changeset by %s\n" % rev.committer
41
        info += "From %s\n" % base_rev_id
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
42
        info += "with the following message:\n"
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
43
        for line in rev.message.split('\n'):
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
44
            info += "  " + line + "\n"
45
46
        mail_body = bzrlib.osutils.get_text_message(info)
47
        if mail_body is None:
48
            raise BzrCommandError("aborted")
49
    outer.attach(MIMEText(mail_body))
0.5.24 by John Arbash Meinel
Adding send-changeset from Johan Rydberg
50
    
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
51
    changeset_fp = StringIO()
52
    gen_changeset.show_changeset(branch, revisions, to_file=changeset_fp)
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
53
    outer.attach(MIMEText(changeset_fp.getvalue()))
54
55
    try:
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
56
        fp = open(os.path.join(bzrlib.osutils.config_dir(), 'smtp-host'), 'U')
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
57
        smtpconn = smtplib.SMTP(fp.readline().strip('\n'))
58
    except:
59
        smtpconn = smtplib.SMTP()
60
61
    smtpconn.connect()
62
    smtpconn.sendmail(from_address, to_address, outer.as_string())
63
    smtpconn.close()