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,
287
288
tree_a.branch.repository.commit_write_group()
288
289
tree_a.branch.repository.unlock()
290
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):
291
305
# revision ids in repository A but not B are returned, fake ones
292
306
# are stripped. (fake meaning no revision object, but an inventory
293
307
# as some formats keyed off inventory data in the past.)
297
311
repo_b.fetch(repo_a, 'rev1')
298
312
# check the test will be valid
299
313
self.assertFalse(repo_b.has_revision('rev2'))
300
self.assertEqual(['rev2'],
301
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())
303
def test_missing_revision_ids_absent_requested_raises(self):
318
def test_search_missing_revision_ids_absent_requested_raises(self):
304
319
# Asking for missing revisions with a tip that is itself absent in the
305
320
# source raises NoSuchRevision.
306
321
repo_b = self.make_to_repository('target')
309
324
self.assertFalse(repo_a.has_revision('pizza'))
310
325
self.assertFalse(repo_b.has_revision('pizza'))
311
326
# Asking specifically for an absent revision errors.
312
self.assertRaises(NoSuchRevision, repo_b.missing_revision_ids, repo_a,
327
self.assertRaises(NoSuchRevision, repo_b.search_missing_revision_ids, repo_a,
313
328
revision_id='pizza', find_ghosts=True)
314
self.assertRaises(NoSuchRevision, repo_b.missing_revision_ids, repo_a,
329
self.assertRaises(NoSuchRevision, repo_b.search_missing_revision_ids, repo_a,
315
330
revision_id='pizza', find_ghosts=False)
317
def test_missing_revision_ids_revision_limited(self):
332
def test_search_missing_revision_ids_revision_limited(self):
318
333
# revision ids in repository A that are not referenced by the
319
334
# requested revision are not returned.
320
335
# make a repository to compare against that is empty
321
336
repo_b = self.make_to_repository('empty')
322
337
repo_a = self.bzrdir.open_repository()
323
self.assertEqual(['rev1'],
324
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),
326
343
def test_fetch_fetches_signatures_too(self):
327
344
from_repo = self.bzrdir.open_repository()