diff options
author | Benjamin Peterson <benjamin@python.org> | 2011-03-12 18:28:16 -0600 |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2011-03-12 18:28:16 -0600 |
commit | 62af56412a8c773247c801ce4d6204067c629b9e (patch) | |
tree | 85c43a55104c8f4c4f3135a072ce4e936cc50232 | |
parent | 79b38d161bfa58f6fcf688741d4cad21b3af076e (diff) | |
download | cpython-62af56412a8c773247c801ce4d6204067c629b9e.tar.gz |
convert ast versioning to mercurial
-rw-r--r-- | Doc/library/ast.rst | 4 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Parser/Python.asdl | 2 | ||||
-rw-r--r-- | Parser/asdl.py | 23 | ||||
-rwxr-xr-x | Parser/asdl_c.py | 21 | ||||
-rw-r--r-- | Python/Python-ast.c | 5 |
6 files changed, 31 insertions, 26 deletions
diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index e2c0b6d17d..85081be399 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -96,8 +96,8 @@ Node classes Abstract Grammar ---------------- -The module defines a string constant ``__version__`` which is the decimal -Subversion revision number of the file shown below. +The module defines a string constant ``__version__`` which is the Mercurial +revision of the file shown below. The abstract grammar is currently defined as follows: @@ -10,6 +10,8 @@ What's New in Python 3.3 Alpha 1? Core and Builtins ----------------- +- _ast.__version__ is now a Mercurial integer and hex revision. + - Issue #9856: Change object.__format__ with a non-empty format string to be a DeprecationWarning. In 3.2 it was a PendingDeprecationWarning. In 3.4 it will be a TypeError. diff --git a/Parser/Python.asdl b/Parser/Python.asdl index 9407b2f186..8e2e1ac6ac 100644 --- a/Parser/Python.asdl +++ b/Parser/Python.asdl @@ -1,6 +1,6 @@ -- ASDL's four builtin types are identifier, int, string, object -module Python version "$Revision$" +module Python { mod = Module(stmt* body) | Interactive(stmt* body) diff --git a/Parser/asdl.py b/Parser/asdl.py index 7b4e2dc81e..c63dfa7fb6 100644 --- a/Parser/asdl.py +++ b/Parser/asdl.py @@ -114,28 +114,20 @@ class ASDLParser(spark.GenericParser, object): raise ASDLSyntaxError(tok.lineno, tok) def p_module_0(self, info): - " module ::= Id Id version { } " - module, name, version, _0, _1 = info + " module ::= Id Id { } " + module, name, _0, _1 = info if module.value != "module": raise ASDLSyntaxError(module.lineno, msg="expected 'module', found %s" % module) - return Module(name, None, version) + return Module(name, None) def p_module(self, info): - " module ::= Id Id version { definitions } " - module, name, version, _0, definitions, _1 = info + " module ::= Id Id { definitions } " + module, name, _0, definitions, _1 = info if module.value != "module": raise ASDLSyntaxError(module.lineno, msg="expected 'module', found %s" % module) - return Module(name, definitions, version) - - def p_version(self, info): - "version ::= Id String" - version, V = info - if version.value != "version": - raise ASDLSyntaxError(version.lineno, - msg="expected 'version', found %" % version) - return V + return Module(name, definitions) def p_definition_0(self, definition): " definitions ::= definition " @@ -246,10 +238,9 @@ class AST(object): pass # a marker class class Module(AST): - def __init__(self, name, dfns, version): + def __init__(self, name, dfns): self.name = name self.dfns = dfns - self.version = version self.types = {} # maps type name to value (from dfns) for type in dfns: self.types[type.name.value] = type.value diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index d6555d6d72..d7aecb58c2 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -5,6 +5,7 @@ # handle fields that have a type but no name import os, sys +import subprocess import asdl @@ -882,9 +883,6 @@ static int add_ast_fields(void) self.emit("if (!%s_singleton) return 0;" % cons.name, 1) -def parse_version(mod): - return mod.version.value[12:-3] - class ASTModuleVisitor(PickleVisitor): def visitModule(self, mod): @@ -904,7 +902,7 @@ class ASTModuleVisitor(PickleVisitor): self.emit("return NULL;", 2) # Value of version: "$Revision$" self.emit('if (PyModule_AddStringConstant(m, "__version__", "%s") < 0)' - % parse_version(mod), 1) + % (mod.version,), 1) self.emit("return NULL;", 2) for dfn in mod.dfns: self.visit(dfn) @@ -1137,6 +1135,18 @@ c_file_msg = """ """ + +def get_file_revision(f): + """Fish out the last change to a file in hg.""" + args = ["hg", "log", "--template", "{rev}:{node|short}", "--limit", "1"] + p = subprocess.Popen(args, stdout=subprocess.PIPE) + out = p.communicate()[0] + if p.returncode: + print >> sys.stderr, "error return code from hg" + sys.exit(1) + return out + + def main(srcfile): argv0 = sys.argv[0] components = argv0.split(os.sep) @@ -1145,6 +1155,7 @@ def main(srcfile): mod = asdl.parse(srcfile) if not asdl.check(mod): sys.exit(1) + mod.version = get_file_revision(srcfile) if INC_DIR: p = "%s/%s-ast.h" % (INC_DIR, mod.name) f = open(p, "w") @@ -1164,7 +1175,7 @@ def main(srcfile): p = os.path.join(SRC_DIR, str(mod.name) + "-ast.c") f = open(p, "w") f.write(auto_gen_msg) - f.write(c_file_msg % parse_version(mod)) + f.write(c_file_msg % (mod.version,)) f.write('#include "Python.h"\n') f.write('#include "%s-ast.h"\n' % mod.name) f.write('\n') diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 2c09f96f0e..726227cebb 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -2,7 +2,7 @@ /* - __version__ 82163. + __version__ 68409:c017695acf19. This module must be committed separately after each AST grammar change; The __version__ number is set to the revision number of the commit @@ -6739,7 +6739,8 @@ PyInit__ast(void) NULL; if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0) return NULL; - if (PyModule_AddStringConstant(m, "__version__", "82163") < 0) + if (PyModule_AddStringConstant(m, "__version__", "68409:c017695acf19") + < 0) return NULL; if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return NULL; |