15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2011 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Update third_party/WebKit using git.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Under the assumption third_party/WebKit is a clone of git.webkit.org,
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)we can use git commands to make it match the version requested by DEPS.
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)See http://code.google.com/p/chromium/wiki/UsingWebKitGit for details on
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)how to use this.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import logging
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import optparse
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import re
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import subprocess
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import urllib
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def RunGit(command):
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Run a git subcommand, returning its output."""
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # On Windows, use shell=True to get PATH interpretation.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  command = ['git'] + command
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  logging.info(' '.join(command))
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shell = (os.name == 'nt')
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  proc = subprocess.Popen(command, shell=shell, stdout=subprocess.PIPE)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  out = proc.communicate()[0].strip()
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  logging.info('Returned "%s"' % out)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return out
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetOverrideShortBranchName():
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Returns the user-configured override branch name, if any."""
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  override_config_name = 'chromium.sync-branch'
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return RunGit(['config', '--get', override_config_name])
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetGClientBranchName():
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Returns the name of the magic branch that lets us know that DEPS is
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  managing the update cycle."""
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Is there an override branch specified?
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  override_branch_name = GetOverrideShortBranchName()
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not override_branch_name:
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 'refs/heads/gclient' # No override, so return the default branch.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Verify that the branch from config exists.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ref_branch = 'refs/heads/' + override_branch_name
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  current_head = RunGit(['show-ref', '--hash', ref_branch])
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if current_head:
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return ref_branch
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Inform the user about the problem and how to fix it.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print ("The specified override branch ('%s') doesn't appear to exist." %
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         override_branch_name)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print "Please fix your git config value '%s'." % overide_config_name
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sys.exit(1)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetWebKitRev():
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Extract the 'webkit_revision' variable out of DEPS."""
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  locals = {'Var': lambda _: locals["vars"][_],
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'From': lambda *args: None}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  execfile('DEPS', {}, locals)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return locals['vars']['webkit_revision']
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetWebKitRevFromTarball(version):
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Extract the 'webkit_revision' variable out of tarball DEPS."""
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  deps_url = "http://src.chromium.org/svn/releases/" + version + "/DEPS"
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  f = urllib.urlopen(deps_url)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  s = f.read()
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  m = re.search('(?<=/Source@)\w+', s)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return m.group(0)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FindSVNRev(branch_name, target_rev):
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Map an SVN revision to a git hash.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Like 'git svn find-rev' but without the git-svn bits."""
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # We iterate through the commit log looking for "git-svn-id" lines,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # which contain the SVN revision of that commit.  We can stop once
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # we've found our target (or hit a revision number lower than what
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # we're looking for, indicating not found).
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  target_rev = int(target_rev)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # regexp matching the "commit" line from the log.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  commit_re = re.compile(r'^commit ([a-f\d]{40})$')
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # regexp matching the git-svn line from the log.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  git_svn_re = re.compile(r'^\s+git-svn-id: [^@]+@(\d+) ')
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not branch_name:
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    branch_name = 'origin/master'
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd = ['git', 'log', '--no-color', '--first-parent', '--pretty=medium',
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         branch_name]
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  logging.info(' '.join(cmd))
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  log = subprocess.Popen(cmd, shell=(os.name == 'nt'), stdout=subprocess.PIPE)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # Track whether we saw a revision *later* than the one we're seeking.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  saw_later = False
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for line in log.stdout:
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = commit_re.match(line)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match:
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      commit = match.group(1)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      continue
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    match = git_svn_re.match(line)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if match:
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rev = int(match.group(1))
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if rev <= target_rev:
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        log.stdout.close()  # Break pipe.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if rev < target_rev:
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if not saw_later:
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return None  # Can't be sure whether this rev is ok.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          print ("WARNING: r%d not found, so using next nearest earlier r%d" %
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 (target_rev, rev))
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return commit
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else:
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        saw_later = True
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print "Error: reached end of log without finding commit info."
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print "Something has likely gone horribly wrong."
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return None
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def GetRemote():
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  branch = GetOverrideShortBranchName()
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not branch:
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    branch = 'gclient'
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  remote = RunGit(['config', '--get', 'branch.' + branch + '.remote'])
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if remote:
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return remote
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 'origin'
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UpdateGClientBranch(branch_name, webkit_rev, magic_gclient_branch):
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Update the magic gclient branch to point at |webkit_rev|.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Returns: true if the branch didn't need changes."""
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  target = FindSVNRev(branch_name, webkit_rev)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not target:
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "r%s not available; fetching." % webkit_rev
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    subprocess.check_call(['git', 'fetch', GetRemote()],
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          shell=(os.name == 'nt'))
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    target = FindSVNRev(branch_name, webkit_rev)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not target:
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "ERROR: Couldn't map r%s to a git revision." % webkit_rev
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sys.exit(1)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  current = RunGit(['show-ref', '--hash', magic_gclient_branch])
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if current == target:
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return False  # No change necessary.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  subprocess.check_call(['git', 'update-ref', '-m', 'gclient sync',
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         magic_gclient_branch, target],
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         shell=(os.name == 'nt'))
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return True
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def UpdateCurrentCheckoutIfAppropriate(magic_gclient_branch):
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Reset the current gclient branch if that's what we have checked out."""
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  branch = RunGit(['symbolic-ref', '-q', 'HEAD'])
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if branch != magic_gclient_branch:
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "We have now updated the 'gclient' branch, but third_party/WebKit"
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "has some other branch ('%s') checked out." % branch
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "Run 'git checkout gclient' under third_party/WebKit if you want"
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "to switch it to the version requested by DEPS."
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if subprocess.call(['git', 'diff-index', '--exit-code', '--shortstat',
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      'HEAD'], shell=(os.name == 'nt')):
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "Resetting tree state to new revision."
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    subprocess.check_call(['git', 'reset', '--hard'], shell=(os.name == 'nt'))
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main():
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser = optparse.OptionParser()
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option('-v', '--verbose', action='store_true')
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option('-r', '--revision', help="switch to desired revision")
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option('-t', '--tarball', help="switch to desired tarball release")
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser.add_option('-b', '--branch', help="branch name that gclient generate")
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  options, args = parser.parse_args()
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if options.verbose:
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logging.basicConfig(level=logging.INFO)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not os.path.exists('third_party/WebKit/.git'):
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if os.path.exists('third_party/WebKit'):
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "ERROR: third_party/WebKit appears to not be under git control."
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "ERROR: third_party/WebKit could not be found."
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "Did you run this script from the right directory?"
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "See http://code.google.com/p/chromium/wiki/UsingWebKitGit for"
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "setup instructions."
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if options.revision:
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    webkit_rev = options.revision
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if options.tarball:
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print "WARNING: --revision is given, so ignore --tarball"
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if options.tarball:
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      webkit_rev = GetWebKitRevFromTarball(options.tarball)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else:
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      webkit_rev = GetWebKitRev()
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  print 'Desired revision: r%s.' % webkit_rev
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  os.chdir('third_party/WebKit')
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  magic_gclient_branch = GetGClientBranchName()
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  changed = UpdateGClientBranch(options.branch, webkit_rev,
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                magic_gclient_branch)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if changed:
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return UpdateCurrentCheckoutIfAppropriate(magic_gclient_branch)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else:
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print "Already on correct revision."
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sys.exit(main())
222