528
528
class TestDirStateOnFile(TestCaseWithDirState):
530
def create_updated_dirstate(self):
531
self.build_tree(['a-file'])
532
tree = self.make_branch_and_tree('.')
533
tree.add(['a-file'], ['a-id'])
534
tree.commit('add a-file')
535
# Save and unlock the state, re-open it in readonly mode
536
state = dirstate.DirState.from_tree(tree, 'dirstate')
539
state = dirstate.DirState.on_file('dirstate')
530
543
def test_construct_with_path(self):
531
544
tree = self.make_branch_and_tree('tree')
532
545
state = dirstate.DirState.from_tree(tree, 'dirstate.from_tree')
563
576
def test_can_save_in_read_lock(self):
564
self.build_tree(['a-file'])
565
state = dirstate.DirState.initialize('dirstate')
567
# No stat and no sha1 sum.
568
state.add('a-file', 'a-file-id', 'file', None, '')
573
# Now open in readonly mode
574
state = dirstate.DirState.on_file('dirstate')
577
state = self.create_updated_dirstate()
577
579
entry = state._get_entry(0, path_utf8='a-file')
578
580
# The current size should be 0 (default)
579
581
self.assertEqual(0, entry[1][0][2])
580
582
# We should have a real entry.
581
583
self.assertNotEqual((None, None), entry)
582
# Make sure everything is old enough
584
# Set the cutoff-time into the future, so things look cacheable
583
585
state._sha_cutoff_time()
584
state._cutoff_time += 10
585
# Change the file length
586
self.build_tree_contents([('a-file', 'shorter')])
587
sha1sum = dirstate.update_entry(state, entry, 'a-file',
589
# new file, no cached sha:
590
self.assertEqual(None, sha1sum)
586
state._cutoff_time += 10.0
587
st = os.lstat('a-file')
588
sha1sum = dirstate.update_entry(state, entry, 'a-file', st)
589
# We updated the current sha1sum because the file is cacheable
590
self.assertEqual('ecc5374e9ed82ad3ea3b4d452ea995a5fd3e70e3',
592
593
# The dirblock has been updated
593
self.assertEqual(7, entry[1][0][2])
594
self.assertEqual(st.st_size, entry[1][0][2])
594
595
self.assertEqual(dirstate.DirState.IN_MEMORY_MODIFIED,
595
596
state._dirblock_state)
606
607
state.lock_read()
608
609
entry = state._get_entry(0, path_utf8='a-file')
609
self.assertEqual(7, entry[1][0][2])
610
self.assertEqual(st.st_size, entry[1][0][2])
613
614
def test_save_fails_quietly_if_locked(self):
614
615
"""If dirstate is locked, save will fail without complaining."""
615
self.build_tree(['a-file'])
616
state = dirstate.DirState.initialize('dirstate')
618
# No stat and no sha1 sum.
619
state.add('a-file', 'a-file-id', 'file', None, '')
624
state = dirstate.DirState.on_file('dirstate')
616
state = self.create_updated_dirstate()
627
618
entry = state._get_entry(0, path_utf8='a-file')
628
sha1sum = dirstate.update_entry(state, entry, 'a-file',
631
self.assertEqual(None, sha1sum)
619
# No cached sha1 yet.
620
self.assertEqual('', entry[1][0][1])
621
# Set the cutoff-time into the future, so things look cacheable
622
state._sha_cutoff_time()
623
state._cutoff_time += 10.0
624
st = os.lstat('a-file')
625
sha1sum = dirstate.update_entry(state, entry, 'a-file', st)
626
self.assertEqual('ecc5374e9ed82ad3ea3b4d452ea995a5fd3e70e3',
632
628
self.assertEqual(dirstate.DirState.IN_MEMORY_MODIFIED,
633
629
state._dirblock_state)