~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bundle/bundle_data.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-09-21 10:48:23 UTC
  • mfrom: (5393.6.3 bzr)
  • Revision ID: pqm@pqm.ubuntu.com-20100921104823-0jks3g5o1bahesyq
(spiv) Fix traceback with python 2.7's xmlrpclib. (Toshio Kuratomi)

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
    osutils,
26
26
    timestamp,
27
27
    )
 
28
import bzrlib.errors
28
29
from bzrlib.bundle import apply_bundle
29
 
from bzrlib.errors import (
30
 
    TestamentMismatch,
31
 
    BzrError,
32
 
    )
33
 
from bzrlib.inventory import (
34
 
    Inventory,
35
 
    InventoryDirectory,
36
 
    InventoryFile,
37
 
    InventoryLink,
38
 
    )
39
 
from bzrlib.osutils import sha_string, pathjoin
 
30
from bzrlib.errors import (TestamentMismatch, BzrError,
 
31
                           MalformedHeader, MalformedPatches, NotABundle)
 
32
from bzrlib.inventory import (Inventory, InventoryEntry,
 
33
                              InventoryDirectory, InventoryFile,
 
34
                              InventoryLink)
 
35
from bzrlib.osutils import sha_file, sha_string, pathjoin
40
36
from bzrlib.revision import Revision, NULL_REVISION
41
37
from bzrlib.testament import StrictTestament
42
38
from bzrlib.trace import mutter, warning
 
39
import bzrlib.transport
43
40
from bzrlib.tree import Tree
 
41
import bzrlib.urlutils
44
42
from bzrlib.xml5 import serializer_v5
45
43
 
46
44
 
208
206
 
209
207
        inv = bundle_tree.inventory
210
208
        self._validate_inventory(inv, revision_id)
211
 
        self._validate_revision(bundle_tree, revision_id)
 
209
        self._validate_revision(inv, revision_id)
212
210
 
213
211
        return bundle_tree
214
212
 
288
286
            warning('Inventory sha hash mismatch for revision %s. %s'
289
287
                    ' != %s' % (revision_id, sha1, rev.inventory_sha1))
290
288
 
291
 
    def _validate_revision(self, tree, revision_id):
 
289
    def _validate_revision(self, inventory, revision_id):
292
290
        """Make sure all revision entries match their checksum."""
293
291
 
294
 
        # This is a mapping from each revision id to its sha hash
 
292
        # This is a mapping from each revision id to it's sha hash
295
293
        rev_to_sha1 = {}
296
294
 
297
295
        rev = self.get_revision(revision_id)
300
298
            raise AssertionError()
301
299
        if not (rev.revision_id == revision_id):
302
300
            raise AssertionError()
303
 
        sha1 = self._testament_sha1(rev, tree)
 
301
        sha1 = self._testament_sha1(rev, inventory)
304
302
        if sha1 != rev_info.sha1:
305
303
            raise TestamentMismatch(rev.revision_id, rev_info.sha1, sha1)
306
304
        if rev.revision_id in rev_to_sha1:
464
462
 
465
463
 
466
464
class BundleTree(Tree):
467
 
 
468
465
    def __init__(self, base_tree, revision_id):
469
466
        self.base_tree = base_tree
470
467
        self._renamed = {} # Mapping from old_path => new_path
664
661
        path = self.id2path(file_id)
665
662
        if path in self._last_changed:
666
663
            return self._last_changed[path]
667
 
        return self.base_tree.get_file_revision(file_id)
 
664
        return self.base_tree.inventory[file_id].revision
668
665
 
669
666
    def get_size_and_sha1(self, file_id):
670
667
        """Return the size and sha1 hash of the given file id.
742
739
        for path, entry in self.inventory.iter_entries():
743
740
            yield entry.file_id
744
741
 
745
 
    def list_files(self, include_root=False, from_dir=None, recursive=True):
746
 
        # The only files returned by this are those from the version
747
 
        inv = self.inventory
748
 
        if from_dir is None:
749
 
            from_dir_id = None
750
 
        else:
751
 
            from_dir_id = inv.path2id(from_dir)
752
 
            if from_dir_id is None:
753
 
                # Directory not versioned
754
 
                return
755
 
        entries = inv.iter_entries(from_dir=from_dir_id, recursive=recursive)
756
 
        if inv.root is not None and not include_root and from_dir is None:
757
 
            # skip the root for compatability with the current apis.
758
 
            entries.next()
759
 
        for path, entry in entries:
760
 
            yield path, 'V', entry.kind, entry.file_id, entry
761
 
 
762
742
    def sorted_path_id(self):
763
743
        paths = []
764
744
        for result in self._new_id.iteritems():