~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/send.py

  • Committer: John Arbash Meinel
  • Date: 2010-01-12 22:51:31 UTC
  • mto: This revision was merged to the branch mainline in revision 4955.
  • Revision ID: john@arbash-meinel.com-20100112225131-he8h411p6aeeb947
Delay grabbing an output stream until we actually go to show a diff.

This makes the test suite happy, but it also seems to be reasonable.
If we aren't going to write anything, we don't need to hold an
output stream open.

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,
110
110
            if len(revision) == 2:
111
111
                base_revision_id = revision[0].as_revision_id(branch)
112
112
        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.')
 
113
            if strict is None:
 
114
                strict = branch.get_config(
 
115
                    ).get_user_option_as_bool('send_strict')
 
116
            if strict is None: strict = True # default value
 
117
            if strict and tree is not None:
 
118
                if (tree.has_changes()):
 
119
                    raise errors.UncommittedChanges(
 
120
                        tree, more='Use --no-strict to force the send.')
 
121
                if tree.last_revision() != tree.branch.last_revision():
 
122
                    # The tree has lost sync with its branch, there is little
 
123
                    # chance that the user is aware of it but he can still force
 
124
                    # the send with --no-strict
 
125
                    raise errors.OutOfDateTree(
 
126
                        tree, more='Use --no-strict to force the send.')
118
127
            revision_id = branch.last_revision()
119
128
        if revision_id == NULL_REVISION:
120
129
            raise errors.BzrCommandError('No revisions to submit.')
126
135
            directive.compose_merge_request(mail_client, mail_to, body,
127
136
                                            branch, tree)
128
137
        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()
 
138
            if output == '-':
 
139
                outfile = to_file
142
140
            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()
 
141
                outfile = open(output, 'wb')
 
142
            try:
 
143
                outfile.writelines(directive.to_lines())
 
144
            finally:
 
145
                if outfile is not to_file:
 
146
                    outfile.close()
152
147
    finally:
153
148
        branch.unlock()
154
149
 
155
150
 
156
151
def _send_4(branch, revision_id, submit_branch, public_branch,
157
152
            no_patch, no_bundle, message, base_revision_id):
158
 
    from bzrlib import merge_directive
159
153
    return merge_directive.MergeDirective2.from_objects(
160
154
        branch.repository, revision_id, time.time(),
161
155
        osutils.local_time_offset(), submit_branch,
177
171
            patch_type = 'diff'
178
172
        else:
179
173
            patch_type = None
180
 
    from bzrlib import merge_directive
181
174
    return merge_directive.MergeDirective.from_objects(
182
175
        branch.repository, revision_id, time.time(),
183
176
        osutils.local_time_offset(), submit_branch,