1
# Copyright (C) 2006-2011 Canonical Ltd
1
# Copyright (C) 2006-2010 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
23
24
from bzrlib import (
32
33
from bzrlib.errors import (
34
RevisionAlreadyPresent,
36
39
from bzrlib.index import *
37
40
from bzrlib.knit import (
38
41
AnnotatedKnitContent,
40
44
KnitVersionedFiles,
42
46
_VFContentMapGenerator,
49
from bzrlib.patiencediff import PatienceSequenceMatcher
50
53
from bzrlib.repofmt import pack_repo
51
54
from bzrlib.tests import (
53
58
TestCaseWithMemoryTransport,
54
59
TestCaseWithTransport,
62
from bzrlib.transport import get_transport
63
from bzrlib.transport.memory import MemoryTransport
64
from bzrlib.tuned_gzip import GzipFile
57
65
from bzrlib.versionedfile import (
58
66
AbsentContentFactory,
98
106
line_delta = source_content.line_delta(target_content)
99
107
delta_blocks = list(KnitContent.get_line_delta_blocks(line_delta,
100
108
source_lines, target_lines))
101
matcher = PatienceSequenceMatcher(None, source_lines, target_lines)
102
matcher_blocks = list(matcher.get_matching_blocks())
109
matcher = KnitSequenceMatcher(None, source_lines, target_lines)
110
matcher_blocks = list(list(matcher.get_matching_blocks()))
103
111
self.assertEqual(matcher_blocks, delta_blocks)
105
113
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()
368
349
def make_vf_for_retrying(self):
369
350
"""Create 3 packs and a reload function.
1598
1579
# could leave an empty .kndx file, which bzr would later claim was a
1599
1580
# corrupted file since the header was not present. In reality, the file
1600
1581
# just wasn't created, so it should be ignored.
1601
t = transport.get_transport('.')
1582
t = get_transport('.')
1602
1583
t.put_bytes('test.kndx', '')
1604
1585
knit = self.make_test_knit()
1606
1587
def test_knit_index_checks_header(self):
1607
t = transport.get_transport('.')
1588
t = get_transport('.')
1608
1589
t.put_bytes('test.kndx', '# not really a knit header\n\n')
1609
1590
k = self.make_test_knit()
1610
1591
self.assertRaises(KnitHeaderError, k.keys)