~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testinv.py

  • Committer: Robert Collins
  • Date: 2005-10-06 02:51:02 UTC
  • Revision ID: robertc@robertcollins.net-20051006025102-91f3a5a8d9283752
use weave ancestry to determine inventory entry previous heads, prevent propogating 'I did a merge' merges.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
import os
19
19
 
20
20
from bzrlib.branch import Branch
 
21
from bzrlib.clone import copy_branch
21
22
import bzrlib.errors as errors
22
23
from bzrlib.diff import internal_diff
23
24
from bzrlib.inventory import Inventory, ROOT_ID
295
296
                                  self.branch.weave_store)
296
297
        # expected outcome - file_1 has a revision id of '2'
297
298
        self.assertEqual(self.file_active.revision, '2')
 
299
 
 
300
 
 
301
class TestPreviousHeads(TestCaseInTempDir):
 
302
 
 
303
    def setUp(self):
 
304
        # we want several inventories, that respectively
 
305
        # give use the following scenarios:
 
306
        # A) fileid not in any inventory (A),
 
307
        # B) fileid present in one inventory (B) and (A,B)
 
308
        # C) fileid present in two inventories, and they
 
309
        #   are not mutual descendents (B, C)
 
310
        # D) fileid present in two inventories and one is
 
311
        #   a descendent of the other. (B, D)
 
312
        super(TestPreviousHeads, self).setUp()
 
313
        self.build_tree(['file'])
 
314
        self.branch = Branch.initialize('.')
 
315
        self.branch.commit('new branch', allow_pointless=True, rev_id='A')
 
316
        self.inv_A = self.branch.get_inventory('A')
 
317
        self.branch.add(['file'], ['fileid'])
 
318
        self.branch.commit('add file', rev_id='B')
 
319
        self.inv_B = self.branch.get_inventory('B')
 
320
        self.branch.put_controlfile('revision-history', 'A\n')
 
321
        self.assertEqual(self.branch.revision_history(), ['A'])
 
322
        self.branch.commit('another add of file', rev_id='C')
 
323
        self.inv_C = self.branch.get_inventory('C')
 
324
        self.branch.add_pending_merge('B')
 
325
        self.branch.commit('merge in B', rev_id='D')
 
326
        self.inv_D = self.branch.get_inventory('D')
 
327
        self.file_active = self.branch.working_tree().inventory['fileid']
 
328
        self.weave = self.branch.weave_store.get_weave('fileid')
 
329
        
 
330
    def get_previous_heads(self, inventories):
 
331
        return self.file_active.find_previous_heads(inventories, self.weave)
 
332
        
 
333
    def test_fileid_in_no_inventory(self):
 
334
        self.assertEqual({}, self.get_previous_heads([self.inv_A]))
 
335
 
 
336
    def test_fileid_in_one_inventory(self):
 
337
        self.assertEqual({'B':self.inv_B['fileid']},
 
338
                         self.get_previous_heads([self.inv_B]))
 
339
        self.assertEqual({'B':self.inv_B['fileid']},
 
340
                         self.get_previous_heads([self.inv_A, self.inv_B]))
 
341
        self.assertEqual({'B':self.inv_B['fileid']},
 
342
                         self.get_previous_heads([self.inv_B, self.inv_A]))
 
343
 
 
344
    def test_fileid_in_two_inventories_gives_both_entries(self):
 
345
        self.assertEqual({'B':self.inv_B['fileid'],
 
346
                          'C':self.inv_C['fileid']},
 
347
                          self.get_previous_heads([self.inv_B, self.inv_C]))
 
348
        self.assertEqual({'B':self.inv_B['fileid'],
 
349
                          'C':self.inv_C['fileid']},
 
350
                          self.get_previous_heads([self.inv_C, self.inv_B]))
 
351
 
 
352
    def test_fileid_in_two_inventories_already_merged_gives_head(self):
 
353
        self.assertEqual({'D':self.inv_D['fileid']},
 
354
                         self.get_previous_heads([self.inv_B, self.inv_D]))
 
355
        self.assertEqual({'D':self.inv_D['fileid']},
 
356
                         self.get_previous_heads([self.inv_D, self.inv_B]))
 
357
 
 
358
    # TODO: test two inventories with the same file revision