/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: John Arbash Meinel
  • Date: 2010-08-05 16:27:35 UTC
  • mto: This revision was merged to the branch mainline in revision 5374.
  • Revision ID: john@arbash-meinel.com-20100805162735-172opvx34sr5gpbl
Find a case where we are wasting a bit of memory.

Specifically the 'build_details' tuple contains a lot of wasted references,
and we hold on to one of these for each record we are fetching.
And for something like 'bzr pack', that is all keys.

For just loading all text build details on my bzr+ repository, With:
locations = b.repository.texts._index.get_build_details(b.repository.texts.keys())
This drops the memory consumption from:
WorkingSize   77604KiB
 to
WorkingSize   64640KiB

Or around 10.6MB. I worked it out to a savings of about 80 bytes/record
on data that can have hundreds of thousands of records (in 32-bit).

Show diffs side-by-side

added added

removed removed

Lines of Context:
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']:
400
375
        This is designed more towards DWIM for humans than API clarity.
401
376
        For the specific behaviour see the help for cmd_add().
402
377
 
 
378
        :param file_list: List of zero or more paths.  *NB: these are 
 
379
            interpreted relative to the process cwd, not relative to the 
 
380
            tree.*  (Add and most other tree methods use tree-relative
 
381
            paths.)
403
382
        :param action: A reporter to be called with the inventory, parent_ie,
404
383
            path and kind of the path being added. It may return a file_id if
405
384
            a specific one should be used.