~bzr-pqm/bzr/bzr.dev

2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2006 Canonical Ltd
1570.1.7 by Robert Collins
Replace the slow topo_sort routine with a much faster one for non trivial datasets.
2
#
1570.1.2 by Robert Collins
Import bzrtools' 'fix' command as 'bzr reconcile.'
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1570.1.7 by Robert Collins
Replace the slow topo_sort routine with a much faster one for non trivial datasets.
7
#
1570.1.2 by Robert Collins
Import bzrtools' 'fix' command as 'bzr reconcile.'
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1570.1.7 by Robert Collins
Replace the slow topo_sort routine with a much faster one for non trivial datasets.
12
#
1570.1.2 by Robert Collins
Import bzrtools' 'fix' command as 'bzr reconcile.'
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1570.1.2 by Robert Collins
Import bzrtools' 'fix' command as 'bzr reconcile.'
16
17
"""Black box tests for the reconcile command."""
18
19
4985.1.5 by Vincent Ladeuil
Deploying the new overrideAttr facility further reduces the complexity
20
from bzrlib import (
6472.2.2 by Jelmer Vernooij
Use controldir rather than bzrdir in a couple more places.
21
    controldir,
4985.1.5 by Vincent Ladeuil
Deploying the new overrideAttr facility further reduces the complexity
22
    inventory,
23
    tests,
24
    )
6366.1.4 by Jelmer Vernooij
Test connection count calls for most blackbox commands.
25
from bzrlib.tests.matchers import ContainsNoVfsCalls
4985.1.5 by Vincent Ladeuil
Deploying the new overrideAttr facility further reduces the complexity
26
27
28
class TrivialTest(tests.TestCaseWithTransport):
1570.1.2 by Robert Collins
Import bzrtools' 'fix' command as 'bzr reconcile.'
29
30
    def test_trivial_reconcile(self):
6472.2.2 by Jelmer Vernooij
Use controldir rather than bzrdir in a couple more places.
31
        t = controldir.ControlDir.create_standalone_workingtree('.')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
32
        (out, err) = self.run_bzr('reconcile')
3010.1.14 by Robert Collins
Handle packs in blackbox.test_reconcile.
33
        if t.branch.repository._reconcile_backsup_inventory:
34
            does_backup_text = "Inventory ok.\n"
35
        else:
36
            does_backup_text = ""
3389.2.8 by John Arbash Meinel
Update some tests to pass with the branch checks.
37
        self.assertEqualDiff(out, "Reconciling branch %s\n"
38
                                  "revision_history ok.\n"
39
                                  "Reconciling repository %s\n"
3010.1.14 by Robert Collins
Handle packs in blackbox.test_reconcile.
40
                                  "%s"
1570.1.8 by Robert Collins
Only reconcile if doing so will perform gc or correct ancestry.
41
                                  "Reconciliation complete.\n" %
3389.2.8 by John Arbash Meinel
Update some tests to pass with the branch checks.
42
                                  (t.branch.base,
43
                                   t.bzrdir.root_transport.base,
3010.1.14 by Robert Collins
Handle packs in blackbox.test_reconcile.
44
                                   does_backup_text))
1570.1.8 by Robert Collins
Only reconcile if doing so will perform gc or correct ancestry.
45
        self.assertEqualDiff(err, "")
46
47
    def test_does_something_reconcile(self):
6472.2.2 by Jelmer Vernooij
Use controldir rather than bzrdir in a couple more places.
48
        t = controldir.ControlDir.create_standalone_workingtree('.')
1570.1.8 by Robert Collins
Only reconcile if doing so will perform gc or correct ancestry.
49
        # an empty inventory with no revision will trigger reconciliation.
50
        repo = t.branch.repository
4985.1.5 by Vincent Ladeuil
Deploying the new overrideAttr facility further reduces the complexity
51
        inv = inventory.Inventory(revision_id='missing')
1910.2.37 by Aaron Bentley
Handle empty commits, fix test
52
        inv.root.revision='missing'
2592.3.148 by Robert Collins
Remove singly-used call_in_write_group Repository helper method.
53
        repo.lock_write()
54
        repo.start_write_group()
55
        repo.add_inventory('missing', inv, [])
56
        repo.commit_write_group()
57
        repo.unlock()
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
58
        (out, err) = self.run_bzr('reconcile')
3010.1.14 by Robert Collins
Handle packs in blackbox.test_reconcile.
59
        if repo._reconcile_backsup_inventory:
60
            does_backup_text = (
61
                "Backup Inventory created.\n"
62
                "Inventory regenerated.\n")
63
        else:
64
            does_backup_text = ""
3389.2.8 by John Arbash Meinel
Update some tests to pass with the branch checks.
65
        expected = ("Reconciling branch %s\n"
66
                    "revision_history ok.\n"
67
                    "Reconciling repository %s\n"
3010.1.14 by Robert Collins
Handle packs in blackbox.test_reconcile.
68
                    "%s"
69
                    "Reconciliation complete.\n" %
3389.2.8 by John Arbash Meinel
Update some tests to pass with the branch checks.
70
                    (t.branch.base,
71
                     t.bzrdir.root_transport.base,
72
                     does_backup_text))
3010.1.14 by Robert Collins
Handle packs in blackbox.test_reconcile.
73
        self.assertEqualDiff(expected, out)
1570.1.2 by Robert Collins
Import bzrtools' 'fix' command as 'bzr reconcile.'
74
        self.assertEqualDiff(err, "")
6300.1.4 by Jelmer Vernooij
Add reconcile results.
75
76
77
class TestSmartServerReconcile(tests.TestCaseWithTransport):
78
79
    def test_simple_reconcile(self):
80
        self.setup_smart_server_with_call_log()
81
        self.make_branch('branch')
82
        self.reset_smart_call_log()
83
        out, err = self.run_bzr(['reconcile', self.get_url('branch')])
84
        # This figure represent the amount of work to perform this use case. It
85
        # is entirely ok to reduce this number if a test fails due to rpc_count
86
        # being too low. If rpc_count increases, more network roundtrips have
87
        # become necessary for this use case. Please do not adjust this number
88
        # upwards without agreement from bzr's network support maintainers.
6300.1.8 by Jelmer Vernooij
Cope with lock_write call.
89
        self.assertLength(10, self.hpss_calls)
6366.1.4 by Jelmer Vernooij
Test connection count calls for most blackbox commands.
90
        self.assertLength(1, self.hpss_connections)
91
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)