summaryrefslogtreecommitdiffstats
path: root/native_client_sdk
diff options
context:
space:
mode:
authorbinji@chromium.org <binji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 16:19:06 +0000
committerbinji@chromium.org <binji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-19 16:19:06 +0000
commit4ef0e94ed7c1c49d97d23721ee034bc7d5ed780c (patch)
tree40575bb1c814d6a3f97722d46294c01e29d6b8bc /native_client_sdk
parentccb5af45053cb865780329789f7453be529483f8 (diff)
downloadchromium_src-4ef0e94ed7c1c49d97d23721ee034bc7d5ed780c.zip
chromium_src-4ef0e94ed7c1c49d97d23721ee034bc7d5ed780c.tar.gz
chromium_src-4ef0e94ed7c1c49d97d23721ee034bc7d5ed780c.tar.bz2
[NaCl SDK] update_nacl_manifest updates canary to the latest available bundle.
Also switch bionic_canary over to being updated automatically. pepper_canary used to update based on the Chrome canary version, but that often prevents pepper_canary from updating as quickly. It also is unlikely that a newer pepper_canary than Chrome canary will cause any issues. This change makes pepper_canary (and bionic_canary) update based solely on which bundles are available in the cloud storage bucket. BUG=none R=sbc@chromium.org TEST=update_nacl_manifest_test.py Review URL: https://codereview.chromium.org/340243002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278396 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'native_client_sdk')
-rw-r--r--native_client_sdk/src/build_tools/json/naclsdk_manifest2.json17
-rwxr-xr-xnative_client_sdk/src/build_tools/tests/update_nacl_manifest_test.py165
-rwxr-xr-xnative_client_sdk/src/build_tools/update_nacl_manifest.py181
3 files changed, 114 insertions, 249 deletions
diff --git a/native_client_sdk/src/build_tools/json/naclsdk_manifest2.json b/native_client_sdk/src/build_tools/json/naclsdk_manifest2.json
index 7f1076e..b867230 100644
--- a/native_client_sdk/src/build_tools/json/naclsdk_manifest2.json
+++ b/native_client_sdk/src/build_tools/json/naclsdk_manifest2.json
@@ -365,23 +365,14 @@
"version": 0
},
{
- "archives": [
- {
- "checksum": {
- "sha1": "9f6a8fc33df9cfc2b48dc6f017e9de01efd546b9"
- },
- "host_os": "linux",
- "size": 399561504,
- "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.277747/naclsdk_bionic.tar.bz2"
- }
- ],
+ "archives": [],
"description": "Bionic Canary",
"name": "bionic_canary",
"recommended": "no",
- "repath": "pepper_37",
- "revision": 277747,
+ "repath": "",
+ "revision": 0,
"stability": "canary",
- "version": 37
+ "version": 0
}
],
"manifest_version": 2
diff --git a/native_client_sdk/src/build_tools/tests/update_nacl_manifest_test.py b/native_client_sdk/src/build_tools/tests/update_nacl_manifest_test.py
index 8820b69..c2ef9da 100755
--- a/native_client_sdk/src/build_tools/tests/update_nacl_manifest_test.py
+++ b/native_client_sdk/src/build_tools/tests/update_nacl_manifest_test.py
@@ -202,11 +202,10 @@ class MakeFiles(dict):
class TestDelegate(update_nacl_manifest.Delegate):
- def __init__(self, manifest, history, files, version_mapping):
+ def __init__(self, manifest, history, files):
self.manifest = manifest
self.history = history
self.files = files
- self.version_mapping = version_mapping
self.dryrun = 0
self.called_gsutil_cp = False
self.called_sendmail = False
@@ -217,16 +216,25 @@ class TestDelegate(update_nacl_manifest.Delegate):
def GetHistory(self):
return self.history
- def GetTrunkRevision(self, version):
- return self.version_mapping[version]
-
def GsUtil_ls(self, url):
path = GetPathFromGsUrl(url)
result = []
- for filename, _ in self.files.iteritems():
- if filename.startswith(path):
- result.append(MakeGsUrl(filename))
- return result
+ for filename in self.files.iterkeys():
+ if not filename.startswith(path):
+ continue
+
+ # Find the first slash after the prefix (path).
+ # +1, because if the slash is directly after path, then we want to find
+ # the following slash anyway.
+ slash = filename.find('/', len(path) + 1)
+
+ if slash != -1:
+ filename = filename[:slash]
+
+ result.append(MakeGsUrl(filename))
+
+ # Remove dupes.
+ return list(set(result))
def GsUtil_cat(self, url):
path = GetPathFromGsUrl(url)
@@ -291,12 +299,10 @@ class TestUpdateManifest(unittest.TestCase):
self.delegate = None
self.uploaded_manifest = None
self.manifest = None
- # Ignore logging warnings, etc.
- logging.getLogger('update_nacl_manifest').setLevel(logging.INFO)
def _MakeDelegate(self):
self.delegate = TestDelegate(self.manifest, self.history.history,
- self.files, self.version_mapping)
+ self.files)
def _Run(self, host_oses, extra_archives=None, fixed_bundle_versions=None):
update_nacl_manifest.Run(self.delegate, host_oses, extra_archives,
@@ -479,47 +485,12 @@ class TestUpdateManifest(unittest.TestCase):
self.assertEqual(uploaded_bundle.version, 18)
def testUpdateCanary(self):
- # Note that the bundle in naclsdk_manifest2.json will be called
- # CANARY_BUNDLE_NAME, whereas the bundle in the manifest "snippet" will be
- # called "pepper_21".
- canary_bundle = copy.deepcopy(BCANARY_NONE)
- self.manifest = MakeManifest(canary_bundle)
- self.history.Add(OS_MW, CANARY, V21_0_1145_0)
- self.files.Add(B21_0_1145_0_MLW)
- self._MakeDelegate()
- self._Run(OS_MLW)
- self._ReadUploadedManifest()
- self._AssertUploadedManifestHasBundle(B21_0_1145_0_MLW, CANARY,
- bundle_name=CANARY_BUNDLE_NAME)
-
- def testUpdateCanaryUseTrunkArchives(self):
- canary_bundle = copy.deepcopy(BCANARY_NONE)
- self.manifest = MakeManifest(canary_bundle)
- self.history.Add(OS_MW, CANARY, V21_0_1166_0)
- self.files.Add(B21_0_1166_0_MW)
- self.files.Add(BTRUNK_140819_MLW)
- self.version_mapping[V21_0_1166_0] = VTRUNK_140819
- self._MakeDelegate()
- self._Run(OS_MLW)
- self._ReadUploadedManifest()
-
- test_bundle = copy.deepcopy(B21_0_1166_0_MW)
- test_bundle.AddArchive(BTRUNK_140819_MLW.GetArchive('linux'))
- self._AssertUploadedManifestHasBundle(test_bundle, CANARY,
- bundle_name=CANARY_BUNDLE_NAME)
-
- def testCanaryUseOnlyTrunkArchives(self):
self.manifest = MakeManifest(copy.deepcopy(BCANARY_NONE))
- history = """win,canary,21.0.1163.0,2012-06-04 12:35:44.784446
-mac,canary,21.0.1163.0,2012-06-04 11:54:09.433166"""
- self._AddCsvHistory(history)
- self.version_mapping['21.0.1163.0'] = 'trunk.140240'
- my_bundle = MakePlatformBundle(21, 140240, '21.0.1163.0', OS_MLW)
- self.files.Add(my_bundle)
+ self.files.Add(BTRUNK_140819_MLW)
self._MakeDelegate()
self._Run(OS_MLW)
self._ReadUploadedManifest()
- self._AssertUploadedManifestHasBundle(my_bundle, CANARY,
+ self._AssertUploadedManifestHasBundle(BTRUNK_140819_MLW, CANARY,
bundle_name=CANARY_BUNDLE_NAME)
def testCanaryShouldOnlyUseCanaryVersions(self):
@@ -532,42 +503,6 @@ mac,canary,21.0.1163.0,2012-06-04 11:54:09.433166"""
self._MakeDelegate()
self.assertRaises(Exception, self._Run, OS_MLW)
- def testMissingCanaryFollowedByStableShouldWork(self):
- history = """win,canary,21.0.1160.0,2012-06-01 19:44:35.936109
-mac,canary,21.0.1160.0,2012-06-01 18:20:02.003123
-mac,stable,19.0.1084.52,2012-06-01 17:59:21.559710
-win,canary,21.0.1159.2,2012-06-01 02:31:43.877688
-mac,stable,19.0.1084.53,2012-06-01 01:39:57.549149
-win,canary,21.0.1158.0,2012-05-31 20:16:55.615236
-win,canary,21.0.1157.0,2012-05-31 17:41:29.516013
-mac,canary,21.0.1158.0,2012-05-31 17:41:27.591354
-mac,beta,20.0.1132.21,2012-05-30 23:45:38.535586
-linux,beta,20.0.1132.21,2012-05-30 23:45:37.025015
-cf,beta,20.0.1132.21,2012-05-30 23:45:36.767529
-win,beta,20.0.1132.21,2012-05-30 23:44:56.675123
-win,canary,21.0.1156.1,2012-05-30 22:28:01.872056
-mac,canary,21.0.1156.1,2012-05-30 21:20:29.920390
-win,canary,21.0.1156.0,2012-05-30 12:46:48.046627
-mac,canary,21.0.1156.0,2012-05-30 12:14:21.305090"""
- self.manifest = MakeManifest(copy.deepcopy(BCANARY_NONE))
- self._AddCsvHistory(history)
- self.version_mapping = {
- '21.0.1160.0': 'trunk.139984',
- '21.0.1159.2': 'trunk.139890',
- '21.0.1158.0': 'trunk.139740',
- '21.0.1157.0': 'unknown',
- '21.0.1156.1': 'trunk.139576',
- '21.0.1156.0': 'trunk.139984'}
- self.files.Add(MakePlatformBundle(21, 139890, '21.0.1159.2', OS_MLW))
- self.files.Add(MakePlatformBundle(21, 0, '21.0.1157.1', ('linux', 'win')))
- my_bundle = MakePlatformBundle(21, 139576, '21.0.1156.1', OS_MLW)
- self.files.Add(my_bundle)
- self._MakeDelegate()
- self._Run(OS_MLW)
- self._ReadUploadedManifest()
- self._AssertUploadedManifestHasBundle(my_bundle, CANARY,
- bundle_name=CANARY_BUNDLE_NAME)
-
def testExtensionWorksAsBz2(self):
# Allow old bundles with just .bz2 extension to work
self.manifest = MakeManifest(B18_NONE)
@@ -734,46 +669,6 @@ mac,canary,21.0.1156.0,2012-05-30 12:14:21.305090"""
self.assertRaises(update_nacl_manifest.UnknownLockedBundleException,
self._Run, OS_MLW)
- def testIgnoreLastDigitOnCanary(self):
- # The final number in a canary build does not include any different
- # changes, it is just a different experiment (e.g. using ASAN, or using
- # aura). We should not compare these versions differently.
- #
- # Note that the version mapping will show that 31.0.1608.0 is different
- # from 31.0.1608.1 -- this is because 31.0.1608.1 is built from the branch,
- # not from trunk. Inspecting the branch would show that there are no
- # changes (why would there be? No one has any reason to merge changes to a
- # canary branch.)
- self.manifest = MakeManifest(copy.deepcopy(BCANARY_NONE))
- history = """win,canary,31.0.1608.1,2013-08-22 09:33:24.469760
-mac,canary,31.0.1608.0,2013-08-22 07:18:09.762600"""
- self._AddCsvHistory(history)
- self.version_mapping['31.0.1608.1'] = 'trunk.218914'
- self.version_mapping['31.0.1608.0'] = 'trunk.218872'
- my_bundle = MakePlatformBundle(31, 218872, '31.0.1608.0', OS_MLW)
- self.files.Add(my_bundle)
- self._MakeDelegate()
- self._Run(OS_MLW)
- self._ReadUploadedManifest()
- self._AssertUploadedManifestHasBundle(my_bundle, CANARY,
- bundle_name=CANARY_BUNDLE_NAME)
-
- def testDontIgnoreLastDigitForNonCanary(self):
- self.manifest = MakeManifest(B26_NONE)
- self.history.Add(OS_M, BETA, V26_0_1386_1) # Only Mac
- self.history.Add(OS_LW, BETA, V26_0_1386_0) # Only Linux, Windows.
- self.files.Add(B26_0_1386_0_MLW)
-
- self._MakeDelegate()
- # This raises because pepper_26 is not found in the history, and therefore
- # "locked", but it also doesn't have an online version, therefore there is
- # no good version number to upload.
- #
- # Basically we're asserting that 26.0.1386.1 != 26.0.1386.0, which would be
- # true if it were canary.
- self.assertRaises(update_nacl_manifest.UnknownLockedBundleException,
- self._Run, OS_MLW)
-
def testUpdateBionic(self):
bionic_bundle = copy.deepcopy(BBIONIC_NONE)
self.manifest = MakeManifest(bionic_bundle)
@@ -825,21 +720,9 @@ class TestUpdateVitals(unittest.TestCase):
self.assertEqual(archive['checksum']['sha1'], self.sha1)
-class TestRealDelegate(unittest.TestCase):
- def setUp(self):
- self.delegate = update_nacl_manifest.RealDelegate()
-
- def testGetTrunkRevision(self):
- revision_dict = {
- '21.0.1180.80': '151582',
- '23.0.1271.89': '167132',
- '24.0.1305.4': '164971',
- }
- for version, revision in revision_dict.iteritems():
- self.assertEqual('trunk.%s' % revision,
- self.delegate.GetTrunkRevision(version))
-
-
if __name__ == '__main__':
- logging.basicConfig(level=logging.INFO)
+ logging.basicConfig(level=logging.CRITICAL)
+ # Uncomment the following line to enable more debugging info.
+ # logging.getLogger('update_nacl_manifest').setLevel(logging.INFO)
+
sys.exit(unittest.main())
diff --git a/native_client_sdk/src/build_tools/update_nacl_manifest.py b/native_client_sdk/src/build_tools/update_nacl_manifest.py
index ef542d4..4754abf 100755
--- a/native_client_sdk/src/build_tools/update_nacl_manifest.py
+++ b/native_client_sdk/src/build_tools/update_nacl_manifest.py
@@ -15,7 +15,6 @@ import csv
import cStringIO
import difflib
import email
-import json
import logging
import logging.handlers
import manifest_util
@@ -50,9 +49,47 @@ logger = logging.getLogger(__name__)
def SplitVersion(version_string):
"""Split a version string (e.g. "18.0.1025.163") into its components.
- Note that this function doesn't handle versions in the form "trunk.###".
+ e.g.
+ SplitVersion("trunk.123456") => ("trunk", "123456")
+ SplitVersion("18.0.1025.163") => (18, 0, 1025, 163)
"""
- return tuple(map(int, version_string.split('.')))
+ parts = version_string.split('.')
+ if parts[0] == 'trunk':
+ return (parts[0], int(parts[1]))
+ return tuple([int(p) for p in parts])
+
+
+def GetMajorVersion(version_string):
+ """Get the major version number from a version string (e.g. "18.0.1025.163").
+
+ e.g.
+ GetMajorVersion("trunk.123456") => "trunk"
+ GetMajorVersion("18.0.1025.163") => 18
+ """
+ return SplitVersion(version_string)[0]
+
+
+def CompareVersions(version1, version2):
+ """Compare two version strings and return -1, 0, 1 (similar to cmp).
+
+ Versions can only be compared if they are both trunk versions, or neither is.
+
+ e.g.
+ CompareVersions("trunk.123", "trunk.456") => -1
+ CompareVersions("18.0.1025.163", "37.0.2054.3") => -1
+ CompareVersions("trunk.123", "18.0.1025.163") => Error
+
+ """
+ split1 = SplitVersion(version1)
+ split2 = SplitVersion(version2)
+ if split1[0] == split2[0]:
+ return cmp(split1[1:], split2[1:])
+
+ if split1 == 'trunk' or split2 == 'trunk':
+ raise Exception("Unable to compare versions %s and %s" % (
+ version1, version2))
+
+ return cmp(split1, split2)
def JoinVersion(version_tuple):
@@ -60,6 +97,8 @@ def JoinVersion(version_tuple):
The tuple should be of the form (18, 0, 1025, 163).
"""
+ assert len(version_tuple) == 4
+ assert version_tuple[0] != 'trunk'
return '.'.join(map(str, version_tuple))
@@ -146,15 +185,6 @@ class Delegate(object):
tuple."""
raise NotImplementedError()
- def GetTrunkRevision(self, version):
- """Given a Chrome version, get its trunk revision.
-
- Args:
- version: A version string of the form '18.0.1025.64'
- Returns:
- The revision number for that version, as a string."""
- raise NotImplementedError()
-
def GsUtil_ls(self, url):
"""Runs gsutil ls |url|
@@ -223,12 +253,6 @@ class RealDelegate(Delegate):
# os,channel,version,timestamp
return history[1:]
- def GetTrunkRevision(self, version):
- """See Delegate.GetTrunkRevision"""
- url = 'http://omahaproxy.appspot.com/revision.json?version=%s' % (version,)
- data = json.loads(urllib2.urlopen(url).read())
- return 'trunk.%s' % int(data['chromium_revision'])
-
def GsUtil_ls(self, url):
"""See Delegate.GsUtil_ls"""
try:
@@ -366,8 +390,7 @@ class VersionFinder(object):
shared_version_generator = self._FindNextSharedVersion(self.platforms,
GetPlatformHistory)
- return self._DoGetMostRecentSharedVersion(shared_version_generator,
- allow_trunk_revisions=False)
+ return self._DoGetMostRecentSharedVersion(shared_version_generator)
def GetMostRecentSharedCanary(self):
"""Returns the most recent version of a canary pepper bundle that exists on
@@ -378,23 +401,12 @@ class VersionFinder(object):
Returns:
A tuple (version, channel, archives). The version is a string such as
- "19.0.1084.41". The channel is always 'canary'. |archives| is a list of
+ "trunk.123456". The channel is always 'canary'. |archives| is a list of
archive URLs."""
- # Canary versions that differ in the last digit shouldn't be considered
- # different; this number is typically used to represent an experiment, e.g.
- # using ASAN or aura.
- def CanaryKey(version):
- return version[:-1]
-
- # We don't ship canary on Linux, so it won't appear in self.history.
- # Instead, we can use the matching Linux trunk build for that version.
- shared_version_generator = self._FindNextSharedVersion(
- set(self.platforms) - set(('linux',)),
- self._GetPlatformCanaryHistory, CanaryKey)
- return self._DoGetMostRecentSharedVersion(shared_version_generator,
- allow_trunk_revisions=True)
-
- def GetAvailablePlatformArchivesFor(self, version, allow_trunk_revisions):
+ version_generator = self._FindNextTrunkVersion()
+ return self._DoGetMostRecentSharedVersion(version_generator)
+
+ def GetAvailablePlatformArchivesFor(self, version):
"""Returns a sequence of archives that exist for a given version, on the
given platforms.
@@ -403,8 +415,6 @@ class VersionFinder(object):
Args:
version: The version to find archives for. (e.g. "18.0.1025.164")
- allow_trunk_revisions: If True, will search for archives using the
- trunk revision that matches the branch version.
Returns:
A tuple (archives, missing_archives). |archives| is a list of archive
URLs, |missing_archives| is a list of archive names.
@@ -419,21 +429,11 @@ class VersionFinder(object):
if self.extra_archives:
for extra_archive, extra_archive_min_version in self.extra_archives:
- if SplitVersion(version) >= SplitVersion(extra_archive_min_version):
+ if CompareVersions(version, extra_archive_min_version) >= 0:
expected_archives.add(extra_archive)
found_archives = set(GetCanonicalArchiveName(a) for a in archive_urls)
missing_archives = expected_archives - found_archives
- if allow_trunk_revisions and missing_archives:
- # Try to find trunk versions of any missing archives.
- trunk_version = self.delegate.GetTrunkRevision(version)
- trunk_archives = self._GetAvailableArchivesFor(trunk_version)
- for trunk_archive_url in trunk_archives:
- trunk_archive = GetCanonicalArchiveName(trunk_archive_url)
- if trunk_archive in missing_archives:
- archive_urls.append(trunk_archive_url)
- missing_archives.discard(trunk_archive)
-
# Only return archives that are "expected".
def IsExpected(url):
return GetCanonicalArchiveName(url) in expected_archives
@@ -441,8 +441,7 @@ class VersionFinder(object):
expected_archive_urls = [u for u in archive_urls if IsExpected(u)]
return expected_archive_urls, missing_archives
- def _DoGetMostRecentSharedVersion(self, shared_version_generator,
- allow_trunk_revisions):
+ def _DoGetMostRecentSharedVersion(self, shared_version_generator):
"""Returns the most recent version of a pepper bundle that exists on all
given platforms.
@@ -451,8 +450,6 @@ class VersionFinder(object):
Args:
shared_version_generator: A generator that will yield (version, channel)
tuples in order of most recent to least recent.
- allow_trunk_revisions: If True, will search for archives using the
- trunk revision that matches the branch version.
Returns:
A tuple (version, channel, archives). The version is a string such as
"19.0.1084.41". The channel is one of ('stable', 'beta', 'dev',
@@ -477,8 +474,7 @@ class VersionFinder(object):
logger.info('Found shared version: %s, channel: %s' % (
version, channel))
- archives, missing_archives = self.GetAvailablePlatformArchivesFor(
- version, allow_trunk_revisions)
+ archives, missing_archives = self.GetAvailablePlatformArchivesFor(version)
if not missing_archives:
return version, channel, archives
@@ -506,24 +502,7 @@ class VersionFinder(object):
(with_major_version == 0 or with_major_version == version[0])):
yield channel, version
- def _GetPlatformCanaryHistory(self, with_platform):
- """Yields Chrome history for a given platform, but only for canary
- versions.
-
- Args:
- with_platform: The name of the platform to filter for.
- Returns:
- A generator that yields a tuple (channel, version) for each version that
- matches the platform and uses the canary channel. The version returned is
- a tuple as returned from SplitVersion.
- """
- for platform, channel, version, _ in self.history:
- version = SplitVersion(version)
- if with_platform == platform and channel == CANARY:
- yield channel, version
-
-
- def _FindNextSharedVersion(self, platforms, generator_func, key_func=None):
+ def _FindNextSharedVersion(self, platforms, generator_func):
"""Yields versions of Chrome that exist on all given platforms, in order of
newest to oldest.
@@ -535,17 +514,11 @@ class VersionFinder(object):
('mac', 'linux', 'win')
generator_func: A function which takes a platform and returns a
generator that yields (channel, version) tuples.
- key_func: A function to convert the version into a value that should be
- used for comparison. See python built-in sorted() or min(), for
- an example.
Returns:
A generator that yields a tuple (version, channel) for each version that
matches all platforms and the major version. The version returned is a
string (e.g. "18.0.1025.164").
"""
- if not key_func:
- key_func = lambda x: x
-
platform_generators = []
for platform in platforms:
platform_generators.append(generator_func(platform))
@@ -563,19 +536,13 @@ class VersionFinder(object):
platform, JoinVersion(platform_versions[i][1])))
logger.info('Checking versions: %s' % ', '.join(msg_info))
- shared_version = min((v for c, v in platform_versions), key=key_func)
-
- if all(key_func(v) == key_func(shared_version)
- for c, v in platform_versions):
- # The real shared_version should be the real minimum version. This will
- # be different from shared_version above only if key_func compares two
- # versions with different values as equal.
- min_version = min((v for c, v in platform_versions))
+ shared_version = min((v for c, v in platform_versions))
+ if all(v == shared_version for c, v in platform_versions):
# grab the channel from an arbitrary platform
first_platform = platform_versions[0]
channel = first_platform[0]
- yield JoinVersion(min_version), channel
+ yield JoinVersion(shared_version), channel
# force increment to next version for all platforms
shared_version = None
@@ -589,6 +556,30 @@ class VersionFinder(object):
return
+ def _FindNextTrunkVersion(self):
+ """Yields all trunk versions that exist in the cloud storage bucket, newest
+ to oldest.
+
+ Returns:
+ A generator that yields a tuple (version, channel) for each version that
+ matches all platforms and the major version. The version returned is a
+ string (e.g. "trunk.123456").
+ """
+ files = self.delegate.GsUtil_ls(GS_BUCKET_PATH)
+ assert all(f.startswith('gs://') for f in files)
+
+ trunk_versions = []
+ for f in files:
+ match = re.search(r'(trunk\.\d+)', f)
+ if match:
+ trunk_versions.append(match.group(1))
+
+ trunk_versions.sort(reverse=True)
+
+ for version in trunk_versions:
+ yield version, 'canary'
+
+
def _GetAvailableArchivesFor(self, version_string):
"""Downloads a list of all available archives for a given version.
@@ -602,7 +593,7 @@ class VersionFinder(object):
All returned URLs will use the gs:// schema."""
files = self.delegate.GsUtil_ls(GS_BUCKET_PATH + version_string)
- assert all(file.startswith('gs://') for file in files)
+ assert all(f.startswith('gs://') for f in files)
archives = [f for f in files if not f.endswith('.json')]
manifests = [f for f in files if f.endswith('.json')]
@@ -657,7 +648,7 @@ class Updater(object):
bundles that contain no archives will be considered for auto-updating."""
# Make sure there is only one stable branch: the one with the max version.
# All others are post-stable.
- stable_major_versions = [SplitVersion(version)[0] for _, version, channel, _
+ stable_major_versions = [GetMajorVersion(version) for _, version, channel, _
in self.versions_to_update if channel == 'stable']
# Add 0 in case there are no stable versions.
max_stable_version = max([0] + stable_major_versions)
@@ -697,7 +688,7 @@ class Updater(object):
bundle.MergeWithBundle(platform_bundle)
# Fix the stability and recommended values
- major_version = SplitVersion(version)[0]
+ major_version = GetMajorVersion(version)
if major_version < max_stable_version:
bundle.stability = 'post_stable'
else:
@@ -832,7 +823,8 @@ def Run(delegate, platforms, extra_archives, fixed_bundle_versions=None):
try:
if bundle.name == BIONIC_CANARY_BUNDLE_NAME:
logger.info('>>> Looking for most recent bionic_canary...')
- version_finder = VersionFinder(delegate, platforms, extra_archives,
+ # Ignore extra_archives on bionic; There is no naclports bundle yet.
+ version_finder = VersionFinder(delegate, platforms, None,
is_bionic=True)
version, channel, archives = version_finder.GetMostRecentSharedCanary()
elif bundle.name == CANARY_BUNDLE_NAME:
@@ -857,9 +849,8 @@ def Run(delegate, platforms, extra_archives, fixed_bundle_versions=None):
# version may not be in the history.)
version = fixed_bundle_versions[bundle.name]
logger.info('Fixed bundle version: %s, %s' % (bundle.name, version))
- allow_trunk_revisions = bundle.name == CANARY_BUNDLE_NAME
- archives, missing = version_finder.GetAvailablePlatformArchivesFor(
- version, allow_trunk_revisions)
+ archives, missing = \
+ version_finder.GetAvailablePlatformArchivesFor(version)
if missing:
logger.warn(
'Some archives for version %s of bundle %s don\'t exist: '