Index: tools/utils.py |
diff --git a/tools/utils.py b/tools/utils.py |
index 0abb0ed15d32240c5f8613e7612315830209f549..54a53a8646504049fb59603dde3a5b8412a4bb33 100644 |
--- a/tools/utils.py |
+++ b/tools/utils.py |
@@ -205,7 +205,6 @@ def GetBuildbotGSUtilPath(): |
return gsutil |
def GetBuildMode(mode): |
- global BUILD_MODES |
return BUILD_MODES[mode] |
@@ -214,10 +213,10 @@ def GetBuildConf(mode, arch): |
ARCH_GUESS = GuessArchitecture() |
BASE_DIR = os.path.abspath(os.path.join(os.curdir, '..')) |
+DART_DIR = os.path.abspath(os.path.join(__file__, '..', '..')) |
def GetBuildDir(host_os, target_os): |
- global BUILD_ROOT |
build_dir = BUILD_ROOT[host_os] |
if target_os and target_os != host_os: |
build_dir = os.path.join(build_dir, target_os) |
@@ -233,28 +232,71 @@ def GetBaseDir(): |
return BASE_DIR |
def GetVersion(): |
- dartbin = DartBinary() |
- version_script = VersionScript() |
- p = subprocess.Popen([dartbin, version_script], stdout = subprocess.PIPE, |
- stderr = subprocess.STDOUT, shell=IsWindows()) |
- output, not_used = p.communicate() |
- return output.strip() |
+ version_tuple = ReadVersionFile() |
+ if not version_tuple: |
+ return None |
+ |
+ (major, minor, build, patch) = version_tuple |
+ revision = GetSVNRevision() |
+ user = GetUserName() |
+ # We don't add username to release builds (or any builds on the bots) |
+ if user == 'chrome-bot': |
+ user = '' |
+ |
+ user_string = '' |
+ revision_string = '' |
+ if user: |
+ user_string = '_%s' % user |
+ if revision: |
+ revision_string = '_r%s' % revision |
+ |
+ return ("%s.%s.%s.%s%s%s" % |
+ (major, minor, build, patch, revision_string, user_string)) |
+ |
+def GetUserName(): |
+ key = 'USER' |
+ if sys.platform == 'win32': |
+ key = 'USERNAME' |
+ return os.environ.get(key, '') |
+ |
+def ReadVersionFile(): |
+ version_file = os.path.join(DART_DIR, 'tools', 'VERSION') |
+ try: |
+ fd = open(version_file) |
+ content = fd.read() |
+ fd.close() |
+ except: |
+ print "Warning: Couldn't read VERSION file (%s)" % version_file |
+ return None |
+ major_match = re.search('MAJOR (\d+)', content) |
+ minor_match = re.search('MINOR (\d+)', content) |
+ build_match = re.search('BUILD (\d+)', content) |
+ patch_match = re.search('PATCH (\d+)', content) |
+ if major_match and minor_match and build_match and patch_match: |
+ return (major_match.group(1), minor_match.group(1), build_match.group(1), |
+ patch_match.group(1)) |
+ else: |
+ print "Warning: VERSION file (%s) has wrong format" % version_file |
+ return None |
def GetSVNRevision(): |
+ # FIXME(kustermann): Make this work for newer SVN versions as well (where |
+ # we've got only one '.svn' directory) |
custom_env = dict(os.environ) |
custom_env['LC_MESSAGES'] = 'en_GB' |
p = subprocess.Popen(['svn', 'info'], stdout = subprocess.PIPE, |
stderr = subprocess.STDOUT, shell=IsWindows(), |
- env = custom_env) |
- output, not_used = p.communicate() |
+ env = custom_env, |
+ cwd = DART_DIR) |
+ output, _ = p.communicate() |
revision = ParseSvnInfoOutput(output) |
if revision: |
return revision |
# maybe the builder is using git-svn, try that |
p = subprocess.Popen(['git', 'svn', 'info'], stdout = subprocess.PIPE, |
- stderr = subprocess.STDOUT, shell=IsWindows()) |
- output, not_used = p.communicate() |
+ stderr = subprocess.STDOUT, shell=IsWindows(), cwd = DART_DIR) |
+ output, _ = p.communicate() |
revision = ParseSvnInfoOutput(output) |
if revision: |
return revision |
@@ -262,9 +304,9 @@ def GetSVNRevision(): |
return None |
def ParseSvnInfoOutput(output): |
- for line in output.split('\n'): |
- if 'Revision' in line: |
- return (line.strip().split())[1] |
+ revision_match = re.search('Last Changed Rev: (\d+)', output) |
+ if revision_match: |
+ return revision_match.group(1) |
return None |
def RewritePathSeparator(path, workspace): |
@@ -389,11 +431,6 @@ def Touch(name): |
os.utime(name, None) |
-def VersionScript(): |
- tools_dir = os.path.dirname(os.path.realpath(__file__)) |
- return os.path.join(tools_dir, 'version.dart') |
- |
- |
def DartBinary(): |
tools_dir = os.path.dirname(os.path.realpath(__file__)) |
dart_binary_prefix = os.path.join(tools_dir, 'testing', 'bin') |