summaryrefslogtreecommitdiffstats
path: root/tools/scripts/patch_upstream.py
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-05-22 20:42:02 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-06-05 00:23:00 +0200
commit45c0bba8a40bb87a386fad02ca51371a44f475ba (patch)
tree985f5f885f6aa7aeea8618b8ac3dbd5186ff1fd7 /tools/scripts/patch_upstream.py
parentde850d71e4101249931de42670154eba2517c530 (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-xtools/scripts/patch_upstream.py126
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 00000000..e3af0ce5
--- /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 --')
+