blob: 2cdc1e3fb5738aff6b17e9abd66fcdbbc4da89b2 [file] [log] [blame]
#!/usr/bin/env python
#############################################################################
##
## Copyright (C) 2016 The Qt Company Ltd.
## Contact: https://www.qt.io/licensing/
##
## This file is part of the QtWebEngine module of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:GPL-EXCEPT$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https://www.qt.io/terms-conditions. For further
## information use the contact form at https://www.qt.io/contact-us.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 3 as published by the Free Software
## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
## included in the packaging of this file. Please review the following
## information to ensure the GNU General Public License requirements will
## be met: https://www.gnu.org/licenses/gpl-3.0.html.
##
## $QT_END_LICENSE$
##
#############################################################################
import glob
import os
import re
import shutil
import subprocess
import sys
import json
import urllib2
import git_submodule as GitSubmodule
chromium_version = '77.0.3865.98'
chromium_branch = '3865'
ninja_version = 'v1.9.0'
json_url = 'http://omahaproxy.appspot.com/all.json'
qtwebengine_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
snapshot_src_dir = os.path.abspath(os.path.join(qtwebengine_root, 'src/3rdparty'))
upstream_src_dir = os.path.abspath(snapshot_src_dir + '_upstream')
submodule_blacklist = [
'third_party/WebKit/LayoutTests/w3c/csswg-test'
, 'third_party/WebKit/LayoutTests/w3c/web-platform-tests'
, 'chrome/tools/test/reference_build/chrome_mac'
, 'chrome/tools/test/reference_build/chrome_linux'
, 'chrome/tools/test/reference_build/chrome_win'
]
sys.path.append(os.path.join(qtwebengine_root, 'tools', 'scripts'))
def currentVersion():
return chromium_version
def currentNinjaVersion():
return ninja_version
def readReleaseChannels():
response = urllib2.urlopen(json_url)
raw_json = response.read().strip()
data = json.loads(raw_json)
channels = {}
for obj in data:
os = obj['os']
channels[os] = []
for ver in obj['versions']:
channels[os].append({ 'channel': ver['channel'], 'version': ver['version'], 'branch': ver['true_branch'] })
return channels
def readSubmodules():
git_deps = subprocess.check_output(['git', 'show', chromium_version +':DEPS'])
parser = GitSubmodule.DEPSParser()
git_submodules = parser.parse(git_deps)
submodule_dict = {}
for sub in git_submodules:
submodule_dict[sub.path] = sub
# Add buildtools submodules
buildtools_deps_file_path = "buildtools/DEPS"
if (os.path.isfile(buildtools_deps_file_path)):
with open(buildtools_deps_file_path, 'r') as buildtools_deps_file:
buildtools_deps = buildtools_deps_file.read()
if buildtools_deps:
buildtools_parser = GitSubmodule.DEPSParser()
buildtools_parser.topmost_supermodule_path_prefix = './buildtools/'
buildtools_submodules = buildtools_parser.parse(buildtools_deps)
for sub in buildtools_submodules:
submodule_dict[sub.path] = sub
# Remove unwanted upstream submodules
for path in submodule_blacklist:
if path in submodule_dict:
del submodule_dict[path]
return submodule_dict.values()
def findSnapshotBaselineSha1():
if not os.path.isdir(snapshot_src_dir):
return ''
oldCwd = os.getcwd()
os.chdir(snapshot_src_dir)
line = subprocess.check_output(['git', 'log', '-n1', '--pretty=oneline', '--grep=' + currentVersion()])
os.chdir(oldCwd)
return line.split(' ')[0]
def preparePatchesFromSnapshot():
oldCwd = os.getcwd()
base_sha1 = findSnapshotBaselineSha1()
if not base_sha1:
sys.exit('-- base sha1 not found in ' + os.getcwd() + ' --')
patches_dir = os.path.join(upstream_src_dir, 'patches')
if os.path.isdir(patches_dir):
shutil.rmtree(patches_dir)
os.mkdir(patches_dir)
os.chdir(snapshot_src_dir)
print('-- preparing patches to ' + patches_dir + ' --')
subprocess.call(['git', 'format-patch', '-q', '-o', patches_dir, base_sha1])
os.chdir(patches_dir)
patches = glob.glob('00*.patch')
# We'll collect the patches for submodules in corresponding lists
patches_dict = {}
for patch in patches:
patch_path = os.path.abspath(patch)
with open(patch, 'r') as pfile:
for line in pfile:
if 'Subject:' in line:
match = re.search('<(.+)>', line)
if match:
submodule = match.group(1)
if submodule not in patches_dict:
patches_dict[submodule] = []
patches_dict[submodule].append(patch_path)
os.chdir(oldCwd)
return patches_dict
def resetUpstream():
oldCwd = os.getcwd()
target_dir = os.path.join(upstream_src_dir, 'chromium')
os.chdir(target_dir)
chromium = GitSubmodule.Submodule()
chromium.path = "."
submodules = chromium.readSubmodules()
submodules.append(chromium)
print('-- resetting upstream submodules in ' + os.path.relpath(target_dir) + ' to baseline --')
for module in submodules:
oldCwd = os.getcwd()
module_path = os.path.abspath(os.path.join(target_dir, module.path))
if not os.path.isdir(module_path):
continue
cwd = os.getcwd()
os.chdir(module_path)
line = subprocess.check_output(['git', 'log', '-n1', '--pretty=oneline', '--grep=-- QtWebEngine baseline --'])
line = line.split(' ')[0]
if line:
subprocess.call(['git', 'reset', '-q', '--hard', line])
os.chdir(cwd)
module.reset()
os.chdir(oldCwd)
print('done.\n')