/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/test_memorytree.py

  • Committer: John Arbash Meinel
  • Date: 2008-07-09 21:42:24 UTC
  • mto: This revision was merged to the branch mainline in revision 3543.
  • Revision ID: john@arbash-meinel.com-20080709214224-r75k87r6a01pfc3h
Restore a real weave merge to 'bzr merge --weave'.

To do so efficiently, we only add the simple LCAs to the final weave
object, unless we run into complexities with the merge graph.
This gives the same effective result as adding all the texts,
with the advantage of not having to extract all of them.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
#
14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
"""Tests for the MemoryTree class."""
19
19
 
24
24
 
25
25
 
26
26
class TestMemoryTree(TestCaseWithTransport):
27
 
 
 
27
    
28
28
    def test_create_on_branch(self):
29
29
        """Creating a mutable tree on a trivial branch works."""
30
30
        branch = self.make_branch('branch')
32
32
        self.assertEqual(branch.bzrdir, tree.bzrdir)
33
33
        self.assertEqual(branch, tree.branch)
34
34
        self.assertEqual([], tree.get_parent_ids())
35
 
 
 
35
    
36
36
    def test_create_on_branch_with_content(self):
37
37
        """Creating a mutable tree on a non-trivial branch works."""
38
38
        branch = self.make_branch('branch')
96
96
        branch = self.make_branch('branch')
97
97
        tree = MemoryTree.create_on_branch(branch)
98
98
        tree.lock_write()
