/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: Robert Collins
  • Date: 2010-05-06 11:08:10 UTC
  • mto: This revision was merged to the branch mainline in revision 5223.
  • Revision ID: robertc@robertcollins.net-20100506110810-h3j07fh5gmw54s25
Cleaner matcher matching revised unlocking protocol.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2011 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
32
32
    hooks,
33
33
    osutils,
34
34
    revisiontree,
35
 
    inventory,
36
35
    symbol_versioning,
37
36
    trace,
38
37
    tree,
183
182
               **kwargs):
184
183
        # avoid circular imports
185
184
        from bzrlib import commit
 
185
        if revprops is None:
 
186
            revprops = {}
186
187
        possible_master_transports=[]
187
 
        revprops = commit.Commit.update_revprops(
188
 
                revprops,
189
 
                self.branch,
190
 
                kwargs.pop('authors', None),
191
 
                kwargs.pop('author', None),
 
188
        if not 'branch-nick' in revprops:
 
189
            revprops['branch-nick'] = self.branch._get_nick(
192
190
                kwargs.get('local', False),
193
191
                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
194
218
        # args for wt.commit start at message from the Commit.commit method,
195
219
        args = (message, ) + args
196
220
        for hook in MutableTree.hooks['start_commit']:
376
400
        This is designed more towards DWIM for humans than API clarity.
377
401
        For the specific behaviour see the help for cmd_add().
378
402
 
379
 
        :param file_list: List of zero or more paths.  *NB: these are 
380
 
            interpreted relative to the process cwd, not relative to the 
381
 
            tree.*  (Add and most other tree methods use tree-relative
382
 
            paths.)
383
403
        :param action: A reporter to be called with the inventory, parent_ie,
384
404
            path and kind of the path being added. It may return a file_id if
385
405
            a specific one should be used.
416
436
            for c in self.conflicts():
417
437
                conflicts_related.update(c.associated_filenames())
418
438
 
419
 
        # expand any symlinks in the directory part, while leaving the
420
 
        # filename alone
421
 
        # only expanding if symlinks are supported avoids windows path bugs
422
 
        if osutils.has_symlinks():
423
 
            file_list = map(osutils.normalizepath, file_list)
424
 
 
425
439
        # validate user file paths and convert all paths to tree
426
440
        # relative : it's cheaper to make a tree relative path an abspath
427
441
        # than to convert an abspath to tree relative, and it's cheaper to
547
561
                        this_ie = None
548
562
                    else:
549
563
                        this_ie = inv[this_id]
550
 
                        # Same as in _add_one below, if the inventory doesn't
551
 
                        # think this is a directory, update the inventory
552
 
                        if this_ie.kind != 'directory':
553
 
                            this_ie = inventory.make_entry('directory',
554
 
                                this_ie.name, this_ie.parent_id, this_id)
555
 
                            del inv[this_id]
556
 
                            inv.add(this_ie)
557
564
 
558
565
                for subf in sorted(os.listdir(abspath)):
559
566
                    # here we could use TreeDirectory rather than
733
740
        file_id or None to generate a new file id
734
741
    :returns: None
735
742
    """
736
 
    # if the parent exists, but isn't a directory, we have to do the
737
 
    # kind change now -- really the inventory shouldn't pretend to know
738
 
    # the kind of wt files, but it does.
739
 
    if parent_ie.kind != 'directory':
740
 
        # nb: this relies on someone else checking that the path we're using
741
 
        # doesn't contain symlinks.
742
 
        new_parent_ie = inventory.make_entry('directory', parent_ie.name,
743
 
            parent_ie.parent_id, parent_ie.file_id)
744
 
        del inv[parent_ie.file_id]
745
 
        inv.add(new_parent_ie)
746
 
        parent_ie = new_parent_ie
747
743
    file_id = file_id_callback(inv, parent_ie, path, kind)
748
744
    entry = inv.make_entry(kind, path.base_path, parent_ie.file_id,
749
745
        file_id=file_id)