annotate tests/test_fetch_exec.py @ 931:e1dbd9646d6a

svnwrap: use custom StringIO class in get_file() The wrappers were calling ra.get_file() with a cStringIO object. Empirically, svn 1.7.5 is writing 16kB blocks to the stream object, and cStringIO reallocates its internal buffer and doubles its size whenever it is filled. With large committed files this requires two large memory blocks at the same time. SimpleStringIO implements the mimimum StringIO interface used by ra.get_file() but instead stores all the blocks and "join" them at the end. It means more fragmentation but requires only one large block, without overallocation. Also, 16kB blocks should be friendly to most allocators. In practice, this simple change let me convert a revision containing multiple moderately large files, the largest being around 450MB, with a 32-bits Windows setup, python 2.7, swig svn 1.7.5, in stupid mode, while it was previously aborting with "not enough memory". The same revision still fails in replay mode.
author Patrick Mezard <patrick@mezard.eu>
date Sun, 16 Sep 2012 19:31:49 +0200
parents 04729f3a3d17
children d741f536f23a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
643
d2ef7220a079 tests: import test_util as the first module in all relevant tests
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 158
diff changeset
1 import test_util
d2ef7220a079 tests: import test_util as the first module in all relevant tests
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 158
diff changeset
2
125
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
3 import unittest
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
4
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
5 from mercurial import node
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
6
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
7 class TestFetchExec(test_util.TestBase):
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
8 def assertexec(self, ctx, files, isexec=True):
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
9 for f in files:
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
10 self.assertEqual(isexec, 'x' in ctx[f].flags())
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
11
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
12 def test_exec(self, stupid=False):
865
04729f3a3d17 test_util: merge load_fixture_and_fetch() into TestBase method
Patrick Mezard <patrick@mezard.eu>
parents: 833
diff changeset
13 repo = self._load_fixture_and_fetch('executebit.svndump', stupid=stupid)
125
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
14 self.assertexec(repo[0], ['text1', 'binary1', 'empty1'], True)
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
15 self.assertexec(repo[0], ['text2', 'binary2', 'empty2'], False)
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
16 self.assertexec(repo[1], ['text1', 'binary1', 'empty1'], False)
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
17 self.assertexec(repo[1], ['text2', 'binary2', 'empty2'], True)
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
18
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
19 def test_exec_stupid(self):
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
20 self.test_exec(True)
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
21
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
22 def test_empty_prop_val_executable(self, stupid=False):
865
04729f3a3d17 test_util: merge load_fixture_and_fetch() into TestBase method
Patrick Mezard <patrick@mezard.eu>
parents: 833
diff changeset
23 repo = self._load_fixture_and_fetch('executable_file_empty_prop.svndump',
04729f3a3d17 test_util: merge load_fixture_and_fetch() into TestBase method
Patrick Mezard <patrick@mezard.eu>
parents: 833
diff changeset
24 stupid=stupid)
125
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
25 self.assertEqual(node.hex(repo['tip'].node()),
154
6fa97cfbf62f fetch: Refactor extra creation to be shared by real and diff replay.
Augie Fackler <durin42@gmail.com>
parents: 125
diff changeset
26 '08e6b380bf291b361a418203a1cb9427213cd1fd')
125
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
27 self.assertEqual(repo['tip']['foo'].flags(), 'x')
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
28
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
29 def test_empty_prop_val_executable_stupid(self):
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
30 self.test_empty_prop_val_executable(True)
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
31
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
32 def suite():
833
312b37bc5e20 tests: avoid shadowing Python builtin all()
Yonggang Luo <luoyonggang@gmail.com>
parents: 643
diff changeset
33 all_tests = [unittest.TestLoader().loadTestsFromTestCase(TestFetchExec),
125
c35f59aa200e Move and complete execute bit conversion tests into test_fetch_exec.py
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
34 ]
833
312b37bc5e20 tests: avoid shadowing Python builtin all()
Yonggang Luo <luoyonggang@gmail.com>
parents: 643
diff changeset
35 return unittest.TestSuite(all_tests)