~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commit.py

  • Committer: Vincent Ladeuil
  • Date: 2011-02-08 13:56:49 UTC
  • mfrom: (5609.2.12 2.3)
  • mto: This revision was merged to the branch mainline in revision 5652.
  • Revision ID: v.ladeuil+lp@free.fr-20110208135649-5w2ifp3o040h83f3
Merge 2.3 into trunk including fixes for bug #715058 and bug #713258

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,
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
407
446
            self._set_progress_stage("Uploading data to master branch")
408
447
            # 'commit' to the master first so a timeout here causes the
409
448
            # local branch to be out of date
410
 
            self.master_branch.import_last_revision_info(
411
 
                self.branch.repository, new_revno, self.rev_id)
 
449
            self.master_branch.import_last_revision_info_and_tags(
 
450
                self.branch, new_revno, self.rev_id)
412
451
 
413
452
        # and now do the commit locally.
414
453
        self.branch.set_last_revision_info(new_revno, self.rev_id)
415
454
 
 
455
        # Merge local tags to remote
 
456
        if self.bound_branch:
 
457
            self._set_progress_stage("Merging tags to master branch")
 
458
            tag_conflicts = self.branch.tags.merge_to(self.master_branch.tags)
 
459
            if tag_conflicts:
 
460
                warning_lines = ['    ' + name for name, _, _ in tag_conflicts]
 
461
                note("Conflicting tags in bound branch:\n" +
 
462
                    "\n".join(warning_lines))
 
463
 
416
464
        # Make the working tree be up to date with the branch. This
417
465
        # includes automatic changes scheduled to be made to the tree, such
418
466
        # as updating its basis and unversioning paths that were missing.