~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bundle/bundle_data.py

  • Committer: John Arbash Meinel
  • Date: 2011-05-11 11:35:28 UTC
  • mto: This revision was merged to the branch mainline in revision 5851.
  • Revision ID: john@arbash-meinel.com-20110511113528-qepibuwxicjrbb2h
Break compatibility with python <2.6.

This includes auditing the code for places where we were doing
explicit 'sys.version' checks and removing them as appropriate.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
    osutils,
26
26
    timestamp,
27
27
    )
28
 
import bzrlib.errors
29
28
from bzrlib.bundle import apply_bundle
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
 
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
36
40
from bzrlib.revision import Revision, NULL_REVISION
37
41
from bzrlib.testament import StrictTestament
38
42
from bzrlib.trace import mutter, warning
39
 
import bzrlib.transport
40
43
from bzrlib.tree import Tree
41
 
import bzrlib.urlutils
42
44
from bzrlib.xml5 import serializer_v5
43
45
 
44
46
 
206
208
 
207
209
        inv = bundle_tree.inventory
208
210
        self._validate_inventory(inv, revision_id)
209
 
        self._validate_revision(inv, revision_id)
 
211
        self._validate_revision(bundle_tree, revision_id)
210
212
 
211
213
        return bundle_tree
212
214
 
286
288
            warning('Inventory sha hash mismatch for revision %s. %s'
287
289
                    ' != %s' % (revision_id, sha1, rev.inventory_sha1))
288
290
 
289
 
    def _validate_revision(self, inventory, revision_id):
 
291
    def _validate_revision(self, tree, revision_id):
290
292
        """Make sure all revision entries match their checksum."""
291
293
 
292
 
        # This is a mapping from each revision id to it's sha hash
 
294
        # This is a mapping from each revision id to its sha hash
293
295
        rev_to_sha1 = {}
294
296
 
295
297
        rev = self.get_revision(revision_id)
298
300
            raise AssertionError()
299
301
        if not (rev.revision_id == revision_id):
300
302
            raise AssertionError()
301
 
        sha1 = self._testament_sha1(rev, inventory)
 
303
        sha1 = self._testament_sha1(rev, tree)
302
304
        if sha1 != rev_info.sha1:
303
305
            raise TestamentMismatch(rev.revision_id, rev_info.sha1, sha1)
304
306
        if rev.revision_id in rev_to_sha1:
462
464
 
463
465
 
464
466
class BundleTree(Tree):
 
467
 
465
468
    def __init__(self, base_tree, revision_id):
466
469
        self.base_tree = base_tree
467
470
        self._renamed = {} # Mapping from old_path => new_path
661
664
        path = self.id2path(file_id)
662
665
        if path in self._last_changed:
663
666
            return self._last_changed[path]
664
 
        return self.base_tree.inventory[file_id].revision
 
667
        return self.base_tree.get_file_revision(file_id)
665
668
 
666
669
    def get_size_and_sha1(self, file_id):
667
670
        """Return the size and sha1 hash of the given file id.
739
742
        for path, entry in self.inventory.iter_entries():
740
743
            yield entry.file_id
741
744
 
 
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
 
742
762
    def sorted_path_id(self):
743
763
        paths = []
744
764
        for result in self._new_id.iteritems():
745
765
            paths.append(result)
746
 
        for id in self.base_tree:
 
766
        for id in self.base_tree.all_file_ids():
747
767
            path = self.id2path(id)
748
768
            if path is None:
749
769
                continue