1
# Copyright (C) 2006-2010 Canonical Ltd
1
# Copyright (C) 2006-2011 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
17
17
"""Tests for Knit data structure"""
19
19
from cStringIO import StringIO
24
23
from bzrlib import (
33
32
from bzrlib.errors import (
34
RevisionAlreadyPresent,
39
36
from bzrlib.index import *
40
37
from bzrlib.knit import (
41
38
AnnotatedKnitContent,
44
40
KnitVersionedFiles,
46
42
_VFContentMapGenerator,
49
from bzrlib.patiencediff import PatienceSequenceMatcher
53
50
from bzrlib.repofmt import pack_repo
54
51
from bzrlib.tests import (
58
53
TestCaseWithMemoryTransport,
59
54
TestCaseWithTransport,
62
from bzrlib.transport import get_transport
63
from bzrlib.transport.memory import MemoryTransport
64
from bzrlib.tuned_gzip import GzipFile
65
57
from bzrlib.versionedfile import (
66
58
AbsentContentFactory,
106
98
line_delta = source_content.line_delta(target_content)
107
99
delta_blocks = list(KnitContent.get_line_delta_blocks(line_delta,
108
100
source_lines, target_lines))
109
matcher = KnitSequenceMatcher(None, source_lines, target_lines)
110
matcher_blocks = list(list(matcher.get_matching_blocks()))
101
matcher = PatienceSequenceMatcher(None, source_lines, target_lines)
102
matcher_blocks = list(matcher.get_matching_blocks())
111
103
self.assertEqual(matcher_blocks, delta_blocks)
113
105
def test_get_line_delta_blocks(self):
341
def test_pack_collection_pack_retries(self):
342
"""An explicit pack of a pack collection succeeds even when a
343
concurrent pack happens.
345
builder = self.make_branch_builder('.')
346
builder.start_series()
347
builder.build_snapshot('rev-1', None, [
348
('add', ('', 'root-id', 'directory', None)),
349
('add', ('file', 'file-id', 'file', 'content\nrev 1\n')),
351
builder.build_snapshot('rev-2', ['rev-1'], [
352
('modify', ('file-id', 'content\nrev 2\n')),
354
builder.build_snapshot('rev-3', ['rev-2'], [
355
('modify', ('file-id', 'content\nrev 3\n')),
357
self.addCleanup(builder.finish_series)
358
b = builder.get_branch()
359
self.addCleanup(b.lock_write().unlock)
361
collection = repo._pack_collection
362
# Concurrently repack the repo.
363
reopened_repo = repo.bzrdir.open_repository()
349
368
def make_vf_for_retrying(self):
350
369
"""Create 3 packs and a reload function.
1579
1598
# could leave an empty .kndx file, which bzr would later claim was a
1580
1599
# corrupted file since the header was not present. In reality, the file
1581
1600
# just wasn't created, so it should be ignored.
1582
t = get_transport('.')
1601
t = transport.get_transport('.')
1583
1602
t.put_bytes('test.kndx', '')
1585
1604
knit = self.make_test_knit()
1587
1606
def test_knit_index_checks_header(self):
1588
t = get_transport('.')
1607
t = transport.get_transport('.')
1589
1608
t.put_bytes('test.kndx', '# not really a knit header\n\n')
1590
1609
k = self.make_test_knit()
1591
1610
self.assertRaises(KnitHeaderError, k.keys)