SHA256
1
0
forked from pool/rpmlint

Accepting request 79416 from devel:openSUSE:Factory:rpmlint

- check for versioned dependency on python(abi) (bnc#659068)

- fix stripping of unknown polkit suffixes (bnc#711485)

- update to 1.3:
  * Add --rawout option
  * Warn about non-ghost files in /var/run and /var/lock
  * Fix setting message type for reasons with badness threshold defined 
  * Use "declare -F" instead of "type" to check if a bash function exists.

OBS-URL: https://build.opensuse.org/request/show/79416
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/rpmlint?expand=0&rev=139
This commit is contained in:
Sascha Peilicke 2011-08-22 14:00:03 +00:00 committed by Git OBS Bridge
commit ada6d9c7f5
13 changed files with 79 additions and 270 deletions

View File

@ -21,12 +21,12 @@ class PolkitCheck(AbstractCheck.AbstractCheck):
AbstractCheck.AbstractCheck.__init__(self, "CheckPolkitPrivs") AbstractCheck.AbstractCheck.__init__(self, "CheckPolkitPrivs")
self.privs = {} self.privs = {}
for file in POLKIT_PRIVS_FILES: for filename in POLKIT_PRIVS_FILES:
if os.path.exists(file): if os.path.exists(filename):
self._parsefile(file) self._parsefile(filename)
def _parsefile(self,file): def _parsefile(self,filename):
for line in open(file): for line in file(filename):
line = line.split('#')[0].split('\n')[0] line = line.split('#')[0].split('\n')[0]
if len(line): if len(line):
line = re.split(r'\s+', line) line = re.split(r'\s+', line)
@ -54,12 +54,15 @@ class PolkitCheck(AbstractCheck.AbstractCheck):
if not bn in POLKIT_PRIVS_WHITELIST: if not bn in POLKIT_PRIVS_WHITELIST:
printError(pkg, "polkit-unauthorized-file", f) printError(pkg, "polkit-unauthorized-file", f)
if bn.endswith(".restrictive") or bn.endswith(".standard") or bn.endswith(".relaxed"):
bn = bn.split('.')[0] bn = bn.split('.')[0]
if not bn in permfiles: if not bn in permfiles:
permfiles[bn] = 1 permfiles[bn] = 1
for f in permfiles: for f in permfiles:
f = pkg.dirName() + "/etc/polkit-default-privs.d/" + f f = pkg.dirName() + "/etc/polkit-default-privs.d/" + f
if os.path.exists(f+".restrictive"): if os.path.exists(f+".restrictive"):
self._parsefile(f + ".restrictive") self._parsefile(f + ".restrictive")
elif os.path.exists(f+".standard"): elif os.path.exists(f+".standard"):
@ -69,6 +72,7 @@ class PolkitCheck(AbstractCheck.AbstractCheck):
else: else:
self._parsefile(f) self._parsefile(f)
for f in files: for f in files:
if f in pkg.ghostFiles(): if f in pkg.ghostFiles():
continue continue

View File

@ -1,8 +1,6 @@
Index: Filter.py --- Filter.py
===================================================================
--- Filter.py.orig
+++ Filter.py +++ Filter.py
@@ -22,13 +22,8 @@ _diagnostic = list() @@ -24,12 +24,8 @@
_badness_score = 0 _badness_score = 0
printed_messages = { "I": 0, "W": 0, "E": 0 } printed_messages = { "I": 0, "W": 0, "E": 0 }
@ -10,7 +8,6 @@ Index: Filter.py
- def __print(s): - def __print(s):
- print(s) - print(s)
-else: -else:
- import locale
- def __print(s): - def __print(s):
- print(s.encode(locale.getpreferredencoding(), "replace")) - print(s.encode(locale.getpreferredencoding(), "replace"))
+def __print(s): +def __print(s):

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:59d18da1b8b07eda9079f861fe3ef1176b8bcc32e9f81a56ecfa80e92e6fbe46
size 114648

3
rpmlint-1.3.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:46ca95b4af224a5923739b6eed8224f18235913136e5004838e5312b4bada0f7
size 115772

View File

@ -1,73 +0,0 @@
From 6eedb2e510533cb196f37803b78ca64c0d0a77d4 Mon Sep 17 00:00:00 2001
From: scop <scop@9bc8b190-ac0f-0410-8968-dc7d1f502856>
Date: Sun, 15 May 2011 09:05:04 +0000
Subject: [PATCH] Check for position independent executables (based on patch by Ludwig Nussel).
git-svn-id: http://rpmlint.zarb.org/svn/trunk@1865 9bc8b190-ac0f-0410-8968-dc7d1f502856
---
BinariesCheck.py | 10 ++++++++++
config | 4 ++++
2 files changed, 14 insertions(+), 0 deletions(-)
Index: rpmlint-1.2/BinariesCheck.py
===================================================================
--- rpmlint-1.2.orig/BinariesCheck.py
+++ rpmlint-1.2/BinariesCheck.py
@@ -198,6 +198,8 @@ so_regex = re.compile('/lib(64)?/[^/]+\.
validso_regex = re.compile('(\.so\.\d+(\.\d+)*|\d\.so)$')
sparc_regex = re.compile('SPARC32PLUS|SPARC V9|UltraSPARC')
system_lib_paths = Config.getOption('SystemLibPaths', DEFAULT_SYSTEM_LIB_PATHS)
+pie_exec_re = Config.getOption('PieExecutables')
+if pie_exec_re: pie_exec_re = re.compile(pie_exec_re)
usr_lib_regex = re.compile('^/usr/lib(64)?/')
bin_regex = re.compile('^(/usr(/X11R6)?)?/s?bin/')
soversion_regex = re.compile('.*?([0-9][.0-9]*)\\.so|.*\\.so\\.([0-9][.0-9]*).*')
@@ -386,6 +388,11 @@ class BinariesCheck(AbstractCheck.Abstra
if not is_exec and not is_shobj:
continue
+ if is_shobj and not is_exec and '.so' not in fname and \
+ bin_regex.search(fname):
+ # pkgfile.magic does not contain "executable" for PIEs
+ is_exec = True
+
if is_exec:
if bin_regex.search(fname):
@@ -394,6 +401,10 @@ class BinariesCheck(AbstractCheck.Abstra
if ocaml_mixed_regex.search(bin_info.tail):
printWarning(pkg, 'ocaml-mixed-executable', fname)
+ if not is_shobj and pie_exec_re and pie_exec_re.search(fname):
+ printError(pkg, 'non-position-independent-executable',
+ fname)
+
if bin_info.readelf_error:
continue
@@ -612,6 +623,10 @@ http://bugs.debian.org/cgi-bin/bugreport
project settings. So there's normally no need to manually strip binaries.
Left over unstripped binaries could therefore indicate a bug in the automatic
stripping process.''',
+
+'non-position-independent-executable',
+'''This executable must be position independent. Check that it is built with
+-fPIE/-fpie in compiler flags and -pie in linker flags.''',
)
# BinariesCheck.py ends here
Index: rpmlint-1.2/config
===================================================================
--- rpmlint-1.2.orig/config
+++ rpmlint-1.2/config
@@ -130,6 +130,10 @@ from Config import *
# Type: tuple of strings, default: see DEFAULT_SYSTEM_LIB_PATHS in BinariesCheck
#setOption("SystemLibPaths", ('/lib', '/lib64', '/usr/lib', '/usr/lib64'))
+# Executables that must be compiled as position independent.
+# Type: regex, default: None
+#setOption("PieExecutables", '^/bin/(ping6?|su)$')
+
# Whether to want default start/stop runlevels specified in init scripts.
# Type: boolean, default: True
#setOption("UseDefaultRunlevels", True)

View File

@ -1,73 +0,0 @@
From 665a612a589e161509de4aeab1486f430cc99e03 Mon Sep 17 00:00:00 2001
From: Ludwig Nussel <ludwig.nussel@suse.de>
Date: Tue, 31 May 2011 13:21:27 +0200
Subject: [PATCH] add option to disable /var/lock/subsys check
openSUSE for example doesn't use /var/lock/subsys
---
InitScriptCheck.py | 11 +++++++++--
config | 4 ++++
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/InitScriptCheck.py b/InitScriptCheck.py
index ba7952e..167385b 100644
--- a/InitScriptCheck.py
+++ b/InitScriptCheck.py
@@ -29,6 +29,7 @@ dot_in_name_regex = re.compile('.*\..*')
use_deflevels = Config.getOption('UseDefaultRunlevels', True)
lsb_tags_regex = re.compile('^# ([\w-]+):\s*(.*?)\s*$')
lsb_cont_regex = re.compile('^#(?:\t| )(.*?)\s*$')
+use_subsys = Config.getOption('UseVarLockSubsys', True)
LSB_KEYWORDS = ('Provides', 'Required-Start', 'Required-Stop', 'Should-Start',
'Should-Stop', 'Default-Start', 'Default-Stop',
@@ -152,7 +153,7 @@ class InitScriptCheck(AbstractCheck.AbstractCheck):
if res:
subsys_regex_found = True
name = res.group(1)
- if name != basename:
+ if use_subsys and name != basename:
error = True
if name[0] == '$':
value = Pkg.substitute_shell_vars(name, content_str)
@@ -181,8 +182,10 @@ class InitScriptCheck(AbstractCheck.AbstractCheck):
printWarning(pkg, 'no-reload-entry', fname)
if not chkconfig_content_found:
printError(pkg, 'no-chkconfig-line', fname)
- if not subsys_regex_found:
+ if not subsys_regex_found and use_subsys:
printError(pkg, 'subsys-not-used', fname)
+ elif subsys_regex_found and not use_subsys:
+ printError(pkg, 'subsys-unsupported', fname)
goodnames = (pkg.name.lower(), pkg.name.lower() + 'd')
if len(initscript_list) == 1 and initscript_list[0] not in goodnames:
@@ -238,6 +241,10 @@ reasons, most services should not be. Use "-" as the default runlevel in the
init script's "chkconfig:" line and/or remove the "Default-Start:" LSB keyword
to fix this if appropriate for this service.''',
+'subsys-unsupported',
+'''The init script uses /var/lock/subsys which is not supported by
+this distribution.''',
+
'subsys-not-used',
'''While your daemon is running, you have to put a lock file in
/var/lock/subsys/. To see an example, look at this directory on your
diff --git a/config b/config
index 8ed05d4..5631260 100644
--- a/config
+++ b/config
@@ -162,6 +162,10 @@ from Config import *
# Type: boolean, default: True
#setOption("UseVersionInChangelog", True)
+# Whether init scripts must use /var/lock/subsys
+# Type: boolean, default: True
+#setOption("UseVarLockSubsys", True)
+
# Architecture dependent paths in which packages are allowed to install files
# even if they are all non-binary.
# Type: regexp, default: see BinariesCheck
--
1.7.3.4

View File

@ -1,23 +0,0 @@
From 75b89dd25fc1d653131f27702030b8b829759317 Mon Sep 17 00:00:00 2001
From: scop <scop@9bc8b190-ac0f-0410-8968-dc7d1f502856>
Date: Wed, 11 May 2011 16:25:39 +0000
Subject: [PATCH] Fix setting message type for reasons with badness threshold defined (Ludwig Nussel).
git-svn-id: http://rpmlint.zarb.org/svn/trunk@1862 9bc8b190-ac0f-0410-8968-dc7d1f502856
---
Filter.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
Index: rpmlint-1.2/Filter.py
===================================================================
--- rpmlint-1.2.orig/Filter.py
+++ rpmlint-1.2/Filter.py
@@ -44,7 +44,7 @@ def _print(msgtype, pkg, reason, details
badness = Config.badness(reason)
# anything with badness is an error
if badness:
- msgtype == 'E'
+ msgtype = 'E'
# errors without badness become warnings
elif msgtype == 'E':
msgtype = 'W'

View File

@ -1,3 +1,22 @@
-------------------------------------------------------------------
Sat Aug 20 02:19:29 CEST 2011 - dmueller@suse.de
- check for versioned dependency on python(abi) (bnc#659068)
-------------------------------------------------------------------
Fri Aug 19 18:36:04 CEST 2011 - dmueller@suse.de
- fix stripping of unknown polkit suffixes (bnc#711485)
-------------------------------------------------------------------
Fri Aug 12 18:07:43 CEST 2011 - dmueller@suse.de
- update to 1.3:
* Add --rawout option
* Warn about non-ghost files in /var/run and /var/lock
* Fix setting message type for reasons with badness threshold defined
* Use "declare -F" instead of "type" to check if a bash function exists.
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Aug 12 17:57:35 CEST 2011 - dmueller@suse.de Fri Aug 12 17:57:35 CEST 2011 - dmueller@suse.de

View File

@ -22,8 +22,8 @@
Name: rpmlint Name: rpmlint
BuildRequires: rpm-python xz BuildRequires: rpm-python xz
Summary: Rpm correctness checker Summary: Rpm correctness checker
Version: 1.2 Version: 1.3
Release: 23 Release: 1
Source0: http://rpmlint.zarb.org/download/rpmlint-%{version}.tar.xz Source0: http://rpmlint.zarb.org/download/rpmlint-%{version}.tar.xz
Source1: config Source1: config
Source1001: config.in Source1001: config.in
@ -72,8 +72,6 @@ Patch7: suse-pkg-config-check.diff
Patch8: suse-binarieschecks.diff Patch8: suse-binarieschecks.diff
Patch9: no-doc-for-lib.diff Patch9: no-doc-for-lib.diff
Patch10: add-scoring-support.diff Patch10: add-scoring-support.diff
# accepted upstream
Patch11: suse-file-var-run.diff
Patch12: usr-arch.diff Patch12: usr-arch.diff
Patch13: script-interpreter-only-for-exec-scripts.diff Patch13: script-interpreter-only-for-exec-scripts.diff
Patch14: sourced-dirs.diff Patch14: sourced-dirs.diff
@ -126,11 +124,7 @@ Patch85: suse-changelog.patch
Patch86: suse-rclink-check.diff Patch86: suse-rclink-check.diff
# accepted upstream # accepted upstream
Patch88: suse-speccheck-utf8.diff Patch88: suse-speccheck-utf8.diff
# accepted upstream Patch89: suse-python-abi-check.diff
Patch89: rpmlint-pie.diff
# accepted upstream
Patch90: rpmlint-typo.diff
Patch91: rpmlint-subsys.diff
%py_requires %py_requires
%description %description
@ -146,7 +140,6 @@ Authors:
%prep %prep
%setup -q -n rpmlint-%{version} %setup -q -n rpmlint-%{version}
%patch91 -p1
%patch0 %patch0
%patch1 %patch1
%patch2 %patch2
@ -158,7 +151,6 @@ Authors:
%patch8 %patch8
%patch9 %patch9
#%patch10 #%patch10
%patch11 -p1
%patch12 %patch12
%patch13 %patch13
%patch14 %patch14
@ -211,8 +203,7 @@ Authors:
%patch86 %patch86
#patch87 -p1 #patch87 -p1
%patch88 %patch88
%patch89 -p1 %patch89
%patch90 -p1
cp -p %{SOURCE1} . cp -p %{SOURCE1} .
cp -p %{SOURCE2} . cp -p %{SOURCE2} .
cp -p %{SOURCE3} . cp -p %{SOURCE3} .

View File

@ -1,6 +1,4 @@
Index: BinariesCheck.py --- BinariesCheck.py
===================================================================
--- BinariesCheck.py.orig
+++ BinariesCheck.py +++ BinariesCheck.py
@@ -10,13 +10,15 @@ @@ -10,13 +10,15 @@
@ -19,7 +17,7 @@ Index: BinariesCheck.py
DEFAULT_SYSTEM_LIB_PATHS = ( DEFAULT_SYSTEM_LIB_PATHS = (
@@ -37,6 +39,9 @@ class BinaryInfo: @@ -37,6 +39,9 @@
unused_regex = re.compile('^\s+(\S+)') unused_regex = re.compile('^\s+(\S+)')
exit_call_regex = re.compile('\s+FUNC\s+.*?\s+(_?exit(?:@\S+)?)(?:\s|$)') exit_call_regex = re.compile('\s+FUNC\s+.*?\s+(_?exit(?:@\S+)?)(?:\s|$)')
fork_call_regex = re.compile('\s+FUNC\s+.*?\s+(fork(?:@\S+)?)(?:\s|$)') fork_call_regex = re.compile('\s+FUNC\s+.*?\s+(fork(?:@\S+)?)(?:\s|$)')
@ -29,7 +27,7 @@ Index: BinariesCheck.py
def __init__(self, pkg, path, file, is_ar, is_shlib): def __init__(self, pkg, path, file, is_ar, is_shlib):
self.readelf_error = False self.readelf_error = False
@@ -50,7 +55,10 @@ class BinaryInfo: @@ -50,7 +55,10 @@
self.stack = False self.stack = False
self.exec_stack = False self.exec_stack = False
self.exit_calls = [] self.exit_calls = []
@ -40,7 +38,7 @@ Index: BinariesCheck.py
self.tail = '' self.tail = ''
is_debug = path.endswith('.debug') is_debug = path.endswith('.debug')
@@ -93,6 +101,11 @@ class BinaryInfo: @@ -93,6 +101,11 @@
self.exec_stack = True self.exec_stack = True
continue continue
@ -52,7 +50,7 @@ Index: BinariesCheck.py
if is_shlib: if is_shlib:
r = BinaryInfo.exit_call_regex.search(l) r = BinaryInfo.exit_call_regex.search(l)
if r: if r:
@@ -103,6 +116,14 @@ class BinaryInfo: @@ -103,6 +116,14 @@
fork_called = True fork_called = True
continue continue
@ -67,7 +65,7 @@ Index: BinariesCheck.py
if self.non_pic: if self.non_pic:
self.non_pic = 'TEXTREL' in res[1] self.non_pic = 'TEXTREL' in res[1]
@@ -272,13 +293,26 @@ class BinariesCheck(AbstractCheck.Abstra @@ -274,13 +295,26 @@
continue continue
# stripped ? # stripped ?
@ -95,7 +93,7 @@ Index: BinariesCheck.py
if is_shlib: if is_shlib:
has_lib = True has_lib = True
@@ -328,6 +362,10 @@ class BinariesCheck(AbstractCheck.Abstra @@ -330,6 +364,10 @@
for ec in bin_info.exit_calls: for ec in bin_info.exit_calls:
printWarning(pkg, 'shared-lib-calls-exit', fname, ec) printWarning(pkg, 'shared-lib-calls-exit', fname, ec)
@ -106,7 +104,7 @@ Index: BinariesCheck.py
# rpath ? # rpath ?
if bin_info.rpath: if bin_info.rpath:
for p in bin_info.rpath: for p in bin_info.rpath:
@@ -513,6 +551,14 @@ with the intended shared libraries only. @@ -524,6 +562,14 @@
'ldd-failed', 'ldd-failed',
'''Executing ldd on this file failed, all checks could not be run.''', '''Executing ldd on this file failed, all checks could not be run.''',
@ -121,7 +119,7 @@ Index: BinariesCheck.py
'executable-stack', 'executable-stack',
'''The binary declares the stack as executable. Executable stack is usually an '''The binary declares the stack as executable. Executable stack is usually an
error as it is only needed if the code contains GCC trampolines or similar error as it is only needed if the code contains GCC trampolines or similar
@@ -525,6 +571,10 @@ don\'t define a proper .note.GNU-stack s @@ -536,6 +582,10 @@
make the stack executable. Usual suspects include use of a non-GNU linker or make the stack executable. Usual suspects include use of a non-GNU linker or
an old GNU linker version.''', an old GNU linker version.''',
@ -132,16 +130,16 @@ Index: BinariesCheck.py
'shared-lib-calls-exit', 'shared-lib-calls-exit',
'''This library package calls exit() or _exit(), probably in a non-fork() '''This library package calls exit() or _exit(), probably in a non-fork()
context. Doing so from a library is strongly discouraged - when a library context. Doing so from a library is strongly discouraged - when a library
@@ -542,6 +592,12 @@ form, make sure that rpmbuild does not s @@ -554,6 +604,12 @@
that use prelink, make sure that prelink does not strip it either, usually by
placing a blacklist file in /etc/prelink.conf.d. For more information, see placing a blacklist file in /etc/prelink.conf.d. For more information, see
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=256900#49''', http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=256900#49''',
+
+'unstripped-binary-or-object', +'unstripped-binary-or-object',
+'''stripping debug info from binaries happens automatically according to global +'''stripping debug info from binaries happens automatically according to global
+project settings. So there's normally no need to manually strip binaries. +project settings. So there's normally no need to manually strip binaries.
+Left over unstripped binaries could therefore indicate a bug in the automatic +Left over unstripped binaries could therefore indicate a bug in the automatic
+stripping process.''', +stripping process.''',
) +
'non-position-independent-executable',
# BinariesCheck.py ends here '''This executable must be position independent. Check that it is built with
-fPIE/-fpie in compiler flags and -pie in linker flags.''',

View File

@ -1,44 +0,0 @@
From d685ddb42daa5d3b122c0486cc1d4f2dde6c466f Mon Sep 17 00:00:00 2001
From: scop <scop@9bc8b190-ac0f-0410-8968-dc7d1f502856>
Date: Fri, 13 May 2011 17:10:53 +0000
Subject: [PATCH] Warn about non-ghost files in /var/run and /var/lock (based on patch from Ludwig Nussel).
git-svn-id: http://rpmlint.zarb.org/svn/trunk@1863 9bc8b190-ac0f-0410-8968-dc7d1f502856
---
FilesCheck.py | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
Index: rpmlint-1.2/FilesCheck.py
===================================================================
--- rpmlint-1.2.orig/FilesCheck.py
+++ rpmlint-1.2/FilesCheck.py
@@ -915,6 +915,12 @@ class FilesCheck(AbstractCheck.AbstractC
printError(pkg, 'dir-or-file-in-usr-local', f)
elif f.startswith('/var/local/'):
printError(pkg, 'dir-or-file-in-var-local', f)
+ elif f.startswith('/var/run/'):
+ if f not in ghost_files:
+ printWarning(pkg, 'non-ghost-in-var-run', f)
+ elif f.startswith('/var/lock/'):
+ if f not in ghost_files:
+ printWarning(pkg, 'non-ghost-in-var-lock', f)
elif sub_bin_regex.search(f):
printError(pkg, 'subdir-in-bin', f)
elif f.startswith('/home/'):
@@ -1491,6 +1497,16 @@ for packages to install files in this di
'''A file in the package is located in /var/local. It's not permitted
for packages to install files in this directory.''',
+'non-ghost-in-var-run',
+'''A file or directory in the package is located in /var/run. Files installed
+in this directory should be marked as %ghost and created at runtime to work
+properly in tmpfs /var/run setups.''',
+
+'non-ghost-in-var-lock',
+'''A file or directory in the package is located in /var/lock. Files installed
+in this directory should be marked as %ghost and created at runtime to work
+properly in tmpfs /var/lock setups.''',
+
'subdir-in-bin',
'''The package contains a subdirectory in /usr/bin. It's not permitted to
create a subdir there. Create it in /usr/lib/ instead.''',

View File

@ -1,8 +1,6 @@
Index: Config.py --- Config.py
===================================================================
--- Config.py.orig
+++ Config.py +++ Config.py
@@ -116,12 +116,23 @@ def getOption(name, default = ""): @@ -104,11 +104,23 @@
_filters = [] _filters = []
_filters_re = None _filters_re = None
@ -13,12 +11,9 @@ Index: Config.py
+_filters_except_re = None +_filters_except_re = None
+ +
def addFilter(s): def addFilter(s):
global _filters
global _filters_re global _filters_re
+ global _filters_except + global _filters_except
+
- _filters.append(s)
- _filters_re = None
+ if len(_filters_except): + if len(_filters_except):
+ _filters.append(s) + _filters.append(s)
+ _filters_re = None + _filters_re = None
@ -26,9 +21,12 @@ Index: Config.py
+ _filters_non_except.append(s) + _filters_non_except.append(s)
+ _filters_non_except_re = None + _filters_non_except_re = None
- _filters.append(s)
- _filters_re = None
def removeFilter(s): def removeFilter(s):
global _filters global _filters_re
@@ -137,8 +148,14 @@ def removeFilter(s): @@ -123,19 +135,38 @@
_scoring = {} _scoring = {}
def setBadness(s, score): def setBadness(s, score):
@ -43,9 +41,8 @@ Index: Config.py
def badness(s): def badness(s):
return _scoring.get(s, 0) return _scoring.get(s, 0)
@@ -146,11 +163,24 @@ _non_named_group_re = re.compile('[^\\]( _non_named_group_re = re.compile('[^\\](\()[^:]')
def isFiltered(s): def isFiltered(s):
global _filters
global _filters_re global _filters_re
+ global _filters_except + global _filters_except
+ global _filters_except_re + global _filters_except_re
@ -72,7 +69,7 @@ Index: Config.py
_filters_re = '(?:' + _filters[0] + ')' _filters_re = '(?:' + _filters[0] + ')'
for idx in range(1, len(_filters)): for idx in range(1, len(_filters)):
@@ -162,9 +192,27 @@ def isFiltered(s): @@ -147,9 +178,27 @@
_filters_re = _filters_re + '|(?:' + _filters[idx] +')' _filters_re = _filters_re + '|(?:' + _filters[idx] +')'
_filters_re = re.compile(_filters_re) _filters_re = re.compile(_filters_re)

View File

@ -0,0 +1,16 @@
--- FilesCheck.py
+++ FilesCheck.py
@@ -664,8 +664,11 @@
if res and not (pkg.check_versioned_dep('python-base',
res.group(1)) or
pkg.check_versioned_dep('python',
- res.group(1))):
- printError(pkg, 'no-dependency-on', 'python-base',
+ res.group(1)) or
+ pkg.check_versioned_dep('python(abi)',
+ res.group(1))
+ ):
+ printError(pkg, 'no-dependency-on', 'python(abi)',
res.group(1))
python_dep_error = True