Index: dart/tools/utils.py |
diff --git a/dart/tools/utils.py b/dart/tools/utils.py |
index 89da10fc490ae35decea341732bf41004e3a91bc..de2425c281815fab9b653be03d607c26a8ac50b3 100644 |
--- a/dart/tools/utils.py |
+++ b/dart/tools/utils.py |
@@ -14,6 +14,15 @@ import subprocess |
import sys |
import tempfile |
+class Version(object): |
+ def __init__(self, channel, major, minor, patch, prerelease, |
+ prerelease_patch): |
+ self.channel = channel |
+ self.major = major |
+ self.minor = minor |
+ self.patch = patch |
+ self.prerelease = prerelease |
+ self.prerelease_patch = prerelease_patch |
# Try to guess the host operating system. |
def GuessOS(): |
@@ -231,40 +240,47 @@ def GetBuildRoot(host_os, mode=None, arch=None, target_os=None): |
def GetBaseDir(): |
return BASE_DIR |
-# Return the base part of the version, Major.Minor.Build.Patch, |
-# without the _revision addition |
def GetShortVersion(): |
- (channel, major, minor, build, patch) = ReadVersionFile() |
- # TODO(kustermann/ricow): Add the channel to the version string. |
- return '%s.%s.%s.%s' % (major, minor, build, patch) |
- |
- |
-def GetVersion(): |
- version_tuple = ReadVersionFile() |
- if not version_tuple: |
+ version = ReadVersionFile() |
+ return ('%s.%s.%s.%s.%s' % ( |
+ version.major, version.minor, version.patch, version.prerelease, |
+ version.prerelease_patch)) |
+ |
+def GetSemanticSDKVersion(): |
+ version = ReadVersionFile() |
+ if not version: |
return None |
- (channel, 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 |
+ if version.channel == 'be': |
+ postfix = '-edge.%s' % GetSVNRevision() |
+ elif version.channel == 'dev': |
+ postfix = '-dev.%s.%s' % (version.prerelease, version.prerelease_patch) |
+ else: |
+ assert version.channel == 'stable' |
+ postfix = '' |
+ |
+ return '%s.%s.%s%s' % (version.major, version.minor, version.patch, postfix) |
+ |
+def GetEclipseVersionQualifier(): |
+ def pad(number, num_digits): |
+ number_str = str(number) |
+ return '0' * max(0, num_digits - len(number_str)) + number_str |
+ |
+ version = ReadVersionFile() |
+ if version.channel == 'be': |
+ return 'edge_%s' % pad(GetSVNRevision(), 6) |
+ elif version.channel == 'dev': |
+ return 'dev_%s_%s' % (pad(version.prerelease, 2), |
+ pad(version.prerelease_patch, 2)) |
+ else: |
+ return 'release' |
- # TODO(kustermann/ricow): Add the channel to the version string. |
- return ("%s.%s.%s.%s%s%s" % |
- (major, minor, build, patch, revision_string, user_string)) |
+def GetVersion(): |
+ return GetSemanticSDKVersion() |
def GetChannel(): |
- (channel, _, _, _, _) = ReadVersionFile() |
- return channel |
+ version = ReadVersionFile() |
+ return version.channel |
def GetUserName(): |
key = 'USER' |
@@ -273,6 +289,12 @@ def GetUserName(): |
return os.environ.get(key, '') |
def ReadVersionFile(): |
+ def match_against(pattern, content): |
+ match = re.search(pattern, content, flags=re.MULTILINE) |
+ if match: |
+ return match.group(1) |
+ return None |
+ |
version_file = os.path.join(DART_DIR, 'tools', 'VERSION') |
try: |
fd = open(version_file) |
@@ -281,19 +303,17 @@ def ReadVersionFile(): |
except: |
print "Warning: Couldn't read VERSION file (%s)" % version_file |
return None |
- channel_match = re.search( |
- '^CHANNEL ([A-Za-z0-9]+)$', content, flags=re.MULTILINE) |
- major_match = re.search('^MAJOR (\d+)$', content, flags=re.MULTILINE) |
- minor_match = re.search('^MINOR (\d+)$', content, flags=re.MULTILINE) |
- build_match = re.search('^BUILD (\d+)$', content, flags=re.MULTILINE) |
- patch_match = re.search('^PATCH (\d+)$', content, flags=re.MULTILINE) |
- if (channel_match and |
- major_match and |
- minor_match and |
- build_match and |
- patch_match): |
- return (channel_match.group(1), major_match.group(1), minor_match.group(1), |
- build_match.group(1), patch_match.group(1)) |
+ |
+ channel = match_against('^CHANNEL ([A-Za-z0-9]+)$', content) |
+ major = match_against('^MAJOR (\d+)$', content) |
+ minor = match_against('^MINOR (\d+)$', content) |
+ patch = match_against('^PATCH (\d+)$', content) |
+ prerelease = match_against('^PRERELEASE (\d+)$', content) |
+ prerelease_patch = match_against('^PRERELEASE_PATCH (\d+)$', content) |
+ |
+ if channel and major and minor and prerelease and prerelease_patch: |
+ return Version( |
+ channel, major, minor, patch, prerelease, prerelease_patch) |
else: |
print "Warning: VERSION file (%s) has wrong format" % version_file |
return None |