Chromium Code Reviews| 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 |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..b4a0221eae5c10224a18d79bf8067ca3df958177 |
| --- /dev/null |
| +++ b/tools/push-to-trunk/generate_version.py |
| @@ -0,0 +1,78 @@ |
| +#!/usr/bin/env python |
| +# Copyright 2014 the V8 project authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +""" |
| +Script to set v8's version file to the version given by the latest tag. |
| +""" |
| + |
| + |
| +import os |
| +import re |
| +import subprocess |
| +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") |
| + |
| +def main(): |
| + tag = subprocess.check_output( |
| + "git describe --tags", |
| + shell=True, |
| + cwd=CWD, |
| + ).strip() |
| + assert tag |
| + |
| + # Check for commits not exactly matching a tag. Those are candidate builds |
| + # for the next version. The output has the form |
| + # <tag name>-<n commits>-<hash>. |
| + if "-" in tag: |
| + version = tag.split("-")[0] |
| + candidate = "1" |
| + else: |
| + version = tag |
| + candidate = "0" |
| + version_levels = version.split(".") |
| + |
| + # Set default patch level if none is given. |
| + if len(version_levels) == 3: |
| + version_levels.append("0") |
| + assert len(version_levels) == 4 |
| + |
| + major, minor, build, patch = version_levels |
| + |
| + # Increment build level for candidate builds. |
| + if candidate == "1": |
| + build = str(int(build) + 1) |
| + patch = "0" |
| + |
| + # Modify version.cc with the new values. |
| + with open(VERSION_CC, "r") as f: |
| + text = f.read() |
|
Jakob Kummerow
2015/01/07 09:18:22
More pythonification:
with open(VERSION_CC, "r")
|
| + 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. |
| + 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 |
| + return 0 |
| + |
| +if __name__ == "__main__": |
| + sys.exit(main()) |