~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisiontree.py

  • Committer: John Arbash Meinel
  • Date: 2010-08-13 19:08:57 UTC
  • mto: (5050.17.7 2.2)
  • mto: This revision was merged to the branch mainline in revision 5379.
  • Revision ID: john@arbash-meinel.com-20100813190857-mvzwnimrxvm0zimp
Lots of documentation updates.

We had a lot of http links pointing to the old domain. They should
all now be properly updated to the new domain. (only bazaar-vcs.org
entry left is for pqm, which seems to still reside at the old url.)

Also removed one 'TODO' doc entry about switching to binary xdelta, since
we basically did just that with groupcompress.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 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
20
20
 
21
21
from bzrlib import (
22
22
    errors,
23
 
    osutils,
24
23
    revision,
25
 
    symbol_versioning,
26
24
    tree,
27
25
    )
28
26
 
87
85
                      default_revision=revision.CURRENT_REVISION):
88
86
        """See Tree.annotate_iter"""
89
87
        text_key = (file_id, self.inventory[file_id].revision)
90
 
        annotations = self._repository.texts.annotate(text_key)
 
88
        annotator = self._repository.texts.get_annotator()
 
89
        annotations = annotator.annotate_flat(text_key)
91
90
        return [(key[-1], line) for key, line in annotations]
92
91
 
93
92
    def get_file_size(self, file_id):
102
101
 
103
102
    def get_file_mtime(self, file_id, path=None):
104
103
        ie = self._inventory[file_id]
105
 
        revision = self._repository.get_revision(ie.revision)
 
104
        try:
 
105
            revision = self._repository.get_revision(ie.revision)
 
106
        except errors.NoSuchRevision:
 
107
            raise errors.FileTimestampUnavailable(self.id2path(file_id))
106
108
        return revision.timestamp
107
109
 
108
110
    def is_executable(self, file_id, path=None):
172
174
        return set(self._repository.get_ancestry(self._revision_id,
173
175
                                                 topo_sorted=False))
174
176
 
 
177
    def is_locked(self):
 
178
        return self._repository.is_locked()
 
179
 
175
180
    def lock_read(self):
176
181
        self._repository.lock_read()
 
182
        return self
177
183
 
178
184
    def __repr__(self):
179
185
        return '<%s instance at %x, rev_id=%r>' % (
241
247
        lookup_trees = [self.source]
242
248
        if extra_trees:
243
249
             lookup_trees.extend(extra_trees)
 
250
        # The ids of items we need to examine to insure delta consistency.
 
251
        precise_file_ids = set()
 
252
        discarded_changes = {}
244
253
        if specific_files == []:
245
254
            specific_file_ids = []
246
255
        else:
247
256
            specific_file_ids = self.target.paths2ids(specific_files,
248
257
                lookup_trees, require_versioned=require_versioned)
249
 
 
250
258
        # FIXME: It should be possible to delegate include_unchanged handling
251
259
        # to CHKInventory.iter_changes and do a better job there -- vila
252
260
        # 20090304
253
 
        if include_unchanged:
254
 
            changed_file_ids = []
 
261
        changed_file_ids = set()
255
262
        for result in self.target.inventory.iter_changes(self.source.inventory):
256
 
            if (specific_file_ids is not None
257
 
                and not result[0] in specific_file_ids):
258
 
                # CHKMap.iter_changes is clean and fast. Better filter out
259
 
                # the specific files *after* it did its job.
260
 
                continue
 
263
            if specific_file_ids is not None:
 
264
                file_id = result[0]
 
265
                if file_id not in specific_file_ids:
 
266
                    # A change from the whole tree that we don't want to show yet.
 
267
                    # We may find that we need to show it for delta consistency, so
 
268
                    # stash it.
 
269
                    discarded_changes[result[0]] = result
 
270
                    continue
 
271
                new_parent_id = result[4][1]
 
272
                precise_file_ids.add(new_parent_id)
261
273
            yield result
262
 
            if include_unchanged:
263
 
                # Keep track of yielded results (cheaper than building the
264
 
                # whole inventory).
265
 
                changed_file_ids.append(result[0])
 
274
            changed_file_ids.add(result[0])
 
275
        if specific_file_ids is not None:
 
276
            for result in self._handle_precise_ids(precise_file_ids,
 
277
                changed_file_ids, discarded_changes=discarded_changes):
 
278
                yield result
266
279
        if include_unchanged:
267
280
            # CHKMap avoid being O(tree), so we go to O(tree) only if
268
281
            # required to.