~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

  • Committer: Robert Collins
  • Date: 2007-07-15 08:53:53 UTC
  • mto: (2592.5.3 pack-repository)
  • mto: This revision was merged to the branch mainline in revision 2933.
  • Revision ID: robertc@robertcollins.net-20070715085353-hvsi3o21ybfny9ai
Note unlock defect.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1327
1327
        :param deltas: Allow delta-compressed records.
1328
1328
        :param add_callback: If not None, allow additions to the index and call
1329
1329
            this callback with a list of added GraphIndex nodes:
1330
 
            [(node, value, node_refs), ...]
 
1330
            [(node, node_refs, value), ...]
1331
1331
        """
1332
1332
        self._graph_index = graph_index
1333
1333
        self._deltas = deltas
1355
1355
            this_iteration = pending
1356
1356
            new_nodes = self._get_entries(this_iteration)
1357
1357
            pending = set()
1358
 
            for (key, value, node_refs) in new_nodes:
 
1358
            for (key, node_refs, value) in new_nodes:
1359
1359
                # dont ask for ghosties - otherwise
1360
1360
                # we we can end up looping with pending
1361
1361
                # being entirely ghosted.
1384
1384
            this_iteration = pending
1385
1385
            new_nodes = self._get_entries(this_iteration)
1386
1386
            pending = set()
1387
 
            for (key, value, node_refs) in new_nodes:
 
1387
            for (key, node_refs, value) in new_nodes:
1388
1388
                graph[key] = node_refs[0]
1389
1389
                # queue parents 
1390
1390
                pending.update(graph[key])
1398
1398
 
1399
1399
    def get_graph(self):
1400
1400
        """Return a list of the node:parents lists from this knit index."""
1401
 
        return [(key, refs[0]) for (key, value, refs) in 
 
1401
        return [(key, refs[0]) for (key, refs, value) in 
1402
1402
            self._graph_index.iter_all_entries()]
1403
1403
 
1404
1404
    def num_versions(self):
1416
1416
 
1417
1417
    def get_position(self, version_id):
1418
1418
        """Return data position and size of specified version."""
1419
 
        bits = self._get_node(version_id)[1][1:].split(' ')
 
1419
        bits = self._get_node(version_id)[2][1:].split(' ')
1420
1420
        return int(bits[0]), int(bits[1])
1421
1421
 
1422
1422
    def get_method(self, version_id):
1423
1423
        """Return compression method of specified version."""
1424
1424
        if not self._deltas:
1425
1425
            return 'fulltext'
1426
 
        return self._parent_compression(self._get_node(version_id)[2][1])
 
1426
        return self._parent_compression(self._get_node(version_id)[1][1])
1427
1427
 
1428
1428
    def _parent_compression(self, reference_list):
1429
1429
        # use the second reference list to decide if this is delta'd or not.
1444
1444
        if not self._deltas:
1445
1445
            options = ['fulltext']
1446
1446
        else:
1447
 
            options = [self._parent_compression(node[2][1])]
1448
 
        if node[1][0] == 'N':
 
1447
            options = [self._parent_compression(node[1][1])]
 
1448
        if node[2][0] == 'N':
1449
1449
            options.append('no-eol')
1450
1450
        return ','.join(options)
1451
1451
 
1457
1457
 
1458
1458
    def get_parents_with_ghosts(self, version_id):
1459
1459
        """Return parents of specified version with ghosts."""
1460
 
        return self._get_node(version_id)[2][0]
 
1460
        return self._get_node(version_id)[1][0]
1461
1461
 
1462
1462
    def check_versions_present(self, version_ids):
1463
1463
        """Check that all specified versions are present."""
1481
1481
 
1482
1482
        :param versions: a list of tuples:
1483
1483
                         (version_id, options, pos, size, parents).
 
1484
        :return: A list of (key, node_refs, value) tuples for insertion
 
1485
            into a GraphIndex.
1484
1486
        """
1485
1487
        if not self._add_callback:
1486
1488
            raise errors.ReadOnlyError(self)
1504
1506
                if 'line-delta' in options:
1505
1507
                    raise KnitCorrupt(self, "attempt to add line-delta in non-delta knit")
1506
1508
                node_refs = (tuple(parents), )
1507
 
            keys[version_id] = (value, node_refs)
 
1509
            keys[version_id] = (node_refs, value)
1508
1510
        present_nodes = self._get_entries(keys)
1509
 
        for (key, value, node_refs) in present_nodes:
1510
 
            if (value, node_refs) != keys[key]:
 
1511
        for (key, node_refs, value) in present_nodes:
 
1512
            if (node_refs, value) != keys[key]:
1511
1513
                raise KnitCorrupt(self, "inconsistent details in add_versions")
1512
1514
            del keys[key]
1513
1515
        result = []
1514
 
        for key, (value, node_refs) in keys.iteritems():
1515
 
            result.append((key, value, node_refs))
 
1516
        for key, (node_refs, value) in keys.iteritems():
 
1517
            result.append((key, node_refs, value))
1516
1518
        self._add_callback(result)
1517
1519
        
1518
1520