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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-07-17 13:27:12 UTC
  • mfrom: (3504.4.15 win32_find_files)
  • Revision ID: pqm@pqm.ubuntu.com-20080717132712-1zbt1asfsuslh1v9
(jam) Implement _walkdirs_win32,
        going directly to Win32 apis improves status performance 2-6x

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Tests for the osutils wrapper."""
18
18
 
 
19
from cStringIO import StringIO
19
20
import errno
20
21
import os
21
22
import socket
22
23
import stat
23
24
import sys
 
25
import time
24
26
 
25
27
import bzrlib
26
28
from bzrlib import (
27
29
    errors,
28
30
    osutils,
 
31
    tests,
29
32
    win32utils,
30
33
    )
31
34
from bzrlib.errors import BzrBadParameterNotUnicode, InvalidURL
46
49
from bzrlib.tests.file_utils import (
47
50
    FakeReadFile,
48
51
    )
49
 
from cStringIO import StringIO
 
52
from bzrlib.tests.test__walkdirs_win32 import WalkdirsWin32Feature
 
53
 
50
54
 
51
55
class TestOSUtils(TestCaseInTempDir):
52
56
 
974
978
        self._filter_out_stat(result)
975
979
        self.assertEqual(expected_dirblocks, result)
976
980
 
 
981
    def test__walkdirs_utf_win32_find_file(self):
 
982
        self.requireFeature(WalkdirsWin32Feature)
 
983
        self.requireFeature(tests.UnicodeFilenameFeature)
 
984
        from bzrlib._walkdirs_win32 import _walkdirs_utf8_win32_find_file
 
985
        name0u = u'0file-\xb6'
 
986
        name1u = u'1dir-\u062c\u0648'
 
987
        name2u = u'2file-\u0633'
 
988
        tree = [
 
989
            name0u,
 
990
            name1u + '/',
 
991
            name1u + '/' + name0u,
 
992
            name1u + '/' + name1u + '/',
 
993
            name2u,
 
994
            ]
 
995
        self.build_tree(tree)
 
996
        name0 = name0u.encode('utf8')
 
997
        name1 = name1u.encode('utf8')
 
998
        name2 = name2u.encode('utf8')
 
999
 
 
1000
        # All of the abspaths should be in unicode, all of the relative paths
 
1001
        # should be in utf8
 
1002
        expected_dirblocks = [
 
1003
                (('', '.'),
 
1004
                 [(name0, name0, 'file', './' + name0u),
 
1005
                  (name1, name1, 'directory', './' + name1u),
 
1006
                  (name2, name2, 'file', './' + name2u),
 
1007
                 ]
 
1008
                ),
 
1009
                ((name1, './' + name1u),
 
1010
                 [(name1 + '/' + name0, name0, 'file', './' + name1u
 
1011
                                                        + '/' + name0u),
 
1012
                  (name1 + '/' + name1, name1, 'directory', './' + name1u
 
1013
                                                            + '/' + name1u),
 
1014
                 ]
 
1015
                ),
 
1016
                ((name1 + '/' + name1, './' + name1u + '/' + name1u),
 
1017
                 [
 
1018
                 ]
 
1019
                ),
 
1020
            ]
 
1021
        result = list(_walkdirs_utf8_win32_find_file(u'.'))
 
1022
        self._filter_out_stat(result)
 
1023
        self.assertEqual(expected_dirblocks, result)
 
1024
 
 
1025
    def assertStatIsCorrect(self, path, win32stat):
 
1026
        os_stat = os.stat(path)
 
1027
        self.assertEqual(os_stat.st_size, win32stat.st_size)
 
1028
        self.assertAlmostEqual(os_stat.st_mtime, win32stat.st_mtime, places=4)
 
1029
        self.assertAlmostEqual(os_stat.st_ctime, win32stat.st_ctime, places=4)
 
1030
        self.assertAlmostEqual(os_stat.st_atime, win32stat.st_atime, places=4)
 
1031
        self.assertEqual(os_stat.st_dev, win32stat.st_dev)
 
1032
        self.assertEqual(os_stat.st_ino, win32stat.st_ino)
 
1033
        self.assertEqual(os_stat.st_mode, win32stat.st_mode)
 
1034
 
 
1035
    def test__walkdirs_utf_win32_find_file_stat_file(self):
 
1036
        """make sure our Stat values are valid"""
 
1037
        self.requireFeature(WalkdirsWin32Feature)
 
1038
        self.requireFeature(tests.UnicodeFilenameFeature)
 
1039
        from bzrlib._walkdirs_win32 import _walkdirs_utf8_win32_find_file
 
1040
        name0u = u'0file-\xb6'
 
1041
        name0 = name0u.encode('utf8')
 
1042
        self.build_tree([name0u])
 
1043
        # I hate to sleep() here, but I'm trying to make the ctime different
 
1044
        # from the mtime
 
1045
        time.sleep(2)
 
1046
        f = open(name0u, 'ab')
 
1047
        try:
 
1048
            f.write('just a small update')
 
1049
        finally:
 
1050
            f.close()
 
1051
 
 
1052
        result = list(_walkdirs_utf8_win32_find_file(u'.'))
 
1053
        entry = result[0][1][0]
 
1054
        self.assertEqual((name0, name0, 'file'), entry[:3])
 
1055
        self.assertEqual(u'./' + name0u, entry[4])
 
1056
        self.assertStatIsCorrect(entry[4], entry[3])
 
1057
        self.assertNotEqual(entry[3].st_mtime, entry[3].st_ctime)
 
1058
 
 
1059
    def test__walkdirs_utf_win32_find_file_stat_directory(self):
 
1060
        """make sure our Stat values are valid"""
 
1061
        self.requireFeature(WalkdirsWin32Feature)
 
1062
        self.requireFeature(tests.UnicodeFilenameFeature)
 
1063
        from bzrlib._walkdirs_win32 import _walkdirs_utf8_win32_find_file
 
1064
        name0u = u'0dir-\u062c\u0648'
 
1065
        name0 = name0u.encode('utf8')
 
1066
        self.build_tree([name0u + '/'])
 
1067
 
 
1068
        result = list(_walkdirs_utf8_win32_find_file(u'.'))
 
1069
        entry = result[0][1][0]
 
1070
        self.assertEqual((name0, name0, 'directory'), entry[:3])
 
1071
        self.assertEqual(u'./' + name0u, entry[4])
 
1072
        self.assertStatIsCorrect(entry[4], entry[3])
 
1073
 
977
1074
    def assertPathCompare(self, path_less, path_greater):
978
1075
        """check that path_less and path_greater compare correctly."""
979
1076
        self.assertEqual(0, osutils.compare_paths_prefix_order(