~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/per_repository/test_refresh_data.py

  • Committer: Danny van Heumen
  • Date: 2010-03-09 21:42:11 UTC
  • mto: (4634.139.5 2.0)
  • mto: This revision was merged to the branch mainline in revision 5160.
  • Revision ID: danny@dannyvanheumen.nl-20100309214211-iqh42x6qcikgd9p3
Reverted now-useless TODO list.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2009, 2010 Canonical Ltd
 
1
# Copyright (C) 2009 Canonical Ltd
2
2
#
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
18
18
 
19
19
from bzrlib import (
20
20
    errors,
21
 
    repository,
 
21
    remote,
22
22
    )
23
23
from bzrlib.tests import TestSkipped
24
24
from bzrlib.tests.per_repository import TestCaseWithRepository
45
45
        self.addCleanup(repo.unlock)
46
46
        repo.refresh_data()
47
47
 
48
 
    def test_refresh_data_in_write_group(self):
49
 
        # refresh_data may either succeed or raise IsInWriteGroupError during a
50
 
        # write group.
 
48
    def test_refresh_data_in_write_group_errors(self):
51
49
        repo = self.make_repository('.')
52
50
        repo.lock_write()
53
51
        self.addCleanup(repo.unlock)
54
52
        repo.start_write_group()
55
53
        self.addCleanup(repo.abort_write_group)
56
 
        try:
57
 
            repo.refresh_data()
58
 
        except repository.IsInWriteGroupError:
59
 
            # This is ok.
60
 
            pass
61
 
        else:
62
 
            # This is ok too.
63
 
            pass
 
54
        # No flow control anticipated, BzrError is enough
 
55
        self.assertRaises(errors.BzrError, repo.refresh_data)
64
56
 
65
 
    def fetch_new_revision_into_concurrent_instance(self, repo, token):
66
 
        """Create a new revision (revid 'new-rev') and fetch it into a
67
 
        concurrent instance of repo.
68
 
        """
69
 
        source = self.make_branch_and_memory_tree('source')
70
 
        source.lock_write()
71
 
        self.addCleanup(source.unlock)
72
 
        source.add([''], ['root-id'])
73
 
        revid = source.commit('foo', rev_id='new-rev')
 
57
    def test_refresh_data_after_fetch_new_data_visible(self):
 
58
        source = self.make_branch_and_tree('source')
 
59
        revid = source.commit('foo')
 
60
        repo = self.make_repository('target')
 
61
        token = repo.lock_write()
 
62
        self.addCleanup(repo.unlock)
74
63
        # Force data reading on weaves/knits
75
 
        repo.all_revision_ids()
76
64
        repo.revisions.keys()
77
65
        repo.inventories.keys()
78
66
        # server repo is the instance a smart server might hold for this
87
75
            server_repo.fetch(source.branch.repository, revid)
88
76
        finally:
89
77
            server_repo.unlock()
90
 
 
91
 
    def test_refresh_data_after_fetch_new_data_visible(self):
92
 
        repo = self.make_repository('target')
93
 
        token = repo.lock_write().repository_token
94
 
        self.addCleanup(repo.unlock)
95
 
        self.fetch_new_revision_into_concurrent_instance(repo, token)
96
78
        repo.refresh_data()
97
 
        self.assertNotEqual({}, repo.get_graph().get_parent_map(['new-rev']))
98
 
 
99
 
    def test_refresh_data_after_fetch_new_data_visible_in_write_group(self):
100
 
        tree = self.make_branch_and_memory_tree('target')
101
 
        tree.lock_write()
102
 
        self.addCleanup(tree.unlock)
103
 
        tree.add([''], ['root-id'])
104
 
        tree.commit('foo', rev_id='commit-in-target')
105
 
        repo = tree.branch.repository
106
 
        token = repo.lock_write().repository_token
107
 
        self.addCleanup(repo.unlock)
108
 
        repo.start_write_group()
109
 
        self.addCleanup(repo.abort_write_group)
110
 
        self.fetch_new_revision_into_concurrent_instance(repo, token)
111
 
        # Call refresh_data.  It either fails with IsInWriteGroupError, or it
112
 
        # succeeds and the new revisions are visible.
113
 
        try:
114
 
            repo.refresh_data()
115
 
        except repository.IsInWriteGroupError:
116
 
            pass
117
 
        else:
118
 
            self.assertEqual(
119
 
                ['commit-in-target', 'new-rev'],
120
 
                sorted(repo.all_revision_ids()))
 
79
        self.assertNotEqual({}, repo.get_graph().get_parent_map([revid]))