diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2016-07-11 00:27:06 +0900 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2016-07-12 12:15:12 +0900 |
commit | 2ccb75c98fbe7e69e4689725affa268e7c538315 (patch) | |
tree | 80e649ad94ccc653685489a34cb6f5c071f8474a /sphinx/pycode/pgen2/driver.py | |
parent | e1e82e43c9280e7486aad49c7f84a75f4ee1654b (diff) | |
download | sphinx-git-2ccb75c98fbe7e69e4689725affa268e7c538315.tar.gz |
Bundle sphinx/pycode/Grammar-*.pickle (ref: #2765)
So far, sphinx generates the grammar files on demand.
It causes uninstallation does not remove whole of files.
With this fix, Sphinx bundles the files in the package.
Diffstat (limited to 'sphinx/pycode/pgen2/driver.py')
-rw-r--r-- | sphinx/pycode/pgen2/driver.py | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/sphinx/pycode/pgen2/driver.py b/sphinx/pycode/pgen2/driver.py index 6bdcebece..d321856d2 100644 --- a/sphinx/pycode/pgen2/driver.py +++ b/sphinx/pycode/pgen2/driver.py @@ -109,27 +109,37 @@ def generate_lines(text): yield "" -def load_grammar(gt="Grammar.txt", gp=None, - save=True, force=False, logger=None): +def get_compiled_path(filename): + head, tail = os.path.splitext(filename) + if tail == ".txt": + tail = "" + # embed Sphinx major version for the case we ever change the grammar... + return "%s%s-sphinx%s.pickle" % (head, tail, ".".join(map(str, sphinx.version_info[:2]))) + + +def compile_grammar(gt='Grammar.txt', logger=None): + """Compile the grammer.""" + if logger is None: + logger = logging.getLogger() + + logger.info("Generating grammar tables from %s", gt) + g = pgen.generate_grammar(gt) + gp = get_compiled_path(gt) + logger.info("Writing grammar tables to %s", gp) + try: + g.dump(gp) + except IOError as e: + logger.info("Writing failed:"+str(e)) + + +def load_grammar(gt="Grammar.txt", logger=None): """Load the grammar (maybe from a pickle).""" if logger is None: logger = logging.getLogger() - if gp is None: - head, tail = os.path.splitext(gt) - if tail == ".txt": - tail = "" - # embed Sphinx major version for the case we ever change the grammar... - gp = head + tail + "-sphinx" + \ - ".".join(map(str, sphinx.version_info[:2])) + ".pickle" - if force or not _newer(gp, gt): + gp = get_compiled_path(gt) + if not os.path.exists(gp): logger.info("Generating grammar tables from %s", gt) g = pgen.generate_grammar(gt) - if save: - logger.info("Writing grammar tables to %s", gp) - try: - g.dump(gp) - except IOError as e: - logger.info("Writing failed:"+str(e)) else: g = grammar.Grammar() g.load(gp) |