~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_dirstate.py

Merge bzr.dev 4187, and revert the change to fix refcycle issues.

I apparently didn't run the smart fetch tests. Which show that we access inv+chk pages
as a fulltext, and then insert the stream, which expects to get the block as a compressed
block. :(.
Need to rethink how to do it, possibly with weakrefs.


This also brings in CommitBuilder.record_iter_changes() and the updates to btree_index
and backing indices.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
from bzrlib.tests import (
31
31
        SymlinkFeature,
32
32
        TestCase,
 
33
        TestCaseInTempDir,
33
34
        TestCaseWithTransport,
34
35
        )
35
36
 
1616
1617
class InstrumentedDirState(dirstate.DirState):
1617
1618
    """An DirState with instrumented sha1 functionality."""
1618
1619
 
1619
 
    def __init__(self, path):
1620
 
        super(InstrumentedDirState, self).__init__(path)
 
1620
    def __init__(self, path, sha1_provider):
 
1621
        super(InstrumentedDirState, self).__init__(path, sha1_provider)
1621
1622
        self._time_offset = 0
1622
1623
        self._log = []
1623
1624
        # member is dynamically set in DirState.__init__ to turn on trace
 
1625
        self._sha1_provider = sha1_provider
1624
1626
        self._sha1_file = self._sha1_file_and_log
1625
1627
 
1626
1628
    def _sha_cutoff_time(self):
1629
1631
 
1630
1632
    def _sha1_file_and_log(self, abspath):
1631
1633
        self._log.append(('sha1', abspath))
1632
 
        return osutils.sha_file_by_name(abspath)
 
1634
        return self._sha1_provider.sha1(abspath)
1633
1635
 
1634
1636
    def _read_link(self, abspath, old_link):
1635
1637
        self._log.append(('read_link', abspath, old_link))
1666
1668
        self.st_ino = ino
1667
1669
        self.st_mode = mode
1668
1670
 
 
1671
    @staticmethod
 
1672
    def from_stat(st):
 
1673
        return _FakeStat(st.st_size, st.st_mtime, st.st_ctime, st.st_dev,
 
1674
            st.st_ino, st.st_mode)
 
1675
 
1669
1676
 
1670
1677
class TestPackStat(TestCaseWithTransport):
1671
1678
 
2221
2228
        inv_entry.symlink_target = u'link-target'
2222
2229
        details = self.assertDetails(('l', 'link-target', 0, False,
2223
2230
                                      'link-revision-id'), inv_entry)
 
2231
 
 
2232
 
 
2233
class TestSHA1Provider(TestCaseInTempDir):
 
2234
 
 
2235
    def test_sha1provider_is_an_interface(self):
 
2236
        p = dirstate.SHA1Provider()
 
2237
        self.assertRaises(NotImplementedError, p.sha1, "foo")
 
2238
        self.assertRaises(NotImplementedError, p.stat_and_sha1, "foo")
 
2239
 
 
2240
    def test_defaultsha1provider_sha1(self):
 
2241
        text = 'test\r\nwith\nall\rpossible line endings\r\n'
 
2242
        self.build_tree_contents([('foo', text)])
 
2243
        expected_sha = osutils.sha_string(text)
 
2244
        p = dirstate.DefaultSHA1Provider()
 
2245
        self.assertEqual(expected_sha, p.sha1('foo'))
 
2246
 
 
2247
    def test_defaultsha1provider_stat_and_sha1(self):
 
2248
        text = 'test\r\nwith\nall\rpossible line endings\r\n'
 
2249
        self.build_tree_contents([('foo', text)])
 
2250
        expected_sha = osutils.sha_string(text)
 
2251
        p = dirstate.DefaultSHA1Provider()
 
2252
        statvalue, sha1 = p.stat_and_sha1('foo')
 
2253
        self.assertTrue(len(statvalue) >= 10)
 
2254
        self.assertEqual(len(text), statvalue.st_size)
 
2255
        self.assertEqual(expected_sha, sha1)