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

  • Committer: Andrew Bennetts
  • Date: 2011-06-02 07:25:33 UTC
  • mfrom: (5952 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5955.
  • Revision ID: andrew.bennetts@canonical.com-20110602072533-v0pe1ivh27cp0pd8
MergeĀ lp:bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
57
57
        finally:
58
58
            state.unlock()
59
59
 
 
60
    def test_resets_ignores_on_last_unlock(self):
 
61
        # Only the last unlock call will actually reset the
 
62
        # ignores. (bug #785671)
 
63
        tree = self.make_workingtree()
 
64
        tree.lock_read()
 
65
        try:
 
66
            tree.lock_read()
 
67
            try:
 
68
                tree.is_ignored("foo")
 
69
            finally:
 
70
                tree.unlock()
 
71
            self.assertIsNot(None, tree._ignoreglobster)
 
72
        finally:
 
73
            tree.unlock()
 
74
        self.assertIs(None, tree._ignoreglobster)
 
75
 
60
76
    def test_uses_lockdir(self):
61
77
        """WorkingTreeFormat4 uses its own LockDir:
62
78
 
174
190
        # it's given; any calls to forbidden methods will raise an
175
191
        # AssertionError
176
192
        repo = tree.branch.repository
177
 
        repo.get_revision = self.fail
178
 
        repo.get_inventory = self.fail
179
 
        repo._get_inventory_xml = self.fail
 
193
        self.overrideAttr(repo, "get_revision", self.fail)
 
194
        self.overrideAttr(repo, "get_inventory", self.fail)
 
195
        self.overrideAttr(repo, "_get_inventory_xml", self.fail)
180
196
        # try to set the parent trees.
181
197
        tree.set_parent_trees([(rev1, rev1_tree)])
182
198
 
214
230
        # answer 'get_parent_ids' for the revision tree- dirstate does not
215
231
        # cache the parents of a parent tree at this point.
216
232
        #repo.get_revision = self.fail
217
 
        repo.get_inventory = self.fail
218
 
        repo._get_inventory_xml = self.fail
 
233
        self.overrideAttr(repo, "get_inventory", self.fail)
 
234
        self.overrideAttr(repo, "_get_inventory_xml", self.fail)
219
235
        # set the parent trees.
220
236
        tree.set_parent_trees([(rev1, rev1_tree), (rev2, rev2_tree)])
221
237
        # read the first tree
258
274
        lock_and_call_current_dirstate(tree, 'lock_tree_write')
259
275
        self.assertRaises(errors.ObjectNotLocked, tree.current_dirstate)
260
276
 
 
277
    def test_set_parent_trees_uses_update_basis_by_delta(self):
 
278
        builder = self.make_branch_builder('source')
 
279
        builder.start_series()
 
280
        self.addCleanup(builder.finish_series)
 
281
        builder.build_snapshot('A', [], [
 
282
            ('add', ('', 'root-id', 'directory', None)),
 
283
            ('add', ('a', 'a-id', 'file', 'content\n'))])
 
284
        builder.build_snapshot('B', ['A'], [
 
285
            ('modify', ('a-id', 'new content\nfor a\n')),
 
286
            ('add', ('b', 'b-id', 'file', 'b-content\n'))])
 
287
        tree = self.make_workingtree('tree')
 
288
        source_branch = builder.get_branch()
 
289
        tree.branch.repository.fetch(source_branch.repository, 'B')
 
290
        tree.pull(source_branch, stop_revision='A')
 
291
        tree.lock_write()
 
292
        self.addCleanup(tree.unlock)
 
293
        state = tree.current_dirstate()
 
294
        called = []
 
295
        orig_update = state.update_basis_by_delta
 
296
        def log_update_basis_by_delta(delta, new_revid):
 
297
            called.append(new_revid)
 
298
            return orig_update(delta, new_revid)
 
299
        state.update_basis_by_delta = log_update_basis_by_delta
 
300
        basis = tree.basis_tree()
 
301
        self.assertEqual('a-id', basis.path2id('a'))
 
302
        self.assertEqual(None, basis.path2id('b'))
 
303
        def fail_set_parent_trees(trees, ghosts):
 
304
            raise AssertionError('dirstate.set_parent_trees() was called')
 
305
        state.set_parent_trees = fail_set_parent_trees
 
306
        repo = tree.branch.repository
 
307
        tree.pull(source_branch, stop_revision='B')
 
308
        self.assertEqual(['B'], called)
 
309
        basis = tree.basis_tree()
 
310
        self.assertEqual('a-id', basis.path2id('a'))
 
311
        self.assertEqual('b-id', basis.path2id('b'))
 
312
 
 
313
    def test_set_parent_trees_handles_missing_basis(self):
 
314
        builder = self.make_branch_builder('source')
 
315
        builder.start_series()
 
316
        self.addCleanup(builder.finish_series)
 
317
        builder.build_snapshot('A', [], [
 
318
            ('add', ('', 'root-id', 'directory', None)),
 
319
            ('add', ('a', 'a-id', 'file', 'content\n'))])
 
320
        builder.build_snapshot('B', ['A'], [
 
321
            ('modify', ('a-id', 'new content\nfor a\n')),
 
322
            ('add', ('b', 'b-id', 'file', 'b-content\n'))])
 
323
        builder.build_snapshot('C', ['A'], [
 
324
            ('add', ('c', 'c-id', 'file', 'c-content\n'))])
 
325
        b_c = self.make_branch('branch_with_c')
 
326
        b_c.pull(builder.get_branch(), stop_revision='C')
 
327
        b_b = self.make_branch('branch_with_b')
 
328
        b_b.pull(builder.get_branch(), stop_revision='B')
 
329
        # This is reproducing some of what 'switch' does, just to isolate the
 
330
        # set_parent_trees() step.
 
331
        wt = b_b.create_checkout('tree', lightweight=True)
 
332
        fmt = wt.bzrdir.find_branch_format()
 
333
        fmt.set_reference(wt.bzrdir, None, b_c)
 
334
        # Re-open with the new reference
 
335
        wt = wt.bzrdir.open_workingtree()
 
336
        wt.set_parent_trees([('C', b_c.repository.revision_tree('C'))])
 
337
        self.assertEqual(None, wt.basis_tree().path2id('b'))
 
338
 
261
339
    def test_new_dirstate_on_new_lock(self):
262
340
        # until we have detection for when a dirstate can be reused, we
263
341
        # want to reparse dirstate on every new lock.