diff options
author | Andras Becsi <andras.becsi@digia.com> | 2014-05-22 20:42:02 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-06-05 00:23:00 +0200 |
commit | 45c0bba8a40bb87a386fad02ca51371a44f475ba (patch) | |
tree | 985f5f885f6aa7aeea8618b8ac3dbd5186ff1fd7 /tools/scripts/patch_upstream.py | |
parent | de850d71e4101249931de42670154eba2517c530 (diff) |
Update ninja and bump Chromium version to 33.0.1750.170
This patch also changes the way we handle our patches.
We'll always take a new snapshot without patching Chromium
and rebase our patches on top of the snapshot. This removes
the need for separate patch files for the ustream repository
since we can use the patches of the snapshot and apply them
on the upstream checkout if we want to use an upstream build.
This makes it easier for us to have branches for the release
and maintain and minimize the number of patches we need on
top of upstream Chromium.
For now a snapshot checkout is needed to be able to prepare
the patches for an upstream build but in future we cold improve
this to fetch the patches from the remote snapshot repository
if needed.
Change-Id: I6280ffbe2d50d25d252734bc76d19bfaaa081637
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'tools/scripts/patch_upstream.py')
-rwxr-xr-x | tools/scripts/patch_upstream.py | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/tools/scripts/patch_upstream.py b/tools/scripts/patch_upstream.py new file mode 100755 index 000000000..e3af0ce5f --- /dev/null +++ b/tools/scripts/patch_upstream.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +############################################################################# +# +# Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +# Contact: http://www.qt-project.org/legal +# +# This file is part of the QtWebEngine module of the Qt Toolkit. +# +# $QT_BEGIN_LICENSE:LGPL$ +# 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 Digia. For licensing terms and +# conditions see http://qt.digia.com/licensing. For further information +# use the contact form at http://qt.digia.com/contact-us. +# +# GNU Lesser General Public License Usage +# Alternatively, this file may be used under the terms of the GNU Lesser +# General Public License version 2.1 as published by the Free Software +# Foundation and appearing in the file LICENSE.LGPL included in the +# packaging of this file. Please review the following information to +# ensure the GNU Lesser General Public License version 2.1 requirements +# will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +# +# In addition, as a special exception, Digia gives you certain additional +# rights. These rights are described in the Digia Qt LGPL Exception +# version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +# +# GNU General Public License Usage +# Alternatively, this file may be used under the terms of the GNU +# General Public License version 3.0 as published by the Free Software +# Foundation and appearing in the file LICENSE.GPL included in the +# packaging of this file. Please review the following information to +# ensure the GNU General Public License version 3.0 requirements will be +# met: http://www.gnu.org/copyleft/gpl.html. +# +# +# $QT_END_LICENSE$ +# +############################################################################# + +import glob +import os +import re +import shutil +import subprocess +import sys + +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') + +sys.path.append(os.path.join(qtwebengine_root, 'tools', 'scripts')) +import version_resolver as resolver + +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) + subprocess.call(['git', 'format-patch', '-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 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=' + resolver.currentVersion()]) + os.chdir(oldCwd) + return line.split(' ')[0] + +os.chdir(os.path.join(upstream_src_dir, 'chromium')) + +if not len(findSnapshotBaselineSha1()): + sys.exit('\n-- missing chromium snapshot patches, try running init-repository.py w/o options first --') + +patches = preparePatchesFromSnapshot() +for path in patches: + leading = path.count('/') + 2 + + if path.startswith('chromium'): + os.chdir(os.path.join(upstream_src_dir, path)) + else: + os.chdir(os.path.join(upstream_src_dir, 'chromium', path)) + leading += 1 + + print('\n-- entering '+ os.getcwd() + ' --') + + # Sort the patches to be able to apply them in order + patch_list = sorted(patches[path]) + for patch in patch_list: + error = subprocess.call(['git', 'am', '-p' + str(leading), patch]) + if error != 0: + sys.exit('-- git am ' + patch + ' failed in ' + os.getcwd() + ' --') + +print('\n-- done --') + |