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

  • Committer: Martin Pool
  • Date: 2010-06-24 06:53:06 UTC
  • mfrom: (5317 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5343.
  • Revision ID: mbp@sourcefrog.net-20100624065306-qcx1wg84ufuckime
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2007 Canonical Ltd
 
1
# Copyright (C) 2006-2010 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
182
182
               **kwargs):
183
183
        # avoid circular imports
184
184
        from bzrlib import commit
185
 
        if revprops is None:
186
 
            revprops = {}
187
185
        possible_master_transports=[]
188
 
        if not 'branch-nick' in revprops:
189
 
            revprops['branch-nick'] = self.branch._get_nick(
 
186
        revprops = commit.Commit.update_revprops(
 
187
                revprops,
 
188
                self.branch,
 
189
                kwargs.pop('authors', None),
 
190
                kwargs.pop('author', None),
190
191
                kwargs.get('local', False),
191
192
                possible_master_transports)
192
 
        authors = kwargs.pop('authors', None)
193
 
        author = kwargs.pop('author', None)
194
 
        if authors is not None:
195
 
            if author is not None:
196
 
                raise AssertionError('Specifying both author and authors '
197
 
                        'is not allowed. Specify just authors instead')
198
 
            if 'author' in revprops or 'authors' in revprops:
199
 
                # XXX: maybe we should just accept one of them?
200
 
                raise AssertionError('author property given twice')
201
 
            if authors:
202
 
                for individual in authors:
203
 
                    if '\n' in individual:
204
 
                        raise AssertionError('\\n is not a valid character '
205
 
                                'in an author identity')
206
 
                revprops['authors'] = '\n'.join(authors)
207
 
        if author is not None:
208
 
            symbol_versioning.warn('The parameter author was deprecated'
209
 
                   ' in version 1.13. Use authors instead',
210
 
                   DeprecationWarning)
211
 
            if 'author' in revprops or 'authors' in revprops:
212
 
                # XXX: maybe we should just accept one of them?
213
 
                raise AssertionError('author property given twice')
214
 
            if '\n' in author:
215
 
                raise AssertionError('\\n is not a valid character '
216
 
                        'in an author identity')
217
 
            revprops['authors'] = author
218
193
        # args for wt.commit start at message from the Commit.commit method,
219
194
        args = (message, ) + args
220
195
        for hook in MutableTree.hooks['start_commit']:
258
233
            return False
259
234
 
260
235
    @needs_read_lock
 
236
    def check_changed_or_out_of_date(self, strict, opt_name,
 
237
                                     more_error, more_warning):
 
238
        """Check the tree for uncommitted changes and branch synchronization.
 
239
 
 
240
        If strict is None and not set in the config files, a warning is issued.
 
241
        If strict is True, an error is raised.
 
242
        If strict is False, no checks are done and no warning is issued.
 
243
 
 
244
        :param strict: True, False or None, searched in branch config if None.
 
245
 
 
246
        :param opt_name: strict option name to search in config file.
 
247
 
 
248
        :param more_error: Details about how to avoid the check.
 
249
 
 
250
        :param more_warning: Details about what is happening.
 
251
        """
 
252
        if strict is None:
 
253
            strict = self.branch.get_config().get_user_option_as_bool(opt_name)
 
254
        if strict is not False:
 
255
            err_class = None
 
256
            if (self.has_changes()):
 
257
                err_class = errors.UncommittedChanges
 
258
            elif self.last_revision() != self.branch.last_revision():
 
259
                # The tree has lost sync with its branch, there is little
 
260
                # chance that the user is aware of it but he can still force
 
261
                # the action with --no-strict
 
262
                err_class = errors.OutOfDateTree
 
263
            if err_class is not None:
 
264
                if strict is None:
 
265
                    err = err_class(self, more=more_warning)
 
266
                    # We don't want to interrupt the user if he expressed no
 
267
                    # preference about strict.
 
268
                    trace.warning('%s', err._format())
 
269
                else:
 
270
                    err = err_class(self, more=more_error)
 
271
                    raise err
 
272
 
 
273
    @needs_read_lock
261
274
    def last_revision(self):
262
275
        """Return the revision id of the last commit performed in this tree.
263
276
 
380
393
 
381
394
        if not file_list:
382
395
            # no paths supplied: add the entire tree.
 
396
            # FIXME: this assumes we are running in a working tree subdir :-/
 
397
            # -- vila 20100208
383
398
            file_list = [u'.']
384
399
        # mutter("smart add of %r")
385
400
        inv = self.inventory
387
402
        ignored = {}
388
403
        dirs_to_add = []
389
404
        user_dirs = set()
 
405
        conflicts_related = set()
 
406
        # Not all mutable trees can have conflicts
 
407
        if getattr(self, 'conflicts', None) is not None:
 
408
            # Collect all related files without checking whether they exist or
 
409
            # are versioned. It's cheaper to do that once for all conflicts
 
410
            # than trying to find the relevant conflict for each added file.
 
411
            for c in self.conflicts():
 
412
                conflicts_related.update(c.associated_filenames())
390
413
 
391
414
        # validate user file paths and convert all paths to tree
392
415
        # relative : it's cheaper to make a tree relative path an abspath
453
476
            if illegalpath_re.search(directory.raw_path):
454
477
                trace.warning("skipping %r (contains \\n or \\r)" % abspath)
455
478
                continue
 
479
            if directory.raw_path in conflicts_related:
 
480
                # If the file looks like one generated for a conflict, don't
 
481
                # add it.
 
482
                trace.warning(
 
483
                    'skipping %s (generated to help resolve conflicts)',
 
484
                    abspath)
 
485
                continue
456
486
 
457
487
            if parent_ie is not None:
458
488
                versioned = directory.base_path in parent_ie.children