~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/inventory.py

  • Committer: Robert Collins
  • Date: 2005-09-30 14:27:41 UTC
  • mto: This revision was merged to the branch mainline in revision 1397.
  • Revision ID: robertc@robertcollins.net-20050930142741-fc326c828b5bbefd
text_version and name_version unification looking reasonable

Show diffs side-by-side

added added

removed removed

Lines of Context:
59
59
        file_id of the parent directory, or ROOT_ID
60
60
 
61
61
    revision
62
 
        the revision_id in which the name or parent of this file was
63
 
        last changed
 
62
        the revision_id in which this variationo f this file was 
 
63
        introduced.
64
64
 
65
65
    text_sha1
66
66
        sha-1 of the text of the file
68
68
    text_size
69
69
        size in bytes of the text of the file
70
70
        
71
 
    text_version
72
 
        the revision_id in which the text of this file was introduced
73
 
 
74
71
    (reading a version 4 tree created a text_id field.)
75
72
 
76
73
    >>> i = Inventory()
116
113
    
117
114
    __slots__ = ['text_sha1', 'text_size', 'file_id', 'name', 'kind',
118
115
                 'text_id', 'parent_id', 'children',
119
 
                 'text_version', 'revision', 'symlink_target']
120
 
 
121
 
    def compatible_for_commit(self, previous_ie):
122
 
        compatible = True
123
 
        # different inv parent
124
 
        if previous_ie.parent_id != self.parent_id:
125
 
            compatible = False
126
 
        # renamed
127
 
        elif previous_ie.name != self.name:
128
 
            compatible = False
129
 
        # changed link target
130
 
        elif (hasattr(self,'symlink_target')
131
 
              and self.symlink_target != previous_ie.symlink_target):
132
 
            compatible = False
133
 
        return compatible
 
116
                 'revision', 'symlink_target']
134
117
 
135
118
    def __init__(self, file_id, name, kind, parent_id, text_id=None):
136
119
        """Create an InventoryEntry
151
134
        if '/' in name or '\\' in name:
152
135
            raise BzrCheckError('InventoryEntry name %r is invalid' % name)
153
136
        
154
 
        self.text_version = None
155
137
        self.revision = None
156
138
        self.text_sha1 = None
157
139
        self.text_size = None
188
170
                raise BzrCheckError('missing parent {%s} in inventory for revision {%s}'
189
171
                        % (self.parent_id, rev_id))
190
172
        if self.kind == 'file':
191
 
            text_version = self.text_version
192
 
            t = (self.file_id, text_version)
 
173
            revision = self.revision
 
174
            t = (self.file_id, revision)
193
175
            if t in checker.checked_texts:
194
176
                prev_sha = checker.checked_texts[t] 
195
177
                if prev_sha != self.text_sha1:
231
213
        other.text_sha1 = self.text_sha1
232
214
        other.text_size = self.text_size
233
215
        other.symlink_target = self.symlink_target
234
 
        other.text_version = self.text_version
235
216
        other.revision = self.revision
236
217
        # note that children are *not* copied; they're pulled across when
237
218
        # others are added
258
239
               and (self.text_id == other.text_id) \
259
240
               and (self.parent_id == other.parent_id) \
260
241
               and (self.kind == other.kind) \
261
 
               and (self.text_version == other.text_version) \
262
242
               and (self.revision == other.revision)
263
243
 
264
244
    def __ne__(self, other):
267
247
    def __hash__(self):
268
248
        raise ValueError('not hashable')
269
249
 
 
250
    def unchanged(self, previous_ie, work_tree):
 
251
        compatible = True
 
252
        # different inv parent
 
253
        if previous_ie.parent_id != self.parent_id:
 
254
            compatible = False
 
255
        # renamed
 
256
        elif previous_ie.name != self.name:
 
257
            compatible = False
 
258
        # changed link target
 
259
        elif (hasattr(self,'symlink_target')
 
260
              and self.symlink_target != previous_ie.symlink_target):
 
261
            compatible = False
 
262
        if self.kind != 'file':
 
263
            return compatible
 
264
        self.text_sha1 = work_tree.get_file_sha1(self.file_id)
 
265
        if self.text_sha1 != previous_ie.text_sha1:
 
266
            compatible = False
 
267
        else:
 
268
            # FIXME: 20050930 probe for the text size when getting sha1
 
269
            self.text_size = previous_ie.text_size
 
270
        return compatible
 
271
 
270
272
 
271
273
class RootEntry(InventoryEntry):
272
274
    def __init__(self, file_id):