Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Unified Diff: tools/push-to-trunk/generate_version.py

Issue 843913009: Reland Auto-generate v8 version based on tags. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gyp/v8.gyp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/push-to-trunk/generate_version.py
diff --git a/tools/push-to-trunk/generate_version.py b/tools/push-to-trunk/generate_version.py
index b4a0221eae5c10224a18d79bf8067ca3df958177..12885066c675c9bbbe2413ef4a55b0af35999597 100755
--- a/tools/push-to-trunk/generate_version.py
+++ b/tools/push-to-trunk/generate_version.py
@@ -5,9 +5,23 @@
"""
Script to set v8's version file to the version given by the latest tag.
+
+The script can be run in two modes:
+1) As a gclient hook with the option --hook.
+ The script will write a temporary version file into the checkout.
+2) During compilation as an action.
+ The script will write version.cc in the output folder based on the
+ tag info. In case of a failure it will fall back to the temporary file
+ from the hook call.
+
+In most cases, 2) will succeed and the temporary information from 1) won't
+be used. In case the checkout is copied somewhere and the git context is
+lost (e.g. on the android_aosp builder), the temporary file from 1) is
+required.
"""
+import optparse
import os
import re
import subprocess
@@ -17,8 +31,10 @@ import sys
CWD = os.path.abspath(
os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
VERSION_CC = os.path.join(CWD, "src", "version.cc")
+TMP_VERSION_CC = os.path.join(CWD, ".version.cc")
-def main():
+
+def generate_version_file():
tag = subprocess.check_output(
"git describe --tags",
shell=True,
@@ -50,28 +66,68 @@ def main():
patch = "0"
# Modify version.cc with the new values.
- with open(VERSION_CC, "r") as f:
- text = f.read()
output = []
- for line in text.split("\n"):
- for definition, substitute in (
- ("MAJOR_VERSION", major),
- ("MINOR_VERSION", minor),
- ("BUILD_NUMBER", build),
- ("PATCH_LEVEL", patch),
- ("IS_CANDIDATE_VERSION", candidate)):
- if line.startswith("#define %s" % definition):
- line = re.sub("\d+$", substitute, line)
- output.append(line)
- with open(VERSION_CC, "w") as f:
- f.write("\n".join(output))
-
- # Log what was done.
+ with open(VERSION_CC, "r") as f:
+ for line in f:
+ for definition, substitute in (
+ ("MAJOR_VERSION", major),
+ ("MINOR_VERSION", minor),
+ ("BUILD_NUMBER", build),
+ ("PATCH_LEVEL", patch),
+ ("IS_CANDIDATE_VERSION", candidate)):
+ if line.startswith("#define %s" % definition):
+ line = re.sub("\d+$", substitute, line)
+ output.append(line)
+ # Log what was calculated.
candidate_txt = " (candidate)" if candidate == "1" else ""
patch_txt = ".%s" % patch if patch != "0" else ""
version_txt = ("%s.%s.%s%s%s" %
(major, minor, build, patch_txt, candidate_txt))
- print "Modified version.cc. Set V8 version to %s" % version_txt
+ print "Modifying version.cc. Set V8 version to %s" % version_txt
+ return "".join(output)
+
+
+def delete_tmp_version_file():
+ # Make sure a subsequent call to this script doesn't use an outdated
+ # version file.
+ if os.path.exists(TMP_VERSION_CC):
+ os.remove(TMP_VERSION_CC)
+
+
+def main():
+ parser = optparse.OptionParser()
+ parser.add_option("--hook",
+ help="Run as a gclient hook",
+ default=False, action="store_true")
+ (options, args) = parser.parse_args()
+
+ if options.hook:
+ version_out = TMP_VERSION_CC
+ else:
+ if len(args) != 1:
+ print "Error: Specify the output file path for version.cc"
+ return 1
+ version_out = args[0]
+
+ assert os.path.exists(os.path.dirname(version_out))
+
+ try:
+ version_file_content = generate_version_file()
+ except Exception as e:
+ # Allow exceptions when run during compilation. E.g. there might be no git
+ # context availabe. When run as a gclient hook, generation must succeed.
+ if options.hook:
+ delete_tmp_version_file()
+ raise e
+ # Assume the script already ran as a hook.
+ print "No git context available. Using V8 version from hook."
+ assert os.path.exists(TMP_VERSION_CC)
+ with open(TMP_VERSION_CC, "r") as f:
+ version_file_content = f.read()
+
+ delete_tmp_version_file()
+ with open(version_out, "w") as f:
+ f.write(version_file_content)
return 0
if __name__ == "__main__":
« no previous file with comments | « tools/gyp/v8.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698