/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/workingtree_implementations/test_unversion.py

First attempt to merge .dev and resolve the conflicts (but tests are 
failing)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 by Canonical Ltd
 
1
# Copyright (C) 2006 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
16
16
 
17
17
"""Tests of the WorkingTree.unversion API."""
18
18
 
19
 
from bzrlib import errors
 
19
from bzrlib import (
 
20
    errors,
 
21
    osutils,
 
22
    )
20
23
from bzrlib.tests.workingtree_implementations import TestCaseWithWorkingTree
21
24
 
22
25
 
52
55
        # the changes should have persisted to disk - reopen the workingtree
53
56
        # to be sure.
54
57
        tree = tree.bzrdir.open_workingtree()
 
58
        tree.lock_read()
55
59
        self.assertFalse(tree.has_id('a-id'))
56
60
        self.assertFalse(tree.has_id('b-id'))
57
61
        self.assertTrue(tree.has_id('c-id'))
58
62
        self.assertTrue(tree.has_filename('a'))
59
63
        self.assertTrue(tree.has_filename('b'))
60
64
        self.assertTrue(tree.has_filename('c'))
61
 
        
 
65
        tree.unlock()
 
66
 
62
67
    def test_unversion_subtree(self):
63
68
        """Unversioning the root of a subtree unversions the entire subtree."""
64
69
        tree = self.make_branch_and_tree('.')
74
79
        self.assertTrue(tree.has_filename('a/b'))
75
80
        self.assertTrue(tree.has_filename('c'))
76
81
        tree.unlock()
 
82
 
 
83
    def test_unversion_subtree_and_children(self):
 
84
        """Passing a child id will raise NoSuchId.
 
85
 
 
86
        This is because the parent directory will have already been removed.
 
87
        """
 
88
        tree = self.make_branch_and_tree('.')
 
89
        self.build_tree(['a/', 'a/b', 'a/c', 'd'])
 
90
        tree.add(['a', 'a/b', 'a/c', 'd'], ['a-id', 'b-id', 'c-id', 'd-id'])
 
91
        tree.lock_write()
 
92
        try:
 
93
            tree.unversion(['b-id', 'a-id'])
 
94
            self.assertFalse(tree.has_id('a-id'))
 
95
            self.assertFalse(tree.has_id('b-id'))
 
96
            self.assertFalse(tree.has_id('c-id'))
 
97
            self.assertTrue(tree.has_id('d-id'))
 
98
            # The files are still on disk
 
99
            self.assertTrue(tree.has_filename('a'))
 
100
            self.assertTrue(tree.has_filename('a/b'))
 
101
            self.assertTrue(tree.has_filename('a/c'))
 
102
            self.assertTrue(tree.has_filename('d'))
 
103
        finally:
 
104
            tree.unlock()
 
105
 
 
106
    def test_unversion_renamed(self):
 
107
        tree = self.make_branch_and_tree('a')
 
108
        self.build_tree(['a/dir/', 'a/dir/f1', 'a/dir/f2', 'a/dir/f3',
 
109
                         'a/dir2/'])
 
110
        tree.add(['dir', 'dir/f1', 'dir/f2', 'dir/f3', 'dir2'],
 
111
                 ['dir-id', 'f1-id', 'f2-id', 'f3-id', 'dir2-id'])
 
112
        rev_id1 = tree.commit('init')
 
113
        # Start off by renaming entries, and then unversion a bunch of entries
 
114
        # https://bugs.launchpad.net/bzr/+bug/114615
 
115
        tree.rename_one('dir/f1', 'dir/a')
 
116
        tree.rename_one('dir/f2', 'dir/z')
 
117
        tree.move(['dir/f3'], 'dir2')
 
118
 
 
119
        tree.lock_read()
 
120
        try:
 
121
            root_id = tree.get_root_id()
 
122
            paths = [(path, ie.file_id)
 
123
                     for path, ie in tree.iter_entries_by_dir()]
 
124
        finally:
 
125
            tree.unlock()
 
126
        self.assertEqual([('', root_id),
 
127
                          ('dir', 'dir-id'),
 
128
                          ('dir2', 'dir2-id'),
 
129
                          ('dir/a', 'f1-id'),
 
130
                          ('dir/z', 'f2-id'),
 
131
                          ('dir2/f3', 'f3-id'),
 
132
                         ], paths)
 
133
 
 
134
        tree.unversion(set(['dir-id']))
 
135
        paths = [(path, ie.file_id)
 
136
                 for path, ie in tree.iter_entries_by_dir()]
 
137
 
 
138
        self.assertEqual([('', root_id),
 
139
                          ('dir2', 'dir2-id'),
 
140
                          ('dir2/f3', 'f3-id'),
 
141
                         ], paths)
 
142
 
 
143
    def test_unversion_after_conflicted_merge(self):
 
144
        # Test for bug #114615
 
145
        tree_a = self.make_branch_and_tree('A')
 
146
        self.build_tree(['A/a/', 'A/a/m', 'A/a/n'])
 
147
        tree_a.add(['a', 'a/m', 'a/n'], ['a-id', 'm-id', 'n-id'])
 
148
        tree_a.commit('init')
 
149
 
 
150
        tree_a.lock_read()
 
151
        try:
 
152
            root_id = tree_a.get_root_id()
 
153
        finally:
 
154
            tree_a.unlock()
 
155
 
 
156
        tree_b = tree_a.bzrdir.sprout('B').open_workingtree()
 
157
        self.build_tree(['B/xyz/'])
 
158
        tree_b.add(['xyz'], ['xyz-id'])
 
159
        tree_b.rename_one('a/m', 'xyz/m')
 
160
        tree_b.unversion(['a-id'])
 
161
        tree_b.commit('delete in B')
 
162
 
 
163
        paths = [(path, ie.file_id)
 
164
                 for path, ie in tree_b.iter_entries_by_dir()]
 
165
        self.assertEqual([('', root_id),
 
166
                          ('xyz', 'xyz-id'),
 
167
                          ('xyz/m', 'm-id'),
 
168
                         ], paths)
 
169
 
 
170
        self.build_tree_contents([('A/a/n', 'new contents for n\n')])
 
171
        tree_a.commit('change n in A')
 
172
 
 
173
        # Merging from A should introduce conflicts because 'n' was modified
 
174
        # and removed, so 'a' needs to be restored. We also have a conflict
 
175
        # because 'a' is still an existing directory
 
176
        num_conflicts = tree_b.merge_from_branch(tree_a.branch)
 
177
        self.assertEqual(4, num_conflicts)
 
178
        paths = [(path, ie.file_id)
 
179
                 for path, ie in tree_b.iter_entries_by_dir()]
 
180
        self.assertEqual([('', root_id),
 
181
                          ('a', 'a-id'),
 
182
                          ('xyz', 'xyz-id'),
 
183
                          ('a/n.OTHER', 'n-id'),
 
184
                          ('xyz/m', 'm-id'),
 
185
                         ], paths)
 
186
        tree_b.unversion(['a-id'])
 
187
        paths = [(path, ie.file_id)
 
188
                 for path, ie in tree_b.iter_entries_by_dir()]
 
189
        self.assertEqual([('', root_id),
 
190
                          ('xyz', 'xyz-id'),
 
191
                          ('xyz/m', 'm-id'),
 
192
                         ], paths)