1# Copyright (C) 2011 Google Inc. All rights reserved. 2# 3# Redistribution and use in source and binary forms, with or without 4# modification, are permitted provided that the following conditions are 5# met: 6# 7# * Redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer. 9# * Redistributions in binary form must reproduce the above 10# copyright notice, this list of conditions and the following disclaimer 11# in the documentation and/or other materials provided with the 12# distribution. 13# * Neither the name of Google Inc. nor the names of its 14# contributors may be used to endorse or promote products derived from 15# this software without specific prior written permission. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29import urllib2 30 31from webkitpy.tool.steps.abstractstep import AbstractStep 32from webkitpy.tool.steps.options import Options 33from webkitpy.common.config import urls 34from webkitpy.common.system.deprecated_logging import log, error 35 36 37class UpdateChromiumDEPS(AbstractStep): 38 # Notice that this method throws lots of exciting exceptions! 39 def _fetch_last_known_good_revision(self): 40 return int(urllib2.urlopen(urls.chromium_lkgr_url).read()) 41 42 def _validate_revisions(self, current_chromium_revision, new_chromium_revision): 43 if new_chromium_revision < current_chromium_revision: 44 log("Current Chromium DEPS revision %s is newer than %s." % (current_chromium_revision, new_chromium_revision)) 45 new_chromium_revision = self._tool.user.prompt("Enter new chromium revision (enter nothing to cancel):\n") 46 try: 47 new_chromium_revision = int(new_chromium_revision) 48 except ValueError, TypeError: 49 new_chromium_revision = None 50 if not new_chromium_revision: 51 error("Unable to update Chromium DEPS") 52 53 54 def run(self, state): 55 # Note that state["chromium_revision"] must be defined, but can be None. 56 new_chromium_revision = state["chromium_revision"] 57 if not new_chromium_revision: 58 new_chromium_revision = self._fetch_last_known_good_revision() 59 60 deps = self._tool.checkout().chromium_deps() 61 current_chromium_revision = deps.read_variable("chromium_rev") 62 self._validate_revisions(current_chromium_revision, new_chromium_revision) 63 log("Updating Chromium DEPS to %s" % new_chromium_revision) 64 deps.write_variable("chromium_rev", new_chromium_revision) 65