summaryrefslogtreecommitdiffstats
path: root/tools/scripts/check_patches.py
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-07-02 11:32:56 +0200
committerAndras Becsi <andras.becsi@digia.com>2014-07-03 13:14:36 +0200
commit5317069f3d0d27ed6192a41b3f7b7e6b74dfbbed (patch)
tree50e9e990fa543c715bab9dce2bfd2003b30f867a /tools/scripts/check_patches.py
parent24532f29b6d215211a6d77ca867a08def3bec4ad (diff)
tools: add check_patches.py script for checking patch annotations
This script should be ran whenever adding new patches to our chromium snapshot and makes sure we keep the upstream build functional. Having clean patches is beneficial to keep it possible to upstream patches to the Chromium project, and to keep an overview of our changes. An annotation is not needed if the patch is adding files to the chromium snapshot that were removed by take_snapshot.py, thus are already present in the upstream repository. In these cases the non-annotated patch will be ignored by the scripts. Change-Id: I46605c559825d9da2653036e9a12a2a5730330a0 Reviewed-by: Michael Bruning <michael.bruning@digia.com>
Diffstat (limited to 'tools/scripts/check_patches.py')
-rwxr-xr-xtools/scripts/check_patches.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/tools/scripts/check_patches.py b/tools/scripts/check_patches.py
new file mode 100755
index 00000000..93e8c426
--- /dev/null
+++ b/tools/scripts/check_patches.py
@@ -0,0 +1,108 @@
+#!/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
+import git_submodule as GitSubmodule
+
+target_dir = os.path.join(upstream_src_dir, 'chromium')
+os.chdir(target_dir)
+chromium = GitSubmodule.Submodule()
+chromium.path = "chromium"
+submodules = chromium.readSubmodules()
+submodules.append(chromium)
+
+patches = resolver.preparePatchesFromSnapshot()
+errors = {}
+magic_string = '+++ b/chromium/'
+print('-- checking patch annotations --')
+for module in submodules:
+ for path in patches:
+ patch_list = sorted(patches[path])
+ for patch in patch_list:
+ patch_file = os.path.basename(patch)
+ # Check if the annotation points to a valid submodule dir.
+ if path != 'chromium' and not os.path.isdir(path):
+ sys.exit('\nERROR: ' + patch_file + ': specified annotation <' + path + '> is not a valid submodule directory')
+ with open(patch, 'r') as pfile:
+ line_no = 0
+ for line in pfile:
+ line_no = line_no + 1
+ if not line.startswith(magic_string):
+ continue
+ line = line[len(magic_string):]
+ # Check if the annotation matches the files we patch.
+ if (line.startswith(module.path) and module.path != path
+ or
+ path != 'chromium' and module.path == path and not line.startswith(path)):
+ in_submodule = module.path
+
+ if not line.startswith(module.path):
+ in_submodule = 'chromium'
+ if patch_file not in errors:
+ errors[patch_file] = []
+
+ errors[patch_file].append('line ' + str(line_no)
+ + ': annotated with <' + path +'> but patching '
+ + line.strip() + ' in <' + in_submodule + '>')
+
+if not errors:
+ print('-- all good --')
+else:
+ print('-- errors found --\n')
+
+for patch in errors:
+ print(patch + ':')
+ for error in errors[patch]:
+ print('\t' + error)