99
 
        tree.add(['', 'afile', 'adir'], None,
 
99
        tree.add(['', 'afile', 'adir'], None, 
100
100
                 ['directory', 'file', 'directory'])
101
101
        self.assertEqual('afile', tree.id2path(tree.path2id('afile')))
102
102
        self.assertEqual('adir', tree.id2path(tree.path2id('adir')))
108
108
        branch = self.make_branch('branch')
109
109
        tree = MemoryTree.create_on_branch(branch)
110
110
        tree.lock_write()
111
 
        tree.add(['', 'foo'], ids=['root-id', 'foo-id'],
 
111
        tree.add(['', 'foo'], ids=['root-id', 'foo-id'], 
112
112
                  kinds=['directory', 'file'])
113
113
        tree.put_file_bytes_non_atomic('foo-id', 'barshoom')
114
114
        self.assertEqual('barshoom', tree.get_file('foo-id').read())
118
118
        branch = self.make_branch('branch')
119
119
        tree = MemoryTree.create_on_branch(branch)
120
120
        tree.lock_write()
121
 
        tree.add(['', 'foo'], ids=['root-id', 'foo-id'],
 
121
        tree.add(['', 'foo'], ids=['root-id', 'foo-id'], 
122
122
                 kinds=['directory', 'file'])
123
123
        tree.put_file_bytes_non_atomic('foo-id', 'first-content')
124
124
        tree.put_file_bytes_non_atomic('foo-id', 'barshoom')
125
125
        self.assertEqual('barshoom', tree.get_file('foo-id').read())
126
126
        tree.unlock()
127
127
 
128
 
    def test_add_in_subdir(self):
129
 
        branch = self.make_branch('branch')
130
 
        tree = MemoryTree.create_on_branch(branch)
131
 
        tree.lock_write()
132
 
        self.addCleanup(tree.unlock)
133
 
        tree.add([''], ['root-id'], ['directory'])
134
 
        # Unfortunately, the only way to 'mkdir' is to call 'tree.mkdir', but
135
 
        # that *always* adds the directory as well. So if you want to create a
136
 
        # file in a subdirectory, you have to split out the 'mkdir()' calls
137
 
        # from the add and put_file_bytes_non_atomic calls. :(
138
 
        tree.mkdir('adir', 'dir-id')
139
 
        tree.add(['adir/afile'], ['file-id'], ['file'])
140
 
        self.assertEqual('adir/afile', tree.id2path('file-id'))
141
 
        self.assertEqual('adir', tree.id2path('dir-id'))
142
 
        tree.put_file_bytes_non_atomic('file-id', 'barshoom')
143
 
 
144
128
    def test_commit_trivial(self):
145
129
        """Smoke test for commit on a MemoryTree.
146
130
 
150
134
        branch = self.make_branch('branch')
151
135
        tree = MemoryTree.create_on_branch(branch)
152
136
        tree.lock_write()
153
 
        tree.add(['', 'foo'], ids=['root-id', 'foo-id'],
 
137
        tree.add(['', 'foo'], ids=['root-id', 'foo-id'], 
154
138
                 kinds=['directory', 'file'])
155
139
        tree.put_file_bytes_non_atomic('foo-id', 'barshoom')
156
140
        revision_id = tree.commit('message baby')
168
152
        branch = self.make_branch('branch')
169
153
        tree = MemoryTree.create_on_branch(branch)
170
154
        tree.lock_write()
171
 
        tree.add(['', 'foo'], ids=['root-id', 'foo-id'],
 
155
        tree.add(['', 'foo'], ids=['root-id', 'foo-id'], 
172
156
                 kinds=['directory', 'file'])
173
157
        tree.unversion(['foo-id'])
174
158
        self.assertFalse(tree.has_id('foo-id'))
182
166
        rev_id = tree.commit('first post')
183
167
        tree.unlock()
184
168
        self.assertEqual(rev_id, tree.last_revision())
185
 
 
186
 
    def test_rename_file(self):
187
 
        tree = self.make_branch_and_memory_tree('branch')
188
 
        tree.lock_write()
189
 
        self.addCleanup(tree.unlock)
190
 
        tree.add(['', 'foo'], ['root-id', 'foo-id'], ['directory', 'file'])
191
 
        tree.put_file_bytes_non_atomic('foo-id', 'content\n')
192
 
        tree.commit('one', rev_id='rev-one')
193
 
        tree.rename_one('foo', 'bar')
194
 
        self.assertEqual('bar', tree.id2path('foo-id'))
195
 
        self.assertEqual('content\n', tree._file_transport.get_bytes('bar'))
196
 
        self.assertRaises(errors.NoSuchFile,
197
 
                          tree._file_transport.get_bytes, 'foo')
198
 
        tree.commit('two', rev_id='rev-two')
199
 
        self.assertEqual('content\n', tree._file_transport.get_bytes('bar'))
200
 
        self.assertRaises(errors.NoSuchFile,
201
 
                          tree._file_transport.get_bytes, 'foo')
202
 
 
203
 
        rev_tree2 = tree.branch.repository.revision_tree('rev-two')
204
 
        self.assertEqual('bar', rev_tree2.id2path('foo-id'))
205
 
        self.assertEqual('content\n', rev_tree2.get_file_text('foo-id'))
206
 
 
207
 
    def test_rename_file_to_subdir(self):
208
 
        tree = self.make_branch_and_memory_tree('branch')
209
 
        tree.lock_write()
210
 
        self.addCleanup(tree.unlock)
211
 
        tree.add('')
212
 
        tree.mkdir('subdir', 'subdir-id')
213
 
        tree.add('foo', 'foo-id', 'file')
214
 
        tree.put_file_bytes_non_atomic('foo-id', 'content\n')
215
 
        tree.commit('one', rev_id='rev-one')
216
 
 
217
 
        tree.rename_one('foo', 'subdir/bar')
218
 
        self.assertEqual('subdir/bar', tree.id2path('foo-id'))
219
 
        self.assertEqual('content\n',
220
 
                         tree._file_transport.get_bytes('subdir/bar'))
221
 
        tree.commit('two', rev_id='rev-two')
222
 
        rev_tree2 = tree.branch.repository.revision_tree('rev-two')
223
 
        self.assertEqual('subdir/bar', rev_tree2.id2path('foo-id'))