/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/commit.py

  • Committer: John Arbash Meinel
  • Date: 2011-03-15 10:28:20 UTC
  • mto: This revision was merged to the branch mainline in revision 5725.
  • Revision ID: john@arbash-meinel.com-20110315102820-51wy8wjre5ol34mu
'bzr export' needs to use 'exact' encoding.

If we are going to be writing binary bites out of stdout, then it needs to
be in binary mode, or it will corrupt the data stream.
Oddly enough, it only seemed to fail if we set '--verbose'. I didn't
bother to track into that bug.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005-2011 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
55
55
    revision,
56
56
    trace,
57
57
    tree,
 
58
    ui,
58
59
    )
59
60
from bzrlib.branch import Branch
60
61
from bzrlib.cleanup import OperationWithCleanups
72
73
from bzrlib.inventory import Inventory, InventoryEntry, make_entry
73
74
from bzrlib import symbol_versioning
74
75
from bzrlib.urlutils import unescape_for_display
75
 
import bzrlib.ui
76
76
 
77
77
 
78
78
class NullCommitReporter(object):
174
174
        self.reporter = reporter
175
175
        self.config = config
176
176
 
 
177
    @staticmethod
 
178
    def update_revprops(revprops, branch, authors=None, author=None,
 
179
                        local=False, possible_master_transports=None):
 
180
        if revprops is None:
 
181
            revprops = {}
 
182
        if possible_master_transports is None:
 
183
            possible_master_transports = []
 
184
        if not 'branch-nick' in revprops:
 
185
            revprops['branch-nick'] = branch._get_nick(
 
186
                local,
 
187
                possible_master_transports)
 
188
        if authors is not None:
 
189
            if author is not None:
 
190
                raise AssertionError('Specifying both author and authors '
 
191
                        'is not allowed. Specify just authors instead')
 
192
            if 'author' in revprops or 'authors' in revprops:
 
193
                # XXX: maybe we should just accept one of them?
 
194
                raise AssertionError('author property given twice')
 
195
            if authors:
 
196
                for individual in authors:
 
197
                    if '\n' in individual:
 
198
                        raise AssertionError('\\n is not a valid character '
 
199
                                'in an author identity')
 
200
                revprops['authors'] = '\n'.join(authors)
 
201
        if author is not None:
 
202
            symbol_versioning.warn('The parameter author was deprecated'
 
203
                   ' in version 1.13. Use authors instead',
 
204
                   DeprecationWarning)
 
205
            if 'author' in revprops or 'authors' in revprops:
 
206
                # XXX: maybe we should just accept one of them?
 
207
                raise AssertionError('author property given twice')
 
208
            if '\n' in author:
 
209
                raise AssertionError('\\n is not a valid character '
 
210
                        'in an author identity')
 
211
            revprops['authors'] = author
 
212
        return revprops
 
213
 
177
214
    def commit(self,
178
215
               message=None,
179
216
               timestamp=None,
289
326
                minimum_path_selection(specific_files))
290
327
        else:
291
328
            self.specific_files = None
292
 
            
 
329
 
293
330
        self.allow_pointless = allow_pointless
294
331
        self.message_callback = message_callback
295
332
        self.timestamp = timestamp
309
346
            not self.branch.repository._format.supports_tree_reference and
310
347
            (self.branch.repository._format.fast_deltas or
311
348
             len(self.parents) < 2))
312
 
        self.pb = bzrlib.ui.ui_factory.nested_progress_bar()
 
349
        self.pb = ui.ui_factory.nested_progress_bar()
313
350
        operation.add_cleanup(self.pb.finished)
314
351
        self.basis_revid = self.work_tree.last_revision()
315
352
        self.basis_tree = self.work_tree.basis_tree()
343
380
        self.pb_stage_count = 0
344
381
        self.pb_stage_total = 5
345
382
        if self.bound_branch:
346
 
            self.pb_stage_total += 1
 
383
            # 2 extra stages: "Uploading data to master branch" and "Merging
 
384
            # tags to master branch"
 
385
            self.pb_stage_total += 2
347
386
        self.pb.show_pct = False
348
387
        self.pb.show_spinner = False
349
388
        self.pb.show_eta = False
363
402
        self._set_progress_stage("Collecting changes", counter=True)
364
403
        self.builder = self.branch.get_commit_builder(self.parents,
365
404
            self.config, timestamp, timezone, committer, self.revprops, rev_id)
 
405
        if not self.builder.supports_record_entry_contents and self.exclude:
 
406
            self.builder.abort()
 
407
            raise errors.ExcludesUnsupported(self.branch.repository)
366
408
 
367
409
        try:
368
410
            self.builder.will_record_deletes()
407
449
            self._set_progress_stage("Uploading data to master branch")
408
450
            # 'commit' to the master first so a timeout here causes the
409
451
            # local branch to be out of date
410
 
            self.master_branch.import_last_revision_info(
411
 
                self.branch.repository, new_revno, self.rev_id)
 
452
            self.master_branch.import_last_revision_info_and_tags(
 
453
                self.branch, new_revno, self.rev_id)
412
454
 
413
455
        # and now do the commit locally.
414
456
        self.branch.set_last_revision_info(new_revno, self.rev_id)
415
457
 
 
458
        # Merge local tags to remote
 
459
        if self.bound_branch:
 
460
            self._set_progress_stage("Merging tags to master branch")
 
461
            tag_conflicts = self.branch.tags.merge_to(self.master_branch.tags)
 
462
            if tag_conflicts:
 
463
                warning_lines = ['    ' + name for name, _, _ in tag_conflicts]
 
464
                note("Conflicting tags in bound branch:\n" +
 
465
                    "\n".join(warning_lines))
 
466
 
416
467
        # Make the working tree be up to date with the branch. This
417
468
        # includes automatic changes scheduled to be made to the tree, such
418
469
        # as updating its basis and unversioning paths that were missing.