/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/send.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-04 17:12:29 UTC
  • mto: This revision was merged to the branch mainline in revision 4410.
  • Revision ID: john@arbash-meinel.com-20090604171229-kbgfatt63y3u3uh1
Some small tweaks to decoding strings (avoid passing over the length 2x)

Down to 1.1s (from 1.4s) for decoding all of bzr.dev.
Also, favor decoding strings and then lists in _decode_object, since that is the
frequency we have those types inside Revisions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2009, 2010 Canonical Ltd
 
1
# Copyright (C) 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
 
import os
19
18
import time
20
19
 
21
20
from bzrlib import (
22
21
    bzrdir,
23
22
    errors,
 
23
    merge_directive,
24
24
    osutils,
25
25
    registry,
26
26
    trace,
37
37
 
38
38
 
39
39
def send(submit_branch, revision, public_branch, remember, format,
40
 
         no_bundle, no_patch, output, from_, mail_to, message, body,
41
 
         to_file, strict=None):
 
40
         no_bundle, no_patch, output, from_, mail_to, message, body, 
 
41
         to_file):
42
42
    tree, branch = bzrdir.BzrDir.open_containing_tree_or_branch(from_)[:2]
43
43
    # we may need to write data into branch's repository to calculate
44
44
    # the data to send.
77
77
                       submit_branch)
78
78
 
79
79
        if mail_to is None or format is None:
80
 
            # TODO: jam 20090716 we open the submit_branch here, but we *don't*
81
 
            #       pass it down into the format creation, so it will have to
82
 
            #       open it again
83
80
            submit_br = Branch.open(submit_branch)
84
81
            submit_config = submit_br.get_config()
85
82
            if mail_to is None:
110
107
            if len(revision) == 2:
111
108
                base_revision_id = revision[0].as_revision_id(branch)
112
109
        if revision_id is None:
113
 
            if tree is not None:
114
 
                tree.check_changed_or_out_of_date(
115
 
                    strict, 'send_strict',
116
 
                    more_error='Use --no-strict to force the send.',
117
 
                    more_warning='Uncommitted changes will not be sent.')
118
110
            revision_id = branch.last_revision()
119
111
        if revision_id == NULL_REVISION:
120
112
            raise errors.BzrCommandError('No revisions to submit.')
121
113
        if format is None:
 
114
            # TODO: Query submit branch for its preferred format
122
115
            format = format_registry.get()
123
 
        directive = format(branch, revision_id, submit_branch,
 
116
        directive = format(branch, revision_id, submit_branch, 
124
117
            public_branch, no_patch, no_bundle, message, base_revision_id)
125
118
        if output is None:
126
119
            directive.compose_merge_request(mail_client, mail_to, body,
127
120
                                            branch, tree)
128
121
        else:
129
 
            if directive.multiple_output_files:
130
 
                if output == '-':
131
 
                    raise errors.BzrCommandError('- not supported for '
132
 
                        'merge directives that use more than one output file.')
133
 
                if not os.path.exists(output):
134
 
                    os.mkdir(output, 0755)
135
 
                for (filename, lines) in directive.to_files():
136
 
                    path = os.path.join(output, filename)
137
 
                    outfile = open(path, 'wb')
138
 
                    try:
139
 
                        outfile.writelines(lines)
140
 
                    finally:
141
 
                        outfile.close()
 
122
            if output == '-':
 
123
                outfile = to_file
142
124
            else:
143
 
                if output == '-':
144
 
                    outfile = to_file
145
 
                else:
146
 
                    outfile = open(output, 'wb')
147
 
                try:
148
 
                    outfile.writelines(directive.to_lines())
149
 
                finally:
150
 
                    if outfile is not to_file:
151
 
                        outfile.close()
 
125
                outfile = open(output, 'wb')
 
126
            try:
 
127
                outfile.writelines(directive.to_lines())
 
128
            finally:
 
129
                if outfile is not to_file:
 
130
                    outfile.close()
152
131
    finally:
153
132
        branch.unlock()
154
133
 
155
134
 
156
135
def _send_4(branch, revision_id, submit_branch, public_branch,
157
136
            no_patch, no_bundle, message, base_revision_id):
158
 
    from bzrlib import merge_directive
159
137
    return merge_directive.MergeDirective2.from_objects(
160
138
        branch.repository, revision_id, time.time(),
161
139
        osutils.local_time_offset(), submit_branch,
177
155
            patch_type = 'diff'
178
156
        else:
179
157
            patch_type = None
180
 
    from bzrlib import merge_directive
181
158
    return merge_directive.MergeDirective.from_objects(
182
159
        branch.repository, revision_id, time.time(),
183
160
        osutils.local_time_offset(), submit_branch,