Commit 548955a7 authored by binji@chromium.org's avatar binji@chromium.org

[NaCl SDK] update_nacl_manifest: Allow manual updating of a version.

* New argument --bundle-version, can be passed multiple times. The updater will
use the version passed in.
* The updater won't upload a manifest if it hasn't changed.
* The updater won't rollback a bundle (i.e. if the automatically determined
  revision is older, it will keep the current bundle).
* Switch --dryrun to use difflib instead of system diff.
* Add equality testing for manifest_util.SDKManifest. It already existed for
  Bundles.

BUG=none
R=sbc@chromium.org
TBR=noelallen@chromium.org
NOTRY=true


Review URL: https://chromiumcodereview.appspot.com/11421138

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@170500 0039d316-1c4b-4281-b951-d872f2087c98
parent 18f22867
...@@ -543,6 +543,27 @@ class SDKManifest(object): ...@@ -543,6 +543,27 @@ class SDKManifest(object):
def __str__(self): def __str__(self):
return self.GetDataAsString() return self.GetDataAsString()
def __eq__(self, other):
# Access to protected member _manifest_data of a client class
# pylint: disable=W0212
if (self._manifest_data['manifest_version'] !=
other._manifest_data['manifest_version']):
return False
self_bundle_names = set(b.name for b in self.GetBundles())
other_bundle_names = set(b.name for b in other.GetBundles())
if self_bundle_names != other_bundle_names:
return False
for bundle_name in self_bundle_names:
if self.GetBundle(bundle_name) != other.GetBundle(bundle_name):
return False
return True
def __ne__(self, other):
return not (self == other)
def GetDataAsString(self): def GetDataAsString(self):
"""Returns the current JSON manifest object, pretty-printed""" """Returns the current JSON manifest object, pretty-printed"""
return DictToJSON(self._manifest_data) return DictToJSON(self._manifest_data)
...@@ -136,6 +136,9 @@ class MakeHistory(object): ...@@ -136,6 +136,9 @@ class MakeHistory(object):
class MakeFiles(dict): class MakeFiles(dict):
def AddOnlineManifest(self, manifest_string):
self['naclsdk_manifest2.json'] = manifest_string
def Add(self, bundle, add_archive_for_os=OS_MLW, add_json_for_os=OS_MLW): def Add(self, bundle, add_archive_for_os=OS_MLW, add_json_for_os=OS_MLW):
for archive in bundle.GetArchives(): for archive in bundle.GetArchives():
if not archive.host_os in add_archive_for_os: if not archive.host_os in add_archive_for_os:
...@@ -162,6 +165,7 @@ class TestDelegate(update_nacl_manifest.Delegate): ...@@ -162,6 +165,7 @@ class TestDelegate(update_nacl_manifest.Delegate):
self.files = files self.files = files
self.version_mapping = version_mapping self.version_mapping = version_mapping
self.dryrun = 0 self.dryrun = 0
self.called_gsutil_cp = False
def GetRepoManifest(self): def GetRepoManifest(self):
return self.manifest return self.manifest
...@@ -187,6 +191,7 @@ class TestDelegate(update_nacl_manifest.Delegate): ...@@ -187,6 +191,7 @@ class TestDelegate(update_nacl_manifest.Delegate):
return self.files[path] return self.files[path]
def GsUtil_cp(self, src, dest, stdin=None): def GsUtil_cp(self, src, dest, stdin=None):
self.called_gsutil_cp = True
dest_path = GetPathFromGsUrl(dest) dest_path = GetPathFromGsUrl(dest)
if src == '-': if src == '-':
self.files[dest_path] = stdin self.files[dest_path] = stdin
...@@ -237,8 +242,8 @@ class TestUpdateManifest(unittest.TestCase): ...@@ -237,8 +242,8 @@ class TestUpdateManifest(unittest.TestCase):
self.delegate = TestDelegate(self.manifest, self.history.history, self.delegate = TestDelegate(self.manifest, self.history.history,
self.files, self.version_mapping) self.files, self.version_mapping)
def _Run(self, host_oses): def _Run(self, host_oses, fixed_bundle_versions=None):
update_nacl_manifest.Run(self.delegate, host_oses) update_nacl_manifest.Run(self.delegate, host_oses, fixed_bundle_versions)
def _HasUploadedManifest(self): def _HasUploadedManifest(self):
return 'naclsdk_manifest2.json' in self.files return 'naclsdk_manifest2.json' in self.files
...@@ -275,12 +280,12 @@ class TestUpdateManifest(unittest.TestCase): ...@@ -275,12 +280,12 @@ class TestUpdateManifest(unittest.TestCase):
self.manifest = MakeManifest(B18_0_1025_163_R1_MLW) self.manifest = MakeManifest(B18_0_1025_163_R1_MLW)
self._MakeDelegate() self._MakeDelegate()
self._Run(OS_MLW) self._Run(OS_MLW)
self.assertEqual(self._HasUploadedManifest(), False) self.assertFalse(self._HasUploadedManifest())
# Add another bundle, make sure it still doesn't update # Add another bundle, make sure it still doesn't update
self.manifest.AddBundle(B19_0_1084_41_R1_MLW) self.manifest.AddBundle(B19_0_1084_41_R1_MLW)
self._Run(OS_MLW) self._Run(OS_MLW)
self.assertEqual(self._HasUploadedManifest(), False) self.assertFalse(self._HasUploadedManifest())
def testSimpleUpdate(self): def testSimpleUpdate(self):
self.manifest = MakeManifest(B18_R1_NONE) self.manifest = MakeManifest(B18_R1_NONE)
...@@ -385,7 +390,7 @@ class TestUpdateManifest(unittest.TestCase): ...@@ -385,7 +390,7 @@ class TestUpdateManifest(unittest.TestCase):
B18_0_1025_163_R1_MLW) B18_0_1025_163_R1_MLW)
self._MakeDelegate() self._MakeDelegate()
self._Run(OS_MLW) self._Run(OS_MLW)
self.assertEqual(self._HasUploadedManifest(), False) self.assertFalse(self._HasUploadedManifest())
def testUpdateWithHistoryWithExtraneousPlatforms(self): def testUpdateWithHistoryWithExtraneousPlatforms(self):
self.manifest = MakeManifest(B18_R1_NONE) self.manifest = MakeManifest(B18_R1_NONE)
...@@ -530,6 +535,54 @@ mac,canary,21.0.1156.0,2012-05-30 12:14:21.305090""" ...@@ -530,6 +535,54 @@ mac,canary,21.0.1156.0,2012-05-30 12:14:21.305090"""
p19_bundle = self.uploaded_manifest.GetBundle(B19_R1_NONE.name) p19_bundle = self.uploaded_manifest.GetBundle(B19_R1_NONE.name)
self.assertEqual(p19_bundle.stability, STABLE) self.assertEqual(p19_bundle.stability, STABLE)
def testDontPushIfNoChange(self):
# Make an online manifest that already has this bundle.
online_manifest = MakeManifest(B18_0_1025_163_R1_MLW)
self.files.AddOnlineManifest(online_manifest.GetDataAsString())
self.manifest = MakeManifest(B18_R1_NONE)
self.history.Add(OS_MLW, DEV, V18_0_1025_163)
self.files.Add(B18_0_1025_163_R1_MLW)
self._MakeDelegate()
self._Run(OS_MLW)
self.assertFalse(self.delegate.called_gsutil_cp)
def testDontPushIfRollback(self):
# Make an online manifest that has a newer bundle
online_manifest = MakeManifest(B18_0_1025_184_R1_MLW)
self.files.AddOnlineManifest(online_manifest.GetDataAsString())
self.manifest = MakeManifest(B18_R1_NONE)
self.history.Add(OS_MLW, DEV, V18_0_1025_163)
self.files.Add(B18_0_1025_163_R1_MLW)
self._MakeDelegate()
self._Run(OS_MLW)
self.assertFalse(self.delegate.called_gsutil_cp)
def testRunWithFixedBundleVersions(self):
self.manifest = MakeManifest(B18_R1_NONE)
self.history.Add(OS_MLW, BETA, V18_0_1025_163)
self.files.Add(B18_0_1025_163_R1_MLW)
self.files.Add(B18_0_1025_184_R1_MLW)
self._MakeDelegate()
self._Run(OS_MLW, [('pepper_18', '18.0.1025.184')])
self._ReadUploadedManifest()
self._AssertUploadedManifestHasBundle(B18_0_1025_184_R1_MLW, BETA)
self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
def testRunWithMissingFixedBundleVersions(self):
self.manifest = MakeManifest(B18_R1_NONE)
self.history.Add(OS_MLW, BETA, V18_0_1025_163)
self.files.Add(B18_0_1025_163_R1_MLW)
self._MakeDelegate()
self._Run(OS_MLW, [('pepper_18', '18.0.1025.184')])
# Nothing should be uploaded if the user gives a missing fixed version.
self.assertFalse(self.delegate.called_gsutil_cp)
class TestUpdateVitals(unittest.TestCase): class TestUpdateVitals(unittest.TestCase):
def setUp(self): def setUp(self):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment