~bzr-pqm/bzr/bzr.dev

2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
1
# Copyright (C) 2006 Canonical Ltd
2
#
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.
7
#
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.
12
#
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
16
0.5.24 by John Arbash Meinel
Adding send-changeset from Johan Rydberg
17
"""\
18
Generate a changeset and send it by mail.
19
"""
20
21
import bzrlib, bzrlib.changeset
22
import common, smtplib
23
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
29
30
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
31
def send_changeset(branch, revisions, to_address, message, file):
0.5.32 by John Arbash Meinel
Fixed location of bzrlib.osutils
32
    import bzrlib.osutils
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
33
    from bzrlib import find_branch
34
    from bzrlib.commands import BzrCommandError
35
    import gen_changeset
36
    import send_changeset
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
37
    from cStringIO import StringIO
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
38
0.5.36 by John Arbash Meinel
Updated so that read_changeset is able to parse the output
39
    base_rev_id, target_rev_id = common.canonicalize_revision(branch, revisions)
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
40
    rev = branch.get_revision(target_rev_id)
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
41
    if not message:
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
42
        message = rev.message.split('\n')[0]
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
43
44
    from_address = bzrlib.osutils._get_user_id()
45
0.5.24 by John Arbash Meinel
Adding send-changeset from Johan Rydberg
46
    outer = MIMEMultipart()
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
47
    outer['Subject'] = '[PATCH] ' + message
0.5.24 by John Arbash Meinel
Adding send-changeset from Johan Rydberg
48
    outer['To'] = to_address
49
    outer['From'] = from_address
50
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
51
    # Either read the mail body from the specified file, or spawn
52
    # an editor and let the user type a description.
53
    if file:
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
54
        mail_body = open(file, "U").read()
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
55
    else:
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
56
        info = "Changeset by %s\n" % rev.committer
57
        info += "From %s\n" % base_rev_id
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
58
        info += "with the following message:\n"
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
59
        for line in rev.message.split('\n'):
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
60
            info += "  " + line + "\n"
61
62
        mail_body = bzrlib.osutils.get_text_message(info)
63
        if mail_body is None:
64
            raise BzrCommandError("aborted")
65
    outer.attach(MIMEText(mail_body))
0.5.24 by John Arbash Meinel
Adding send-changeset from Johan Rydberg
66
    
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
67
    changeset_fp = StringIO()
68
    gen_changeset.show_changeset(branch, revisions, to_file=changeset_fp)
0.5.30 by John Arbash Meinel
Merging send-changeset updates from jrydberg
69
    outer.attach(MIMEText(changeset_fp.getvalue()))
70
71
    try:
0.5.31 by John Arbash Meinel
Some cleanup to the send_changeset work.
72
        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
73
        smtpconn = smtplib.SMTP(fp.readline().strip('\n'))
74
    except:
75
        smtpconn = smtplib.SMTP()
76
77
    smtpconn.connect()
78
    smtpconn.sendmail(from_address, to_address, outer.as_string())
79
    smtpconn.close()