~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tree.py

  • Committer: Martin Pool
  • Date: 2005-09-13 06:11:39 UTC
  • Revision ID: mbp@sourcefrog.net-20050913061138-2704d6ba6a5bc5bd
- methods to deserialize objects from strings

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""Tree classes, representing directory at point in time.
18
18
"""
19
19
 
20
 
from osutils import pumpfile, appendpath, fingerprint_file
21
20
import os
 
21
from cStringIO import StringIO
22
22
 
 
23
import bzrlib
23
24
from bzrlib.trace import mutter, note
24
 
from bzrlib.errors import BzrError
 
25
from bzrlib.errors import BzrError, BzrCheckError
 
26
from bzrlib.inventory import Inventory
 
27
from bzrlib.osutils import pumpfile, appendpath, fingerprint_file
25
28
 
26
 
import bzrlib
27
29
 
28
30
exporters = {}
29
31
 
66
68
 
67
69
    def _get_inventory(self):
68
70
        return self._inventory
 
71
    
 
72
    def get_file_by_path(self, path):
 
73
        return self.get_file(self._inventory.path2id(path))
69
74
 
70
75
    inventory = property(_get_inventory,
71
76
                         doc="Inventory of this Tree")
88
93
                     "store is probably damaged/corrupt"])
89
94
 
90
95
 
91
 
    def print_file(self, fileid):
92
 
        """Print file with id `fileid` to stdout."""
 
96
    def print_file(self, file_id):
 
97
        """Print file with id `file_id` to stdout."""
93
98
        import sys
94
 
        pumpfile(self.get_file(fileid), sys.stdout)
 
99
        sys.stdout.write(self.get_file_text(file_id))
95
100
        
96
101
        
97
102
    def export(self, dest, format='dir', root=None):
115
120
           or at least passing a description to the constructor.
116
121
    """
117
122
    
118
 
    def __init__(self, store, inv):
119
 
        self._store = store
 
123
    def __init__(self, weave_store, inv, revision_id):
 
124
        self._weave_store = weave_store
120
125
        self._inventory = inv
 
126
        self._revision_id = revision_id
 
127
 
 
128
    def get_weave(self, file_id):
 
129
        return self._weave_store.get_weave(file_id)
 
130
        
 
131
 
 
132
    def get_file_text(self, file_id):
 
133
        ie = self._inventory[file_id]
 
134
        weave = self.get_weave(file_id)
 
135
        idx = weave.lookup(ie.text_version)
 
136
        content = weave.get_text(idx)
 
137
        if len(content) != ie.text_size:
 
138
            raise BzrCheckError('mismatched size on revision %s of file %s: '
 
139
                                '%d vs %d bytes'
 
140
                                % (self._revision_id, file_id, len(content),
 
141
                                   ie.text_size))
 
142
        return content
121
143
 
122
144
    def get_file(self, file_id):
123
 
        ie = self._inventory[file_id]
124
 
        f = self._store[ie.text_id]
125
 
        mutter("  get fileid{%s} from %r" % (file_id, self))
126
 
        self._check_retrieved(ie, f)
127
 
        return f
 
145
        return StringIO(self.get_file_text(file_id))
128
146
 
129
147
    def get_file_size(self, file_id):
130
148
        return self._inventory[file_id].text_size
144
162
 
145
163
 
146
164
class EmptyTree(Tree):
147
 
    def __init__(self, root_id):
148
 
        from bzrlib.inventory import Inventory
149
 
        self._inventory = Inventory(root_id)
 
165
    def __init__(self):
 
166
        self._inventory = Inventory()
150
167
 
151
168
    def has_filename(self, filename):
152
169
        return False