~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_index.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-04-08 08:48:59 UTC
  • mfrom: (5086.7.10 smarter-index-search)
  • Revision ID: pqm@pqm.ubuntu.com-20100408084859-lbi26gvsu2rtz370
(andrew) Optimise index lookups in repositories with many pack files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1380
1380
        self.assertListRaises(errors.NoSuchFile, index.iter_entries_prefix,
1381
1381
                                                 [('1',)])
1382
1382
 
 
1383
 
 
1384
    def make_index_with_simple_nodes(self, name, num_nodes=1):
 
1385
        """Make an index named after 'name', with keys named after 'name' too.
 
1386
 
 
1387
        Nodes will have a value of '' and no references.
 
1388
        """
 
1389
        nodes = [
 
1390
            (('index-%s-key-%s' % (name, n),), '', ())
 
1391
            for n in range(1, num_nodes+1)]
 
1392
        return self.make_index('index-%s' % name, 0, nodes=nodes)
 
1393
 
 
1394
    def test_reorder_after_iter_entries(self):
 
1395
        # Four indices: [key1] in index1, [key2,key3] in index2, [] in index3,
 
1396
        # [key4] in index4.
 
1397
        index = CombinedGraphIndex([])
 
1398
        index.insert_index(0, self.make_index_with_simple_nodes('1'), '1')
 
1399
        index.insert_index(1, self.make_index_with_simple_nodes('2'), '2')
 
1400
        index.insert_index(2, self.make_index_with_simple_nodes('3'), '3')
 
1401
        index.insert_index(3, self.make_index_with_simple_nodes('4'), '4')
 
1402
        index1, index2, index3, index4 = index._indices
 
1403
        # Query a key from index4 and index2.
 
1404
        self.assertLength(2, list(index.iter_entries(
 
1405
            [('index-4-key-1',), ('index-2-key-1',)])))
 
1406
        # Now index2 and index4 should be moved to the front (and index1 should
 
1407
        # still be before index3).
 
1408
        self.assertEqual([index2, index4, index1, index3], index._indices)
 
1409
        self.assertEqual(['2', '4', '1', '3'], index._index_names)
 
1410
 
 
1411
    def test_reorder_propagates_to_siblings(self):
 
1412
        # Two CombinedGraphIndex objects, with the same number of indicies with
 
1413
        # matching names.
 
1414
        cgi1 = CombinedGraphIndex([])
 
1415
        cgi2 = CombinedGraphIndex([])
 
1416
        cgi1.insert_index(0, self.make_index_with_simple_nodes('1-1'), 'one')
 
1417
        cgi1.insert_index(1, self.make_index_with_simple_nodes('1-2'), 'two')
 
1418
        cgi2.insert_index(0, self.make_index_with_simple_nodes('2-1'), 'one')
 
1419
        cgi2.insert_index(1, self.make_index_with_simple_nodes('2-2'), 'two')
 
1420
        index2_1, index2_2 = cgi2._indices
 
1421
        cgi1.set_sibling_indices([cgi2])
 
1422
        # Trigger a reordering in cgi1.  cgi2 will be reordered as well.
 
1423
        list(cgi1.iter_entries([('index-1-2-key-1',)]))
 
1424
        self.assertEqual([index2_2, index2_1], cgi2._indices)
 
1425
        self.assertEqual(['two', 'one'], cgi2._index_names)
 
1426
 
1383
1427
    def test_validate_reloads(self):
1384
1428
        index, reload_counter = self.make_combined_index_with_missing()
1385
1429
        index.validate()