32
32
import bzrlib.repofmt.weaverepo as weaverepo
33
33
import bzrlib.repository as repository
34
34
from bzrlib.revision import NULL_REVISION, Revision
35
from bzrlib.symbol_versioning import one_two
35
36
from bzrlib.tests import (
37
38
TestCaseWithTransport,
262
263
to_repo = self.make_to_repository('to')
263
264
to_repo.fetch(from_tree.branch.repository, from_tree.get_parent_ids()[0])
265
def test_fetch_no_inventory_revision(self):
266
"""Old inventories lack revision_ids, so simulate this"""
267
from_tree = self.make_branch_and_tree('tree')
268
if sys.platform == 'win32':
269
from_repo = from_tree.branch.repository
270
check_repo_format_for_funky_id_on_win32(from_repo)
271
self.build_tree(['tree/filename'])
272
from_tree.add('filename', 'funky-chars<>%&;"\'')
273
from_tree.commit('commit filename')
274
old_deserialise = from_tree.branch.repository.deserialise_inventory
275
def deserialise(revision_id, text):
276
inventory = old_deserialise(revision_id, text)
277
inventory.revision_id = None
279
from_tree.branch.repository.deserialise_inventory = deserialise
280
to_repo = self.make_to_repository('to')
281
to_repo.fetch(from_tree.branch.repository, from_tree.last_revision())
284
267
class TestCaseWithComplexRepository(TestCaseWithInterRepository):
305
288
tree_a.branch.repository.commit_write_group()
306
289
tree_a.branch.repository.unlock()
308
def test_missing_revision_ids(self):
291
def test_missing_revision_ids_is_deprecated(self):
292
repo_b = self.make_to_repository('rev1_only')
293
repo_a = self.bzrdir.open_repository()
294
repo_b.fetch(repo_a, 'rev1')
295
# check the test will be valid
296
self.assertFalse(repo_b.has_revision('rev2'))
297
self.assertEqual(['rev2'],
298
self.applyDeprecated(one_two, repo_b.missing_revision_ids, repo_a))
299
inter = repository.InterRepository.get(repo_a, repo_b)
300
self.assertEqual(['rev2'],
301
self.applyDeprecated(one_two, inter.missing_revision_ids, None,
304
def test_search_missing_revision_ids(self):
309
305
# revision ids in repository A but not B are returned, fake ones
310
306
# are stripped. (fake meaning no revision object, but an inventory
311
307
# as some formats keyed off inventory data in the past.)
315
311
repo_b.fetch(repo_a, 'rev1')
316
312
# check the test will be valid
317
313
self.assertFalse(repo_b.has_revision('rev2'))
318
self.assertEqual(['rev2'],
319
repo_b.missing_revision_ids(repo_a))
314
result = repo_b.search_missing_revision_ids(repo_a)
315
self.assertEqual(set(['rev2']), result.get_keys())
316
self.assertEqual((set(['rev2']), set(['rev1']), 1), result.get_recipe())
321
def test_missing_revision_ids_absent_requested_raises(self):
318
def test_search_missing_revision_ids_absent_requested_raises(self):
322
319
# Asking for missing revisions with a tip that is itself absent in the
323
320
# source raises NoSuchRevision.
324
321
repo_b = self.make_to_repository('target')
327
324
self.assertFalse(repo_a.has_revision('pizza'))
328
325
self.assertFalse(repo_b.has_revision('pizza'))
329
326
# Asking specifically for an absent revision errors.
330
self.assertRaises(NoSuchRevision, repo_b.missing_revision_ids, repo_a,
327
self.assertRaises(NoSuchRevision, repo_b.search_missing_revision_ids, repo_a,
331
328
revision_id='pizza', find_ghosts=True)
332
self.assertRaises(NoSuchRevision, repo_b.missing_revision_ids, repo_a,
329
self.assertRaises(NoSuchRevision, repo_b.search_missing_revision_ids, repo_a,
333
330
revision_id='pizza', find_ghosts=False)
335
def test_missing_revision_ids_revision_limited(self):
332
def test_search_missing_revision_ids_revision_limited(self):
336
333
# revision ids in repository A that are not referenced by the
337
334
# requested revision are not returned.
338
335
# make a repository to compare against that is empty
339
336
repo_b = self.make_to_repository('empty')
340
337
repo_a = self.bzrdir.open_repository()
341
self.assertEqual(['rev1'],
342
repo_b.missing_revision_ids(repo_a, revision_id='rev1'))
338
result = repo_b.search_missing_revision_ids(repo_a, revision_id='rev1')
339
self.assertEqual(set(['rev1']), result.get_keys())
340
self.assertEqual((set(['rev1']), set([NULL_REVISION]), 1),
344
343
def test_fetch_fetches_signatures_too(self):
345
344
from_repo = self.bzrdir.open_repository()