29
29
from bzrlib.tests import (
32
from bzrlib.tests.test_osutils import dir_reader_scenarios
33
from bzrlib.tests.scenarios import (
34
load_tests_apply_scenarios,
39
load_tests = load_tests_apply_scenarios
35
from bzrlib import _dirstate_helpers_pyx
36
has_dirstate_helpers_pyx = True
38
has_dirstate_helpers_pyx = False
42
41
compiled_dirstate_helpers_feature = tests.ModuleAvailableFeature(
43
'bzrlib._dirstate_helpers_pyx')
46
# FIXME: we should also parametrize against SHA1Provider !
48
ue_scenarios = [('dirstate_Python',
49
{'update_entry': dirstate.py_update_entry})]
50
if compiled_dirstate_helpers_feature.available():
51
update_entry = compiled_dirstate_helpers_feature.module.update_entry
52
ue_scenarios.append(('dirstate_Pyrex', {'update_entry': update_entry}))
54
pe_scenarios = [('dirstate_Python',
55
{'_process_entry': dirstate.ProcessEntryPython})]
56
if compiled_dirstate_helpers_feature.available():
57
process_entry = compiled_dirstate_helpers_feature.module.ProcessEntryC
58
pe_scenarios.append(('dirstate_Pyrex', {'_process_entry': process_entry}))
42
'bzrlib._dirstate_helpers_pyx')
45
def load_tests(basic_tests, module, loader):
46
# FIXME: we should also parametrize against SHA1Provider !
47
suite = loader.suiteClass()
48
remaining_tests = basic_tests
50
dir_reader_scenarios = test_osutils.dir_reader_scenarios()
52
ue_scenarios = [('dirstate_Python',
53
{'update_entry': dirstate.py_update_entry})]
54
if compiled_dirstate_helpers_feature.available():
55
update_entry = compiled_dirstate_helpers_feature.module.update_entry
56
pyrex_scenario = ('dirstate_Pyrex', {'update_entry': update_entry})
57
ue_scenarios.append(pyrex_scenario)
58
process_entry_tests, remaining_tests = tests.split_suite_by_condition(
59
remaining_tests, tests.condition_isinstance(TestUpdateEntry))
60
tests.multiply_tests(process_entry_tests,
61
tests.multiply_scenarios(dir_reader_scenarios,
65
pe_scenarios = [('dirstate_Python',
66
{'_process_entry': dirstate.ProcessEntryPython})]
67
if compiled_dirstate_helpers_feature.available():
68
process_entry = compiled_dirstate_helpers_feature.module.ProcessEntryC
69
pyrex_scenario = ('dirstate_Pyrex', {'_process_entry': process_entry})
70
pe_scenarios.append(pyrex_scenario)
71
process_entry_tests, remaining_tests = tests.split_suite_by_condition(
72
remaining_tests, tests.condition_isinstance(TestProcessEntry))
73
tests.multiply_tests(process_entry_tests,
74
tests.multiply_scenarios(dir_reader_scenarios,
78
dir_reader_tests, remaining_tests = tests.split_suite_by_condition(
79
remaining_tests, tests.condition_isinstance(
80
test_dirstate.TestCaseWithDirState))
81
tests.multiply_tests(dir_reader_tests, dir_reader_scenarios, suite)
82
suite.addTest(remaining_tests)
61
87
class TestBisectPathMixin(object):
871
892
stat_value=stat_value)
872
893
self.assertEqual(None, link_or_sha1)
874
# The dirblock entry should not have computed or cached the file's
875
# sha1, but it did update the files' st_size. However, this is not
876
# worth writing a dirstate file for, so we leave the state UNMODIFIED
895
# The dirblock entry should not have cached the file's sha1 (too new)
877
896
self.assertEqual(('f', '', 14, False, dirstate.DirState.NULLSTAT),
879
self.assertEqual(dirstate.DirState.IN_MEMORY_UNMODIFIED,
898
self.assertEqual(dirstate.DirState.IN_MEMORY_MODIFIED,
880
899
state._dirblock_state)
881
900
mode = stat_value.st_mode
882
901
self.assertEqual([('is_exec', mode, False)], state._log)
894
914
stat_value=stat_value)
895
915
self.assertEqual([('is_exec', mode, False)], state._log)
896
916
self.assertEqual(None, link_or_sha1)
897
self.assertEqual(dirstate.DirState.IN_MEMORY_UNMODIFIED,
917
self.assertEqual(dirstate.DirState.IN_MEMORY_MODIFIED,
898
918
state._dirblock_state)
899
919
self.assertEqual(('f', '', 14, False, dirstate.DirState.NULLSTAT),
910
930
self.assertEqual([('is_exec', mode, False)], state._log)
911
931
self.assertEqual(('f', '', 14, False, dirstate.DirState.NULLSTAT),
913
self.assertEqual(dirstate.DirState.IN_MEMORY_UNMODIFIED,
914
state._dirblock_state)
916
934
# If the file is no longer new, and the clock has been moved forward
917
935
# sufficiently, it will cache the sha.
1008
1026
self.build_tree(['a/'])
1009
1027
state.adjust_time(+20)
1010
1028
self.assertIs(None, self.do_update_entry(state, entry, 'a'))
1011
# a/ used to be a file, but is now a directory, worth saving
1012
1029
self.assertEqual(dirstate.DirState.IN_MEMORY_MODIFIED,
1013
1030
state._dirblock_state)
1015
1032
self.assertEqual(dirstate.DirState.IN_MEMORY_UNMODIFIED,
1016
1033
state._dirblock_state)
1017
# No changes to a/ means not worth saving.
1018
self.assertIs(None, self.do_update_entry(state, entry, 'a'))
1019
self.assertEqual(dirstate.DirState.IN_MEMORY_UNMODIFIED,
1020
state._dirblock_state)
1021
# Change the last-modified time for the directory
1022
t = time.time() - 100.0
1024
os.utime('a', (t, t))
1026
# It looks like Win32 + FAT doesn't allow to change times on a dir.
1027
raise tests.TestSkipped("can't update mtime of a dir on FAT")
1028
saved_packed_stat = entry[1][0][-1]
1029
self.assertIs(None, self.do_update_entry(state, entry, 'a'))
1030
# We *do* go ahead and update the information in the dirblocks, but we
1031
# don't bother setting IN_MEMORY_MODIFIED because it is trivial to
1033
self.assertNotEqual(saved_packed_stat, entry[1][0][-1])
1034
self.assertIs(None, self.do_update_entry(state, entry, 'a'))
1034
1035
self.assertEqual(dirstate.DirState.IN_MEMORY_UNMODIFIED,
1035
1036
state._dirblock_state)