~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/knit.py

Change the order of index refs and values to make the no-graph knit index easier.

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, node_refs, value), ...]
 
1330
            [(node, value, node_refs), ...]
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, node_refs, value) in new_nodes:
 
1358
            for (key, value, node_refs) 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, node_refs, value) in new_nodes:
 
1387
            for (key, value, node_refs) 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, refs, value) in 
 
1401
        return [(key, refs[0]) for (key, value, refs) 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)[2][1:].split(' ')
 
1419
        bits = self._get_node(version_id)[1][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)[1][1])
 
1426
        return self._parent_compression(self._get_node(version_id)[2][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[1][1])]
1448
 
        if node[2][0] == 'N':
 
1447
            options = [self._parent_compression(node[2][1])]
 
1448
        if node[1][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)[1][0]
 
1460
        return self._get_node(version_id)[2][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.
1486
1484
        """
1487
1485
        if not self._add_callback:
1488
1486
            raise errors.ReadOnlyError(self)
1506
1504
                if 'line-delta' in options:
1507
1505
                    raise KnitCorrupt(self, "attempt to add line-delta in non-delta knit")
1508
1506
                node_refs = (tuple(parents), )
1509
 
            keys[version_id] = (node_refs, value)
 
1507
            keys[version_id] = (value, node_refs)
1510
1508
        present_nodes = self._get_entries(keys)
1511
 
        for (key, node_refs, value) in present_nodes:
1512
 
            if (node_refs, value) != keys[key]:
 
1509
        for (key, value, node_refs) in present_nodes:
 
1510
            if (value, node_refs) != keys[key]:
1513
1511
                raise KnitCorrupt(self, "inconsistent details in add_versions")
1514
1512
            del keys[key]
1515
1513
        result = []
1516
 
        for key, (node_refs, value) in keys.iteritems():
1517
 
            result.append((key, node_refs, value))
 
1514
        for key, (value, node_refs) in keys.iteritems():
 
1515
            result.append((key, value, node_refs))
1518
1516
        self._add_callback(result)
1519
1517
        
1520
1518