/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

Add versionedfile.fix_parents api for correcting data post hoc.

Show diffs side-by-side

added added

removed removed

Lines of Context:
268
268
    def create_empty(self, name, transport, mode=None):
269
269
        return KnitVersionedFile(name, transport, factory=self.factory, delta=self.delta, create=True)
270
270
    
 
271
    def fix_parents(self, version, new_parents):
 
272
        """Fix the parents list for version.
 
273
        
 
274
        This is done by appending a new version to the index
 
275
        with identical data except for the parents list.
 
276
        the parents list must be a superset of the current
 
277
        list.
 
278
        """
 
279
        current_values = self._index._cache[version]
 
280
        assert set(current_values[4]).difference(set(new_parents)) == set()
 
281
        self._index.add_version(version,
 
282
                                current_values[1], 
 
283
                                current_values[2],
 
284
                                current_values[3],
 
285
                                new_parents)
 
286
 
271
287
    @staticmethod
272
288
    def get_suffixes():
273
289
        """See VersionedFile.get_suffixes()."""
945
961
        for version in mismatched_versions:
946
962
            n1 = set(self.target.get_parents(version))
947
963
            n2 = set(self.source.get_parents(version))
948
 
            # write a combined record to our history.
 
964
            # write a combined record to our history preserving the current 
 
965
            # parents as first in the list
949
966
            new_parents = self.target.get_parents(version) + list(n2.difference(n1))
950
 
            current_values = self.target._index._cache[version]
951
 
            self.target._index.add_version(version,
952
 
                                    current_values[1], 
953
 
                                    current_values[2],
954
 
                                    current_values[3],
955
 
                                    new_parents)
 
967
            self.target.fix_parents(version, new_parents)
956
968
        pb.clear()
957
969
        return count
958
970