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

  • Committer: Jan Balster
  • Date: 2006-08-15 12:39:42 UTC
  • mfrom: (1923 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1928.
  • Revision ID: jan@merlinux.de-20060815123942-22c388c6e9a8ac91
merge bzr.dev 1923

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 by Canonical Ltd
2
 
 
 
1
# Copyright (C) 2005, 2006 by Canonical Ltd
 
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
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
7
 
 
 
7
#
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
11
# GNU General Public License for more details.
12
 
 
 
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
18
import os
19
19
import time
20
20
 
 
21
from bzrlib import errors, inventory, osutils
21
22
from bzrlib.branch import Branch
22
 
import bzrlib.errors as errors
23
23
from bzrlib.diff import internal_diff
24
24
from bzrlib.inventory import (Inventory, ROOT_ID, InventoryFile,
25
25
    InventoryDirectory, InventoryEntry)
26
 
import bzrlib.inventory as inventory
27
26
from bzrlib.osutils import (has_symlinks, rename, pathjoin, is_inside_any, 
28
27
    is_inside_or_parent_of_any)
29
28
from bzrlib.tests import TestCase, TestCaseWithTransport
87
86
            inv.add_path(*args)
88
87
 
89
88
        self.assertEqual([
 
89
            ('', ROOT_ID),
90
90
            ('Makefile', 'makefile-id'),
91
91
            ('doc', 'doc-id'),
92
92
            ('src', 'src-id'),
109
109
            inv.add_path(*args)
110
110
 
111
111
        self.assertEqual([
 
112
            ('', ROOT_ID),
112
113
            ('Makefile', 'makefile-id'),
113
114
            ('doc', 'doc-id'),
114
115
            ('src', 'src-id'),
200
201
        self.assertIsInstance(inventory.make_entry("directory", "name", ROOT_ID),
201
202
            inventory.InventoryDirectory)
202
203
 
 
204
    def test_make_entry_non_normalized(self):
 
205
        orig_normalized_filename = osutils.normalized_filename
 
206
 
 
207
        try:
 
208
            osutils.normalized_filename = osutils._accessible_normalized_filename
 
209
            entry = inventory.make_entry("file", u'a\u030a', ROOT_ID)
 
210
            self.assertEqual(u'\xe5', entry.name)
 
211
            self.assertIsInstance(entry, inventory.InventoryFile)
 
212
 
 
213
            osutils.normalized_filename = osutils._inaccessible_normalized_filename
 
214
            self.assertRaises(errors.InvalidNormalization,
 
215
                    inventory.make_entry, 'file', u'a\u030a', ROOT_ID)
 
216
        finally:
 
217
            osutils.normalized_filename = orig_normalized_filename
 
218
 
 
219
 
203
220
class TestEntryDiffing(TestCaseWithTransport):
204
221
 
205
222
    def setUp(self):
516
533
        self.assertEqual(expected_change, change)
517
534
 
518
535
 
519
 
class TestExecutable(TestCaseWithTransport):
520
 
 
521
 
    def test_stays_executable(self):
522
 
        a_id = "a-20051208024829-849e76f7968d7a86"
523
 
        b_id = "b-20051208024829-849e76f7968d7a86"
524
 
        wt = self.make_branch_and_tree('b1')
525
 
        b = wt.branch
526
 
        tt = TreeTransform(wt)
527
 
        tt.new_file('a', tt.root, 'a test\n', a_id, True)
528
 
        tt.new_file('b', tt.root, 'b test\n', b_id, False)
529
 
        tt.apply()
530
 
 
531
 
        self.failUnless(wt.is_executable(a_id), "'a' lost the execute bit")
532
 
 
533
 
        # reopen the tree and ensure it stuck.
534
 
        wt = wt.bzrdir.open_workingtree()
535
 
        self.assertEqual(['a', 'b'], [cn for cn,ie in wt.inventory.iter_entries()])
536
 
 
537
 
        self.failUnless(wt.is_executable(a_id), "'a' lost the execute bit")
538
 
        self.failIf(wt.is_executable(b_id), "'b' gained an execute bit")
539
 
 
540
 
        wt.commit('adding a,b', rev_id='r1')
541
 
 
542
 
        rev_tree = b.repository.revision_tree('r1')
543
 
        self.failUnless(rev_tree.is_executable(a_id), "'a' lost the execute bit")
544
 
        self.failIf(rev_tree.is_executable(b_id), "'b' gained an execute bit")
545
 
 
546
 
        self.failUnless(rev_tree.inventory[a_id].executable)
547
 
        self.failIf(rev_tree.inventory[b_id].executable)
548
 
 
549
 
        # Make sure the entries are gone
550
 
        os.remove('b1/a')
551
 
        os.remove('b1/b')
552
 
        self.failIf(wt.has_id(a_id))
553
 
        self.failIf(wt.has_filename('a'))
554
 
        self.failIf(wt.has_id(b_id))
555
 
        self.failIf(wt.has_filename('b'))
556
 
 
557
 
        # Make sure that revert is able to bring them back,
558
 
        # and sets 'a' back to being executable
559
 
 
560
 
        wt.revert(['a', 'b'], rev_tree, backups=False)
561
 
        self.assertEqual(['a', 'b'], [cn for cn,ie in wt.inventory.iter_entries()])
562
 
 
563
 
        self.failUnless(wt.is_executable(a_id), "'a' lost the execute bit")
564
 
        self.failIf(wt.is_executable(b_id), "'b' gained an execute bit")
565
 
 
566
 
        # Now remove them again, and make sure that after a
567
 
        # commit, they are still marked correctly
568
 
        os.remove('b1/a')
569
 
        os.remove('b1/b')
570
 
        wt.commit('removed', rev_id='r2')
571
 
 
572
 
        self.assertEqual([], [cn for cn,ie in wt.inventory.iter_entries()])
573
 
        self.failIf(wt.has_id(a_id))
574
 
        self.failIf(wt.has_filename('a'))
575
 
        self.failIf(wt.has_id(b_id))
576
 
        self.failIf(wt.has_filename('b'))
577
 
 
578
 
        # Now revert back to the previous commit
579
 
        wt.revert([], rev_tree, backups=False)
580
 
        self.assertEqual(['a', 'b'], [cn for cn,ie in wt.inventory.iter_entries()])
581
 
 
582
 
        self.failUnless(wt.is_executable(a_id), "'a' lost the execute bit")
583
 
        self.failIf(wt.is_executable(b_id), "'b' gained an execute bit")
584
 
 
585
 
        # Now make sure that 'bzr branch' also preserves the
586
 
        # executable bit
587
 
        # TODO: Maybe this should be a blackbox test
588
 
        d2 = b.bzrdir.clone('b2', revision_id='r1')
589
 
        t2 = d2.open_workingtree()
590
 
        b2 = t2.branch
591
 
        self.assertEquals('r1', b2.last_revision())
592
 
 
593
 
        self.assertEqual(['a', 'b'], [cn for cn,ie in t2.inventory.iter_entries()])
594
 
        self.failUnless(t2.is_executable(a_id), "'a' lost the execute bit")
595
 
        self.failIf(t2.is_executable(b_id), "'b' gained an execute bit")
596
 
 
597
 
        # Make sure pull will delete the files
598
 
        t2.pull(b)
599
 
        self.assertEquals('r2', b2.last_revision())
600
 
        self.assertEqual([], [cn for cn,ie in t2.inventory.iter_entries()])
601
 
 
602
 
        # Now commit the changes on the first branch
603
 
        # so that the second branch can pull the changes
604
 
        # and make sure that the executable bit has been copied
605
 
        wt.commit('resurrected', rev_id='r3')
606
 
 
607
 
        t2.pull(b)
608
 
        self.assertEquals('r3', b2.last_revision())
609
 
        self.assertEqual(['a', 'b'], [cn for cn,ie in t2.inventory.iter_entries()])
610
 
 
611
 
        self.failUnless(t2.is_executable(a_id), "'a' lost the execute bit")
612
 
        self.failIf(t2.is_executable(b_id), "'b' gained an execute bit")
613
 
 
614
 
 
615
536
class TestRevert(TestCaseWithTransport):
616
537
 
617
538
    def test_dangling_id(self):