diff options
Diffstat (limited to 'debian/patches/lib2to3-no-pickled-grammar.diff')
-rw-r--r-- | debian/patches/lib2to3-no-pickled-grammar.diff | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/debian/patches/lib2to3-no-pickled-grammar.diff b/debian/patches/lib2to3-no-pickled-grammar.diff new file mode 100644 index 0000000..6364384 --- /dev/null +++ b/debian/patches/lib2to3-no-pickled-grammar.diff @@ -0,0 +1,92 @@ +Index: b/Lib/lib2to3/pgen2/driver.py +=================================================================== +--- a/Lib/lib2to3/pgen2/driver.py ++++ b/Lib/lib2to3/pgen2/driver.py +@@ -122,7 +122,10 @@ def load_grammar(gt="Grammar.txt", gp=No + if force or not _newer(gp, gt): + logger.info("Generating grammar tables from %s", gt) + g = pgen.generate_grammar(gt) +- if save: ++ # the pickle files mismatch, when built on different architectures. ++ # don't save these for now. An alternative solution might be to ++ # include the multiarch triplet into the file name ++ if False: + logger.info("Writing grammar tables to %s", gp) + try: + g.dump(gp) +Index: b/Lib/lib2to3/tests/test_parser.py +=================================================================== +--- a/Lib/lib2to3/tests/test_parser.py ++++ b/Lib/lib2to3/tests/test_parser.py +@@ -36,71 +36,6 @@ + self.assertEqual(t.children[1].children[0].type, syms.print_stmt) + + +-class TestPgen2Caching(support.TestCase): +- def test_load_grammar_from_txt_file(self): +- pgen2_driver.load_grammar(support.grammar_path, save=False, force=True) +- +- def test_load_grammar_from_pickle(self): +- # Make a copy of the grammar file in a temp directory we are +- # guaranteed to be able to write to. +- tmpdir = tempfile.mkdtemp() +- try: +- grammar_copy = os.path.join( +- tmpdir, os.path.basename(support.grammar_path)) +- shutil.copy(support.grammar_path, grammar_copy) +- pickle_name = pgen2_driver._generate_pickle_name(grammar_copy) +- +- pgen2_driver.load_grammar(grammar_copy, save=True, force=True) +- self.assertTrue(os.path.exists(pickle_name)) +- +- os.unlink(grammar_copy) # Only the pickle remains... +- pgen2_driver.load_grammar(grammar_copy, save=False, force=False) +- finally: +- shutil.rmtree(tmpdir) +- +- @unittest.skipIf(sys.executable is None, 'sys.executable required') +- def test_load_grammar_from_subprocess(self): +- tmpdir = tempfile.mkdtemp() +- tmpsubdir = os.path.join(tmpdir, 'subdir') +- try: +- os.mkdir(tmpsubdir) +- grammar_base = os.path.basename(support.grammar_path) +- grammar_copy = os.path.join(tmpdir, grammar_base) +- grammar_sub_copy = os.path.join(tmpsubdir, grammar_base) +- shutil.copy(support.grammar_path, grammar_copy) +- shutil.copy(support.grammar_path, grammar_sub_copy) +- pickle_name = pgen2_driver._generate_pickle_name(grammar_copy) +- pickle_sub_name = pgen2_driver._generate_pickle_name( +- grammar_sub_copy) +- self.assertNotEqual(pickle_name, pickle_sub_name) +- +- # Generate a pickle file from this process. +- pgen2_driver.load_grammar(grammar_copy, save=True, force=True) +- self.assertTrue(os.path.exists(pickle_name)) +- +- # Generate a new pickle file in a subprocess with a most likely +- # different hash randomization seed. +- sub_env = dict(os.environ) +- sub_env['PYTHONHASHSEED'] = 'random' +- subprocess.check_call( +- [sys.executable, '-c', """ +-from lib2to3.pgen2 import driver as pgen2_driver +-pgen2_driver.load_grammar(%r, save=True, force=True) +- """ % (grammar_sub_copy,)], +- env=sub_env) +- self.assertTrue(os.path.exists(pickle_sub_name)) +- +- with open(pickle_name, 'rb') as pickle_f_1, \ +- open(pickle_sub_name, 'rb') as pickle_f_2: +- self.assertEqual( +- pickle_f_1.read(), pickle_f_2.read(), +- msg='Grammar caches generated using different hash seeds' +- ' were not identical.') +- finally: +- shutil.rmtree(tmpdir) +- +- +- + class GrammarTest(support.TestCase): + def validate(self, code): + support.parse_string(code) |