~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to send_changeset.py

  • Committer: John Arbash Meinel
  • Date: 2005-07-16 17:38:55 UTC
  • mto: (1185.82.1 bzr-w-changeset) (0.5.98)
  • mto: This revision was merged to the branch mainline in revision 1738.
  • Revision ID: john@arbash-meinel.com-20050716173855-a38d2990b32a4649
Fixed a bug in the rename code, added more tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
16
def send_changeset(branch, revisions, to_address, message, file):
 
17
    import bzrlib.osutils
 
18
    from bzrlib import find_branch
 
19
    from bzrlib.commands import BzrCommandError
 
20
    import gen_changeset
 
21
    import send_changeset
 
22
    from cStringIO import StringIO
 
23
 
 
24
    base_rev_id, target_rev_id = common.canonicalize_revision(branch, revisions)
 
25
    rev = branch.get_revision(target_rev_id)
 
26
    if not message:
 
27
        message = rev.message.split('\n')[0]
 
28
 
 
29
    from_address = bzrlib.osutils._get_user_id()
 
30
 
 
31
    outer = MIMEMultipart()
 
32
    outer['Subject'] = '[PATCH] ' + message
 
33
    outer['To'] = to_address
 
34
    outer['From'] = from_address
 
35
 
 
36
    # Either read the mail body from the specified file, or spawn
 
37
    # an editor and let the user type a description.
 
38
    if file:
 
39
        mail_body = open(file, "U").read()
 
40
    else:
 
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"
 
46
 
 
47
        mail_body = bzrlib.osutils.get_text_message(info)
 
48
        if mail_body is None:
 
49
            raise BzrCommandError("aborted")
 
50
    outer.attach(MIMEText(mail_body))
 
51
    
 
52
    changeset_fp = StringIO()
 
53
    gen_changeset.show_changeset(branch, revisions, to_file=changeset_fp)
 
54
    outer.attach(MIMEText(changeset_fp.getvalue()))
 
55
 
 
56
    try:
 
57
        fp = open(os.path.join(bzrlib.osutils.config_dir(), 'smtp-host'), 'U')
 
58
        smtpconn = smtplib.SMTP(fp.readline().strip('\n'))
 
59
    except:
 
60
        smtpconn = smtplib.SMTP()
 
61
 
 
62
    smtpconn.connect()
 
63
    smtpconn.sendmail(from_address, to_address, outer.as_string())
 
64
    smtpconn.close()