/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
1
# Copyright (C) 2006 Canonical Ltd
1687.1.9 by Robert Collins
Teach WorkingTree about break-lock.
2
# Authors:  Robert Collins <robert.collins@canonical.com>
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18
from cStringIO import StringIO
19
import os
20
21
import bzrlib
22
import bzrlib.errors as errors
3015.2.11 by Robert Collins
Handle repositories that do not physically lock in workingtree_implementation tests.
23
from bzrlib.tests import TestNotApplicable
1687.1.9 by Robert Collins
Teach WorkingTree about break-lock.
24
from bzrlib.tests.workingtree_implementations import TestCaseWithWorkingTree
25
26
27
class TestBreakLock(TestCaseWithWorkingTree):
28
29
    def setUp(self):
30
        super(TestBreakLock, self).setUp()
31
        self.unused_workingtree = self.make_branch_and_tree('.')
32
        self.workingtree = self.unused_workingtree.bzrdir.open_workingtree()
33
        # we want a UI factory that accepts canned input for the tests:
34
        # while SilentUIFactory still accepts stdin, we need to customise
35
        # ours
36
        self.old_factory = bzrlib.ui.ui_factory
1687.1.15 by Robert Collins
Review comments.
37
        self.addCleanup(self.restoreFactory)
1687.1.9 by Robert Collins
Teach WorkingTree about break-lock.
38
        bzrlib.ui.ui_factory = bzrlib.ui.SilentUIFactory()
39
1687.1.15 by Robert Collins
Review comments.
40
    def restoreFactory(self):
1687.1.9 by Robert Collins
Teach WorkingTree about break-lock.
41
        bzrlib.ui.ui_factory = self.old_factory
42
43
    def test_unlocked(self):
44
        # break lock when nothing is locked should just return
45
        try:
46
            self.workingtree.break_lock()
47
        except NotImplementedError:
48
            pass
49
50
    def test_unlocked_repo_locked(self):
51
        # break lock on the workingtree should try on the branch even
52
        # if the workingtree isn't locked - and the easiest way
53
        # to see if that happened is to lock the repo.
54
        self.workingtree.branch.repository.lock_write()
3015.2.11 by Robert Collins
Handle repositories that do not physically lock in workingtree_implementation tests.
55
        stdin = StringIO("y\n")
56
        bzrlib.ui.ui_factory.stdin = stdin
1687.1.9 by Robert Collins
Teach WorkingTree about break-lock.
57
        try:
58
            self.unused_workingtree.break_lock()
59
        except NotImplementedError:
60
            # workingtree does not support break_lock
61
            self.workingtree.branch.repository.unlock()
62
            return
3015.2.11 by Robert Collins
Handle repositories that do not physically lock in workingtree_implementation tests.
63
        remaining = stdin.read()
64
        if remaining == 'y\n':
65
            raise TestNotApplicable("repository does not physically lock.")
66
        self.assertRaises(errors.LockBroken,
67
            self.workingtree.branch.repository.unlock)
1687.1.9 by Robert Collins
Teach WorkingTree about break-lock.
68
69
    def test_locked(self):
70
        # break_lock when locked should
71
        self.workingtree.lock_write()
72
        bzrlib.ui.ui_factory.stdin = StringIO("y\ny\ny\n")
73
        try:
74
            self.unused_workingtree.break_lock()
2255.2.149 by Robert Collins
Crufty but existing _iter_changes implementation for WorkingTreeFormat4.
75
        except (NotImplementedError, errors.LockActive):
76
            # workingtree does not support break_lock,
77
            # or does not support breaking a lock held by an alive
78
            # object/process.
1687.1.9 by Robert Collins
Teach WorkingTree about break-lock.
79
            self.workingtree.unlock()
80
            return
81
        self.assertRaises(errors.LockBroken, self.workingtree.unlock)