From bda5d592a23ae191d5be23bb7c29e1886f8b93af36197f21c48b6a9eeeb16ebe Mon Sep 17 00:00:00 2001 From: Ludwig Nussel Date: Fri, 10 Apr 2015 14:35:46 +0000 Subject: [PATCH] - new versioin 1.6 - add script update_git.sh based on qemu's to simplify importing a patch series from git after rebasing. * Patches dropped: 0001-Python-3-compatibility-tweaks.patch (upstream) 0001-Set-Python-3.4-magic-number-to-3310.patch (upstream) add-scoring-support.diff (different upstream solution) check-buildroot-during-install.diff (need to fix no-cleaning-of-buildroot check upstream) fix-versioned-prereq.diff (was disabled, not sure what it's useful for) ignore-non-readable-in-etc.diff (filtered anyways) locale-support.diff (drop) locale-update.diff (different upstream solution now) more-verbose-lsb-check.diff (drop) perl-versioned-rpath-deps.diff (upstream) rpmlint-1.5-disallow-var-run-and-var-lock.diff (upstream) rpmlint-1.5-Fix-setgroups-error-name.diff (upstream) rpmlint-decode-fix.diff (different upstream solution) rpmlint-fix-unexpanded-macros-for-array-values.patch (different upstream solution) stricter-tags-check.diff (merged in weak deps and check-for-self-provides.diff) suppress-for-perl-python.diff (use filter instead) suse-binary-info-compile-opts.diff (drop) suse-changelog.patch (change config instead) suse-mono-deps-checks.diff (useful?) suse-required-lsb-tags.diff (different upstream solution) verify-buildrequires.diff (very build system specific, drop) xdg-check-exception.diff (upstream) * renamed patches: script-interpreter-only-for-exec-scripts.diff -> script-interpreter-only-for-exec-sc.diff confusing-invalid-spec-name.patch OBS-URL: https://build.opensuse.org/package/show/devel:openSUSE:Factory:rpmlint/rpmlint?expand=0&rev=317 --- add-scoring-support.diff | 40 ---- add-weak-dependencies.diff | 71 ++++-- avoid-mismatched-libregex.diff | 18 +- better-wrong-script.diff | 18 +- buildroot-doc.diff | 18 +- buildroot-in-scripts.diff | 18 +- check-buildroot-during-install.diff | 74 ------ check-for-self-provides.diff | 33 +++ compressed-backup-regex.diff | 20 +- config | 3 + confusing-invalid-spec-name.diff | 26 +++ description-check.diff | 20 +- devel-provide-is-devel-package.diff | 18 +- docdata-examples.diff | 22 +- extend-suse-conffiles-check.diff | 18 +- filename-non-utf8-exception.diff | 20 +- fix-versioned-prereq.diff | 26 --- ignore-non-readable-in-etc.diff | 14 -- invalid-filerequires.diff | 22 +- libtool-wrapper-check.diff | 20 +- locale-support.diff | 19 -- locale-update.diff | 34 --- more-verbose-lsb-check.diff | 30 --- no-badness-return.diff | 29 ++- no-doc-for-lib.diff | 18 +- noarch-lib64.diff | 24 +- only-reg-files-are-scripts.diff | 20 +- perl-versioned-rpath-deps.diff | 27 --- remove-expand-macros.diff | 34 +-- rpmgroup-checks.diff | 20 +- rpmlint-1.5-Fix-setgroups-error-name.diff | 22 -- ...int-1.5-disallow-var-run-and-var-lock.diff | 165 -------------- rpmlint-1.6.tar.xz | 3 + rpmlint-decode-fix.diff | 207 ----------------- rpmlint-pkg-quoting.diff | 20 +- rpmlint-suse.diff | 27 ++- rpmlint.changes | 42 ++++ rpmlint.spec | 211 +++++------------- save-content-to-an-array.diff | 31 +++ script-interpreter-only-for-exec-sc.diff | 23 ++ script-interpreter-only-for-exec-scripts.diff | 13 -- selfconflicts-provide.diff | 22 +- sourced-dirs.diff | 20 +- stricter-interpreter-check.diff | 20 +- stricter-tags-check.diff | 84 ------- suppress-for-perl-python.diff | 20 -- suse-binarieschecks.diff | 48 ++-- suse-binary-info-compile-opts.diff | 25 --- suse-check-optional-dependencies.diff | 20 +- suse-checks.diff | 16 +- suse-filesystem.diff | 23 +- suse-filter-exception.diff | 36 +-- suse-filter-more-verbose.diff | 22 +- suse-g-ir-chech.diff | 18 +- suse-ignore-specfile-errors.diff | 22 +- suse-manpages-for-rc-scripts.diff | 23 ++ suse-mono-deps-checks.diff | 32 --- suse-no-run-ldconfig.diff | 22 +- suse-pkg-config-check.diff | 24 +- suse-python-abi-check.diff | 18 +- suse-python3-naming-policy.diff | 16 +- suse-required-lsb-tags.diff | 11 - suse-shlib-devel-dependency.diff | 18 +- suse-speccheck-utf8.diff | 18 +- suse-sysv-init-checks.diff | 79 +++++++ suse-url-check.diff | 24 +- suse-version.diff | 24 +- suse-whitelist-opensuse.diff | 18 +- sysv5-init-checks.diff | 76 ------- usr-arch.diff | 22 +- verify-buildrequires.diff | 105 --------- version-control-internal-file.diff | 19 +- xdg-check-exception.diff | 27 --- xdg-paths-update.diff | 20 +- yast-provides.diff | 18 +- 75 files changed, 1068 insertions(+), 1480 deletions(-) delete mode 100644 add-scoring-support.diff delete mode 100644 check-buildroot-during-install.diff create mode 100644 check-for-self-provides.diff create mode 100644 confusing-invalid-spec-name.diff delete mode 100644 fix-versioned-prereq.diff delete mode 100644 ignore-non-readable-in-etc.diff delete mode 100644 locale-support.diff delete mode 100644 locale-update.diff delete mode 100644 more-verbose-lsb-check.diff delete mode 100644 perl-versioned-rpath-deps.diff delete mode 100644 rpmlint-1.5-Fix-setgroups-error-name.diff delete mode 100644 rpmlint-1.5-disallow-var-run-and-var-lock.diff create mode 100644 rpmlint-1.6.tar.xz delete mode 100644 rpmlint-decode-fix.diff create mode 100644 save-content-to-an-array.diff create mode 100644 script-interpreter-only-for-exec-sc.diff delete mode 100644 script-interpreter-only-for-exec-scripts.diff delete mode 100644 stricter-tags-check.diff delete mode 100644 suppress-for-perl-python.diff delete mode 100644 suse-binary-info-compile-opts.diff create mode 100644 suse-manpages-for-rc-scripts.diff delete mode 100644 suse-mono-deps-checks.diff delete mode 100644 suse-required-lsb-tags.diff create mode 100644 suse-sysv-init-checks.diff delete mode 100644 sysv5-init-checks.diff delete mode 100644 verify-buildrequires.diff delete mode 100644 xdg-check-exception.diff diff --git a/add-scoring-support.diff b/add-scoring-support.diff deleted file mode 100644 index 9ed963f..0000000 --- a/add-scoring-support.diff +++ /dev/null @@ -1,40 +0,0 @@ ---- Filter.py -+++ Filter.py -@@ -80,23 +80,24 @@ - - def _diag_compare(x, y): - -- where_a = x.split()[1] -- level_a = x.split()[2] -+ where_a = x.split()[2] -+ level_a = x.split()[1] - -- where_b = y.split()[1] -- level_b = y.split()[2] -+ where_b = y.split()[2] -+ level_b = y.split()[1] - -- if level_b > level_a: -+ if (level_b > level_a): - return 1 -- elif level_b == level_a: -- if where_b > where_b: -- return 1 -- elif where_b == where_a: -- return 0 -- else: -- return -1 -- else: -+ -+ if (level_b < level_a): -+ return -1 -+ -+ if (where_b < where_a): -+ return 1 -+ -+ if (where_b > where_a): - return -1 -+ return 0 - - - def printAllReasons(): diff --git a/add-weak-dependencies.diff b/add-weak-dependencies.diff index 730efd5..db9bb7a 100644 --- a/add-weak-dependencies.diff +++ b/add-weak-dependencies.diff @@ -1,8 +1,19 @@ -Index: Pkg.py +From 8cacb89fedba57086f1e02d326308142e6d70dbe Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] add-weak-dependencies.diff + =================================================================== ---- Pkg.py.orig 2014-02-21 15:11:27.194647274 +0000 -+++ Pkg.py 2014-02-21 15:13:26.205647064 +0000 -@@ -427,6 +427,10 @@ class Pkg: +--- + Pkg.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- + TagsCheck.py | 19 +++++++++++++++++++ + 2 files changed, 70 insertions(+), 2 deletions(-) + +diff --git a/Pkg.py b/Pkg.py +index e97d7ef..cfaa5a9 100644 +--- a/Pkg.py ++++ b/Pkg.py +@@ -466,6 +466,10 @@ class Pkg: self._missingok_files = None self._files = None self._requires = None @@ -13,7 +24,7 @@ Index: Pkg.py self._req_names = -1 if header: -@@ -673,6 +677,22 @@ class Pkg: +@@ -716,6 +720,22 @@ class Pkg: self._gatherDepInfo() return self._requires @@ -36,17 +47,17 @@ Index: Pkg.py def prereq(self): """Get package PreReqs as list of (name, flags, (epoch, version, release)) tuples.""" -@@ -709,7 +729,7 @@ class Pkg: +@@ -752,7 +772,7 @@ class Pkg: # internal function to gather dependency info used by the above ones def _gather_aux(self, header, list, nametag, flagstag, versiontag, -- prereq = None): +- prereq=None): + prereq = None, strong_only = False, weak_only = False): names = header[nametag] flags = header[flagstag] versions = header[versiontag] -@@ -720,7 +740,11 @@ class Pkg: - evr = stringToVersion(versions[loop].decode()) +@@ -763,7 +783,11 @@ class Pkg: + evr = stringToVersion(b2s(versions[loop])) if prereq is not None and flags[loop] & PREREQ_FLAG: prereq.append((name, flags[loop] & (~PREREQ_FLAG), evr)) - else: @@ -58,7 +69,7 @@ Index: Pkg.py list.append((name, flags[loop], evr)) def _gatherDepInfo(self): -@@ -730,6 +754,10 @@ class Pkg: +@@ -773,6 +797,10 @@ class Pkg: self._provides = [] self._conflicts = [] self._obsoletes = [] @@ -69,7 +80,7 @@ Index: Pkg.py self._gather_aux(self.header, self._requires, rpm.RPMTAG_REQUIRENAME, -@@ -748,6 +776,26 @@ class Pkg: +@@ -791,6 +819,26 @@ class Pkg: rpm.RPMTAG_OBSOLETENAME, rpm.RPMTAG_OBSOLETEFLAGS, rpm.RPMTAG_OBSOLETEVERSION) @@ -96,11 +107,43 @@ Index: Pkg.py def scriptprog(self, which): """Get the specified script interpreter as a string. -@@ -761,6 +809,7 @@ class Pkg: - prog = " ".join(prog) - return prog +@@ -805,6 +853,7 @@ class Pkg: + return b2s(prog) + + def getInstalledPkgs(name): """Get list of installed package objects by name.""" +diff --git a/TagsCheck.py b/TagsCheck.py +index bc79283..6528d5b 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -853,8 +853,27 @@ class TagsCheck(AbstractCheck.AbstractCheck): + value = Pkg.formatRequire(*c) + self._unexpanded_macros(pkg, 'Conflicts %s' % (value,), value) + ++ for i in pkg.supplements(): ++ value = Pkg.formatRequire(*i) ++ self._unexpanded_macros(pkg, 'Supplements %s' % (value,), value) ++ ++ for i in pkg.suggests(): ++ value = Pkg.formatRequire(*i) ++ self._unexpanded_macros(pkg, 'Suggests %s' % (value,), value) ++ ++ for i in pkg.enhances(): ++ value = Pkg.formatRequire(*i) ++ self._unexpanded_macros(pkg, 'Enhances %s' % (value,), value) ++ ++ for i in pkg.recommends(): ++ value = Pkg.formatRequire(*i) ++ self._unexpanded_macros(pkg, 'Recommends %s' % (value,), value) ++ + obss = pkg.obsoletes() + if obss: ++ for obs in obss: ++ value = Pkg.formatRequire(*obs) ++ self._unexpanded_macros(pkg, 'Obsoletes %s' % (value,), value) + provs = pkg.provides() + for prov in provs: + for obs in obss: diff --git a/avoid-mismatched-libregex.diff b/avoid-mismatched-libregex.diff index 620f4af..abb1ed3 100644 --- a/avoid-mismatched-libregex.diff +++ b/avoid-mismatched-libregex.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From 386f6785bc98ee54066a85c302774c194df2510c Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] avoid-mismatched-libregex.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -607,7 +607,7 @@ buildconfig_rpath_regex = re.compile('(? +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index efda328..14cfca3 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -615,7 +615,7 @@ buildconfig_rpath_regex = re.compile('(?:-rpath|Wl,-R)\\b') sofile_regex = re.compile('/lib(64)?/(.+/)?lib[^/]+\.so$') devel_regex = re.compile('(.*)-(debug(info)?|devel|headers|source|static)$') debuginfo_package_regex = re.compile('-debug(info)?$') diff --git a/better-wrong-script.diff b/better-wrong-script.diff index e9b54ae..7183cd3 100644 --- a/better-wrong-script.diff +++ b/better-wrong-script.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From e89c19e2d11128280b9fc14289f69c1d785457ff Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] better-wrong-script.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -1670,7 +1670,10 @@ executed.''', +--- + FilesCheck.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 7504167..72bdf54 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -1657,7 +1657,10 @@ executed.''', executed.''', 'wrong-script-interpreter', diff --git a/buildroot-doc.diff b/buildroot-doc.diff index c1b47bc..e75a810 100644 --- a/buildroot-doc.diff +++ b/buildroot-doc.diff @@ -1,8 +1,18 @@ -Index: SpecCheck.py +From b0926d6684098407592ef15e24dc83958afe4a38 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] buildroot-doc.diff + =================================================================== ---- SpecCheck.py.orig -+++ SpecCheck.py -@@ -647,7 +647,7 @@ versions you can ignore this warning.''' +--- + SpecCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/SpecCheck.py b/SpecCheck.py +index 9ea5c6e..dde66fc 100644 +--- a/SpecCheck.py ++++ b/SpecCheck.py +@@ -672,7 +672,7 @@ versions you can ignore this warning.''', 'hardcoded-path-in-buildroot-tag', '''A path is hardcoded in your Buildroot tag. It should be replaced diff --git a/buildroot-in-scripts.diff b/buildroot-in-scripts.diff index 5d35b4e..5e6db24 100644 --- a/buildroot-in-scripts.diff +++ b/buildroot-in-scripts.diff @@ -1,8 +1,18 @@ -Index: SpecCheck.py +From ab1b397c298c733da39c611938be99c457a0fa9a Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] buildroot-in-scripts.diff + =================================================================== ---- SpecCheck.py.orig -+++ SpecCheck.py -@@ -234,7 +234,9 @@ class SpecCheck(AbstractCheck.AbstractCh +--- + SpecCheck.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/SpecCheck.py b/SpecCheck.py +index dde66fc..63897f2 100644 +--- a/SpecCheck.py ++++ b/SpecCheck.py +@@ -238,7 +238,9 @@ class SpecCheck(AbstractCheck.AbstractCheck): continue diff --git a/check-buildroot-during-install.diff b/check-buildroot-during-install.diff deleted file mode 100644 index 6af64f2..0000000 --- a/check-buildroot-during-install.diff +++ /dev/null @@ -1,74 +0,0 @@ -Index: SpecCheck.py -=================================================================== ---- SpecCheck.py.orig -+++ SpecCheck.py -@@ -34,7 +34,7 @@ prefix_regex = re.compile('^Prefix\s*:\s - packager_regex = re.compile('^Packager\s*:\s*([^\s]+)', re.IGNORECASE) - noarch_regex = re.compile('^BuildArch(?:itectures)?\s*:\s*\\bnoarch\\b', re.IGNORECASE) - make_check_regex = re.compile('(^|\s|%{?__)make}?\s+(check|test)') --rm_regex = re.compile('(^|\s)((.*/)?rm|%{?__rm}?) ') -+rm_rf_regex = re.compile('(^|\s)((.*/)?rm|%{?__rm}?) -[fF]?[rR][^/]*$') - rpm_buildroot_regex = re.compile('(\\\*)\${?RPM_BUILD_ROOT}?|(%+){?buildroot}?') - configure_start_regex = re.compile('\./configure') - configure_libdir_spec_regex = re.compile('ln |\./configure[^#]*--libdir=([^\s]+)[^#]*') -@@ -145,6 +145,14 @@ def contains_buildroot(line): - return 0 - - -+def contains_create_buildroot(line): -+ '''Check if the line is of the form mkdir %{buildroot}.''' -+ line = line.strip() -+ if contains_buildroot(line) and line.startswith("mkdir") and \ -+ not line.count("-p"): -+ return True -+ return False -+ - class SpecCheck(AbstractCheck.AbstractCheck): - - def __init__(self): -@@ -192,6 +200,7 @@ class SpecCheck(AbstractCheck.AbstractCh - ifarch_depth = -1 - current_section = 'package' - buildroot_clean = {'clean': 0, 'install' : 0} -+ buildroot_created={'clean':False , 'install':True} - depscript_override = 0 - depgen_disabled = 0 - indent_spaces = 0 -@@ -261,8 +270,13 @@ class SpecCheck(AbstractCheck.AbstractCh - printWarning(pkg, 'make-check-outside-check-section', line[:-1]) - - if current_section in buildroot_clean: -- if contains_buildroot(line) and rm_regex.search(line): -+ if buildroot_created[current_section] and \ -+ contains_buildroot(line) and rm_rf_regex.search(line): - buildroot_clean[current_section] = 1 -+ buildroot_created[current_section] = False -+ -+ if contains_create_buildroot(line): -+ buildroot_created[current_section] = True - - if ifarch_regex.search(line): - if_depth = if_depth + 1 -@@ -441,6 +455,9 @@ class SpecCheck(AbstractCheck.AbstractCh - if not buildroot_clean[sect]: - printError(pkg, 'no-cleaning-of-buildroot', '%' + sect) - -+ if buildroot_clean['install'] and not buildroot_created['install']: -+ printError(pkg, '%install-no-mkdir-buildroot') -+ - if not buildroot: - printError(pkg, 'no-buildroot-tag') - -@@ -598,6 +615,12 @@ unpacking the sources.''', - '''You should clean $RPM_BUILD_ROOT in the %clean section and just after the - beginning of %install section. Use "rm -Rf $RPM_BUILD_ROOT".''', - -+'%install-no-mkdir-buildroot', -+"""Your install section removes the buildroot but does not create them -+afterwards in a secure way, which allows attackers to trivially play tricks -+with symlinks on you. use mkdir %buildroot (no -p option!) or don't clean -+the buildroot in %install, because that's anyway already done for you by rpm.""", -+ - 'rpm-buildroot-usage', - '''$RPM_BUILD_ROOT should not be touched during %build or %prep stage, as it - will break short circuiting.''', diff --git a/check-for-self-provides.diff b/check-for-self-provides.diff new file mode 100644 index 0000000..801242f --- /dev/null +++ b/check-for-self-provides.diff @@ -0,0 +1,33 @@ +From 37d58a8f4b2b3183354949ce39de151b5d449d9b Mon Sep 17 00:00:00 2001 +From: Ludwig Nussel +Date: Fri, 10 Apr 2015 14:54:18 +0200 +Subject: [PATCH] check for self provides + +--- + TagsCheck.py | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/TagsCheck.py b/TagsCheck.py +index 4141bbc..fa6154c 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -846,6 +846,8 @@ class TagsCheck(AbstractCheck.AbstractCheck): + for p in pkg.provides(): + value = Pkg.formatRequire(*p) + self._unexpanded_macros(pkg, 'Provides %s' % (value,), value) ++ if p[0] == pkg.name and not p[1]: ++ printError(pkg, 'unversioned-explicit-self-provides', p[0]) + + for c in pkg.conflicts(): + value = Pkg.formatRequire(*c) +@@ -1180,6 +1182,10 @@ objects should thus not be depended on and they should not result in provides + in the containing package. Get rid of the provides if appropriate, for example + by filtering it out during build. Note that in some cases this may require + disabling rpmbuild's internal dependency generator.''', ++ ++'unversioned-explicit-self-provides', ++'''This package provides it's own name explicitely, which might break ++upgrade path. self-provides are autogenerated. Remove the provide.''', + ) + + # TagsCheck.py ends here diff --git a/compressed-backup-regex.diff b/compressed-backup-regex.diff index ce5177f..5d5d778 100644 --- a/compressed-backup-regex.diff +++ b/compressed-backup-regex.diff @@ -1,10 +1,20 @@ -Index: FilesCheck.py +From 70e38f94218a96edac50b512807a2cd42f4de187 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] compressed-backup-regex.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -591,7 +591,7 @@ DEFAULT_STANDARD_GROUPS = ('root', 'bin' +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index fc44b50..acb379f 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -599,7 +599,7 @@ DEFAULT_DISALLOWED_DIRS = ( + ) - tmp_regex = re.compile('^(/var|/usr)?/tmp/') sub_bin_regex = re.compile('^(/usr)?/s?bin/\S+/') -backup_regex = re.compile('(~|\#[^/]+\#|\.orig|\.rej)$') +backup_regex = re.compile('(~|\#[^/]+\#|\.orig|\.orig\.gz|\.rej)$') diff --git a/config b/config index 8f38e1d..c04a291 100644 --- a/config +++ b/config @@ -397,6 +397,9 @@ add the user to the "config" file and send a submitrequest. To register the group, please branch the devel:openSUSE:Factory:rpmlint rpmlint package, add the group to the "config" file and send a submitrequest. ''' +'no-changelogname-tag', +'''There is no changelog. Please insert a '%changelog' section heading in your +spec file and prepare your changes file using e.g. the 'osc vc' command.''', ) setOption('DanglingSymlinkExceptions', diff --git a/confusing-invalid-spec-name.diff b/confusing-invalid-spec-name.diff new file mode 100644 index 0000000..ce20927 --- /dev/null +++ b/confusing-invalid-spec-name.diff @@ -0,0 +1,26 @@ +From f4d4e6259fe2cec6b7d111ff3fde6be3043eeda8 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] confusing-invalid-spec-name + +# Confusing message. The problem is not that the file does not end +# with ".spec", but that there is a mismatch of specname and pkg name. +--- + SpecCheck.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/SpecCheck.py b/SpecCheck.py +index 12b6f2b..d0d381a 100644 +--- a/SpecCheck.py ++++ b/SpecCheck.py +@@ -646,8 +646,8 @@ addDetails( + SPEC file to build a valid RPM package.''', + + 'invalid-spec-name', +-'''Your spec filename must end with '.spec'. If it's not the case, rename your +-file and rebuild your package.''', ++'''The spec file name (without the .spec suffix) must match the package name ++("Name:" tag). Either rename your package or the specfile.''', + + 'non-utf8-spec-file', + '''The character encoding of the spec file is not UTF-8. Convert it for diff --git a/description-check.diff b/description-check.diff index c2f68bc..947c673 100644 --- a/description-check.diff +++ b/description-check.diff @@ -1,8 +1,18 @@ -Index: TagsCheck.py +From 7209e0c7b0d04b939753c654ca17261be41b448b Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] description-check.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -715,6 +715,9 @@ class TagsCheck(AbstractCheck.AbstractCh +--- + TagsCheck.py | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/TagsCheck.py b/TagsCheck.py +index b1c4c7a..bc79283 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -716,6 +716,9 @@ class TagsCheck(AbstractCheck.AbstractCheck): else: for lang in langs: self.check_description(pkg, lang, ignored_words) @@ -12,7 +22,7 @@ Index: TagsCheck.py else: printError(pkg, 'no-description-tag') -@@ -995,6 +998,10 @@ Name tag.''', +@@ -997,6 +1000,10 @@ Name tag.''', '''The major number of the library isn't included in the package's name. ''', diff --git a/devel-provide-is-devel-package.diff b/devel-provide-is-devel-package.diff index 7cdfdd5..ad27867 100644 --- a/devel-provide-is-devel-package.diff +++ b/devel-provide-is-devel-package.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From f22bf06e92c4e092b0dd71cae0bf72dcfae4de96 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] devel-provide-is-devel-package.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -807,6 +807,10 @@ class FilesCheck(AbstractCheck.AbstractC +--- + FilesCheck.py | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 72bdf54..ae9c364 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -829,6 +829,10 @@ class FilesCheck(AbstractCheck.AbstractCheck): # Check if the package is a development package devel_pkg = devel_regex.search(pkg.name) diff --git a/docdata-examples.diff b/docdata-examples.diff index 16bd187..7e69218 100644 --- a/docdata-examples.diff +++ b/docdata-examples.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From 0375b024b39aabdb7d237d95c3163244f2f147ca Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] docdata-examples.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -601,6 +601,7 @@ bin_regex = re.compile('^/(?:usr/(?:s?bi +--- + FilesCheck.py | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index c485125..7504167 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -609,6 +609,7 @@ bin_regex = re.compile('^/(?:usr/(?:s?bin|games)|s?bin)/(.*)') includefile_regex = re.compile('\.(c|h)(pp|xx)?$', re.IGNORECASE) develfile_regex = re.compile('\.(a|cmxa?|mli?)$') buildconfigfile_regex = re.compile('(\.pc|/bin/.+-config)$') @@ -10,7 +20,7 @@ Index: FilesCheck.py # room for improvement with catching more -R, but also for false positives... buildconfig_rpath_regex = re.compile('(?:-rpath|Wl,-R)\\b') sofile_regex = re.compile('/lib(64)?/(.+/)?lib[^/]+\.so$') -@@ -1158,7 +1159,7 @@ class FilesCheck(AbstractCheck.AbstractC +@@ -1181,7 +1182,7 @@ class FilesCheck(AbstractCheck.AbstractCheck): includefile_regex.search(f) or \ develfile_regex.search(f) or \ logrotate_regex.search(f) @@ -19,7 +29,7 @@ Index: FilesCheck.py printWarning(pkg, 'spurious-executable-perm', f) elif f.startswith('/etc/') and f not in config_files and \ f not in ghost_files: -@@ -1541,7 +1542,10 @@ included in your package.''', +@@ -1534,7 +1535,10 @@ included in your package.''', 'spurious-executable-perm', '''The file is installed with executable permissions, but was identified as one that probably should not be executable. Verify if the executable bits are diff --git a/extend-suse-conffiles-check.diff b/extend-suse-conffiles-check.diff index 276dce2..1504d82 100644 --- a/extend-suse-conffiles-check.diff +++ b/extend-suse-conffiles-check.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From 142dd63355795f86a26db29fc20917b19b57d62a Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] extend-suse-conffiles-check.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -1179,7 +1179,7 @@ class FilesCheck(AbstractCheck.AbstractC +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 0bb4b3d..fc44b50 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -1199,7 +1199,7 @@ class FilesCheck(AbstractCheck.AbstractCheck): if nonexec_file and not docdir_examples_regex.search(f): printWarning(pkg, 'spurious-executable-perm', f) elif f.startswith('/etc/') and f not in config_files and \ diff --git a/filename-non-utf8-exception.diff b/filename-non-utf8-exception.diff index 833af51..ed77d39 100644 --- a/filename-non-utf8-exception.diff +++ b/filename-non-utf8-exception.diff @@ -1,10 +1,20 @@ -Index: Filter.py +From 650e2106a909706246d910463d52a59dfa75b2f4 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] filename-non-utf8-exception.diff + =================================================================== ---- Filter.py.orig -+++ Filter.py +--- + Filter.py | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +diff --git a/Filter.py b/Filter.py +index 40fbf79..37ba038 100644 +--- a/Filter.py ++++ b/Filter.py @@ -23,14 +23,8 @@ _diagnostic = list() _badness_score = 0 - printed_messages = { "I": 0, "W": 0, "E": 0 } + printed_messages = {"I": 0, "W": 0, "E": 0} -if sys.stdout.isatty(): - def __print(s): @@ -17,5 +27,5 @@ Index: Filter.py +def __print(s): + print(s) + def printInfo(pkg, reason, *details): - _print("I", pkg, reason, details) diff --git a/fix-versioned-prereq.diff b/fix-versioned-prereq.diff deleted file mode 100644 index eb6565f..0000000 --- a/fix-versioned-prereq.diff +++ /dev/null @@ -1,26 +0,0 @@ ---- Pkg.py -+++ Pkg.py -@@ -403,10 +403,19 @@ - current_version=d[1] - if current_version.find(':') > 0: - current_version=''.join(current_version.split(':')[1:]) -- if d[2] & rpm.RPMSENSE_EQUAL != rpm.RPMSENSE_EQUAL or current_version != version: -- return 0 -- else: -- return 1 -+ -+ if d[2] & rpm.RPMSENSE_EQUAL: -+ if current_version == version: -+ return 1 -+ -+ if d[2] & rpm.RPMSENSE_GREATER: -+ if current_version.count('.') > version.count('.'): -+ current_version = '.'.join(current_version.split('.')[0:version.count('.')]) -+ -+ if current_version == version: -+ return 1 -+ -+ return 0 - return 0 - - def conflicts(self): diff --git a/ignore-non-readable-in-etc.diff b/ignore-non-readable-in-etc.diff deleted file mode 100644 index 1f2c951..0000000 --- a/ignore-non-readable-in-etc.diff +++ /dev/null @@ -1,14 +0,0 @@ -Index: FilesCheck.py -=================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -980,7 +980,8 @@ class FilesCheck(AbstractCheck.AbstractC - (includefile_regex.search(f) or \ - develfile_regex.search(f) or is_buildconfig): - printWarning(pkg, 'devel-file-in-non-devel-package', f) -- if mode & 0444 != 0444 and perm & 07000 == 0 and f[0:len('/var/log')] != '/var/log': -+ if mode & 0444 != 0444 and perm & 07000 == 0 and \ -+ not f.startswith('/var/log/') and not f.startswith('/etc/'): - printError(pkg, 'non-readable', f, oct(perm)) - if size == 0 and not normal_zero_length_regex.search(f) and f not in ghost_files: - printError(pkg, 'zero-length', f) diff --git a/invalid-filerequires.diff b/invalid-filerequires.diff index 1b62005..82ce426 100644 --- a/invalid-filerequires.diff +++ b/invalid-filerequires.diff @@ -1,8 +1,18 @@ -Index: TagsCheck.py +From 7f031242ba0f3d31440bf5c0ecdcd6915c0ffab1 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] invalid-filerequires.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -421,6 +421,7 @@ invalid_version_regex = re.compile('([0- +--- + TagsCheck.py | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/TagsCheck.py b/TagsCheck.py +index 3c68d28..4141bbc 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -422,6 +422,7 @@ invalid_version_regex = re.compile('([0-9](?:rc|alpha|beta|pre).*)', re.IGNORECA # () are here for grouping purpose in the regexp forbidden_words_regex = re.compile('(' + Config.getOption('ForbiddenWords') + ')', re.IGNORECASE) valid_buildhost_regex = re.compile(Config.getOption('ValidBuildHost')) @@ -10,7 +20,7 @@ Index: TagsCheck.py use_epoch = Config.getOption('UseEpoch', False) use_utf8 = Config.getOption('UseUTF8', Config.USEUTF8_DEFAULT) max_line_len = Config.getOption('MaxLineLength', 79) -@@ -599,6 +600,9 @@ class TagsCheck(AbstractCheck.AbstractCh +@@ -602,6 +603,9 @@ class TagsCheck(AbstractCheck.AbstractCheck): if d[0].startswith('/usr/local/'): printError(pkg, 'invalid-dependency', d[0]) @@ -20,7 +30,7 @@ Index: TagsCheck.py if is_source: if lib_devel_number_regex.search(d[0]): printError(pkg, 'invalid-build-requires', d[0]) -@@ -1106,6 +1110,12 @@ explicit Requires: tags.''', +@@ -1127,6 +1131,12 @@ unneeded explicit Requires: tags.''', '''This package provides 2 times the same capacity. It should only provide it once.''', diff --git a/libtool-wrapper-check.diff b/libtool-wrapper-check.diff index 63f7cc9..1675f53 100644 --- a/libtool-wrapper-check.diff +++ b/libtool-wrapper-check.diff @@ -1,8 +1,18 @@ -Index: BinariesCheck.py +From aa956808bc3b035e80a77904d8c8d125de311fb8 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] libtool-wrapper-check.diff + =================================================================== ---- BinariesCheck.py.orig -+++ BinariesCheck.py -@@ -313,8 +313,19 @@ class BinariesCheck(AbstractCheck.Abstra +--- + BinariesCheck.py | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/BinariesCheck.py b/BinariesCheck.py +index c1c566d..b92c01e 100644 +--- a/BinariesCheck.py ++++ b/BinariesCheck.py +@@ -316,8 +316,19 @@ class BinariesCheck(AbstractCheck.AbstractCheck): is_ar = 'current ar archive' in pkgfile.magic is_ocaml_native = 'Objective caml native' in pkgfile.magic is_lua_bytecode = 'Lua bytecode' in pkgfile.magic @@ -22,7 +32,7 @@ Index: BinariesCheck.py if not is_binary: if reference_regex.search(fname): lines = pkg.grep(invalid_dir_ref_regex, fname) -@@ -572,6 +583,15 @@ recompiled separately from the static li +@@ -579,6 +590,15 @@ recompiled separately from the static libraries with the -fPIC option. Another common mistake that causes this problem is linking with ``gcc -Wl,-shared'' instead of ``gcc -shared''.''', diff --git a/locale-support.diff b/locale-support.diff deleted file mode 100644 index 3904d76..0000000 --- a/locale-support.diff +++ /dev/null @@ -1,19 +0,0 @@ ---- rpmlint.py -+++ rpmlint.py -@@ -16,6 +16,7 @@ import Pkg - import Config - import os - import stat -+import locale - import rpm - from Filter import * - import SpecCheck -@@ -42,6 +43,8 @@ def loadCheck(name): - # main program - ############################################################################# - def main(): -+ -+ locale.setlocale(locale.LC_ALL, '') - # Load all the tests - for c in Config.allChecks(): - loadCheck(c) diff --git a/locale-update.diff b/locale-update.diff deleted file mode 100644 index 00ebc21..0000000 --- a/locale-update.diff +++ /dev/null @@ -1,34 +0,0 @@ -Index: I18NCheck.py -=================================================================== ---- I18NCheck.py.orig -+++ I18NCheck.py -@@ -38,22 +38,22 @@ INCORRECT_LOCALES = { - # - # 'en_RN' and 'en@IPA' are not real language bu funny variations on english - CORRECT_SUBDIRS = ( --'af', 'am', 'ang', 'ar', 'as', 'az', 'az_IR', 'be', 'bg', 'bn', 'bn_IN', 'br', --'bs', 'ca', 'cs', 'cy', 'da', 'de', 'de_AT', 'dz', 'el', -+'af', 'am', 'ang', 'ar', 'as', 'az', 'az_IR', 'be', 'be@latin', 'bg', 'bn', 'bn_IN', 'br', -+'bs', 'ca', 'ca@valencia', 'cs', 'cy', 'da', 'de', 'de_AT', 'dz', 'el', - 'en_AU', 'en_CA', 'en_GB', 'en_IE', 'en_US', 'en_RN', 'en@IPA', - 'eo', 'es', 'es_AR', 'es_ES', 'es_DO', 'es_GT', 'es_HN', 'es_SV', 'es_PE', - 'es_PA', 'es_MX', 'et', 'eu', - 'fa', 'fi', 'fo', 'fr', 'fur', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', - 'he', 'hi', 'hr', 'hu', 'hy', --'ia', 'id', 'is', 'it', 'iu', 'ja', 'ka', 'kl', 'km', 'kn', 'ko', 'ku', 'kw', -+'ia', 'id', 'io', 'is', 'it', 'iu', 'ja', 'ka', 'kl', 'km', 'kn', 'ko', 'ku', 'kw', - # 'ltg' is not a standard ISO code; latgalian hasn't yet an ISO code --'ky', 'lg', 'li', 'lo', 'lt', 'ltg', 'lv', -+'ky', 'lg', 'li', 'lo', 'lt', 'ltg', 'lv', 'mai', 'md', - 'mg', 'mi', 'mk', 'ml', 'mn', 'mr', 'ms', 'mt', 'my', - 'nb', 'nds', 'nds_DE', 'ne', 'nl', 'nn', 'no', 'nr', 'nso', --'oc', 'or', 'pa_IN', 'ph', 'pl', 'pp', 'pt', 'pt_BR', 'qu', 'ro', 'ru', 'rw', --'sc', 'se', 'si', 'sk', 'sl', 'sq', 'sr', 'sr@Latn', 'sr@ije', 'ss', 'st', -+'oc', 'or', 'pa_IN', 'ph', 'pl', 'pp', 'ps', 'pt', 'pt_BR', 'qu', 'ro', 'ru', 'rw', -+'sc', 'se', 'si', 'sk', 'sl', 'sq', 'sr', 'sr@latin', 'sr@ije', 'ss', 'st', - 'sv', 'ta', 'te', 'tg', 'th', 'tk', 'tl', 'tn', 'tr', 'ts', 'tt', --'ug', 'uk', 'ur', 'uz', 'uz@Latn', -+'ug', 'uk', 'ur', 'uz', 'uz@cyrillic', - 've', 'vi', 'wa', 'wen', 'xh', 'yi', 'yo', 'zh_CN', 'zh_HK', 'zh_TW', 'zu', - # KDE uses 'ven' for 've' - 'ven', diff --git a/more-verbose-lsb-check.diff b/more-verbose-lsb-check.diff deleted file mode 100644 index d48da8c..0000000 --- a/more-verbose-lsb-check.diff +++ /dev/null @@ -1,30 +0,0 @@ ---- InitScriptCheck.py -+++ InitScriptCheck.py -@@ -101,7 +101,7 @@ class InitScriptCheck(AbstractCheck.AbstractCheck): - in_lsb_tag = 0 - for i in lsb_tags.keys(): - if len(lsb_tags[i]) != 1: -- printError(pkg, 'redundant-lsb-keyword', i) -+ printError(pkg, 'redundant-lsb-keyword', "'%s' in %s" % (i, f)) - - # TODO: where is it specified that these (or some) - # keywords are mandatory? -@@ -118,7 +118,7 @@ class InitScriptCheck(AbstractCheck.AbstractCheck): - cres = lsb_cont_regex.search(line) - if not (in_lsb_description and cres): - in_lsb_description = 0 -- printError(pkg, 'malformed-line-in-lsb-comment-block', line) -+ printError(pkg, 'malformed-line-in-lsb-comment-block', "'%s' in %s" % (line,f)) - else: - lsb_tags["Description"][-1] += " " + cres.group(1) - else: -@@ -127,7 +127,7 @@ class InitScriptCheck(AbstractCheck.AbstractCheck): - tag not in ('Provides', 'Required-Start', 'Required-Stop', - 'Should-Stop', 'Should-Start', 'Default-Stop', - 'Default-Start', 'Description', 'Short-Description'): -- printError(pkg, 'unknown-lsb-keyword', line) -+ printError(pkg, 'unknown-lsb-keyword', "'%s' in %s" % (line, f)) - else: - in_lsb_description = (tag == 'Description') - if not tag in lsb_tags.keys(): - diff --git a/no-badness-return.diff b/no-badness-return.diff index 999ce72..3cf4a75 100644 --- a/no-badness-return.diff +++ b/no-badness-return.diff @@ -1,8 +1,19 @@ -Index: Filter.py +From a6b4dc66618b5284b1e705393111cb26092009d6 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] no-badness-return.diff + =================================================================== ---- Filter.py.orig -+++ Filter.py -@@ -113,7 +113,7 @@ def printAllReasons(): +--- + Filter.py | 2 +- + rpmlint | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Filter.py b/Filter.py +index eaa8384..40fbf79 100644 +--- a/Filter.py ++++ b/Filter.py +@@ -120,7 +120,7 @@ def printAllReasons(): if len(last_reason): printDescriptions(last_reason) last_reason = reason @@ -11,11 +22,11 @@ Index: Filter.py if Config.info and len(last_reason): printDescriptions(last_reason) _diagnostic = list() -Index: rpmlint -=================================================================== ---- rpmlint.orig -+++ rpmlint -@@ -214,7 +214,7 @@ def main(): +diff --git a/rpmlint b/rpmlint +index aa37c3a..8853e79 100755 +--- a/rpmlint ++++ b/rpmlint +@@ -202,7 +202,7 @@ def main(): % (packages_checked, specfiles_checked, printed_messages["E"], printed_messages["W"])) diff --git a/no-doc-for-lib.diff b/no-doc-for-lib.diff index b129001..9cd6d52 100644 --- a/no-doc-for-lib.diff +++ b/no-doc-for-lib.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From 2c88f9b0eb575a7f528d12863f3af6077664f3c8 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] no-doc-for-lib.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -823,7 +823,7 @@ class FilesCheck(AbstractCheck.AbstractC +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 9532011..5929146 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -846,7 +846,7 @@ class FilesCheck(AbstractCheck.AbstractCheck): debuginfo_srcs = False debuginfo_debugs = False diff --git a/noarch-lib64.diff b/noarch-lib64.diff index 5f25a8f..1734bfd 100644 --- a/noarch-lib64.diff +++ b/noarch-lib64.diff @@ -1,8 +1,18 @@ -Index: BinariesCheck.py +From 8a5d81397414727ae834415be81619f2fc92b525 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] noarch-lib64.diff + =================================================================== ---- BinariesCheck.py.orig -+++ BinariesCheck.py -@@ -291,6 +291,7 @@ class BinariesCheck(AbstractCheck.Abstra +--- + BinariesCheck.py | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/BinariesCheck.py b/BinariesCheck.py +index b92c01e..aff0f9f 100644 +--- a/BinariesCheck.py ++++ b/BinariesCheck.py +@@ -294,6 +294,7 @@ class BinariesCheck(AbstractCheck.AbstractCheck): binary = False binary_in_usr_lib = False has_usr_lib_file = False @@ -10,7 +20,7 @@ Index: BinariesCheck.py multi_pkg = False srpm = pkg[rpm.RPMTAG_SOURCERPM] -@@ -309,6 +310,10 @@ class BinariesCheck(AbstractCheck.Abstra +@@ -312,6 +313,10 @@ class BinariesCheck(AbstractCheck.AbstractCheck): # only-non-binary-in-usr-lib false positives binary_in_usr_lib = True @@ -21,7 +31,7 @@ Index: BinariesCheck.py is_elf = 'ELF' in pkgfile.magic is_ar = 'current ar archive' in pkgfile.magic is_ocaml_native = 'Objective caml native' in pkgfile.magic -@@ -534,9 +539,12 @@ class BinariesCheck(AbstractCheck.Abstra +@@ -541,9 +546,12 @@ class BinariesCheck(AbstractCheck.AbstractCheck): if version and version != -1 and version not in pkg.name: printError(pkg, 'incoherent-version-in-name', version) @@ -35,7 +45,7 @@ Index: BinariesCheck.py if has_usr_lib_file and not binary_in_usr_lib: printWarning(pkg, 'only-non-binary-in-usr-lib') -@@ -560,6 +568,11 @@ FHS and the FSSTND forbid this.''', +@@ -567,6 +575,11 @@ FHS and the FSSTND forbid this.''', # 'non-sparc32-binary', # '', diff --git a/only-reg-files-are-scripts.diff b/only-reg-files-are-scripts.diff index eb49136..080d16f 100644 --- a/only-reg-files-are-scripts.diff +++ b/only-reg-files-are-scripts.diff @@ -1,8 +1,18 @@ -Index: InitScriptCheck.py +From b4792fd36155f64d0ce8b02c12d68535411d7770 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] only-reg-files-are-scripts.diff + =================================================================== ---- InitScriptCheck.py.orig -+++ InitScriptCheck.py -@@ -18,7 +18,7 @@ from Filter import addDetails, printErro +--- + InitScriptCheck.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/InitScriptCheck.py b/InitScriptCheck.py +index 5d851d4..fb53d93 100644 +--- a/InitScriptCheck.py ++++ b/InitScriptCheck.py +@@ -18,7 +18,7 @@ from Filter import addDetails, printError, printWarning import AbstractCheck import Config import Pkg @@ -11,7 +21,7 @@ Index: InitScriptCheck.py chkconfig_content_regex = re.compile('^\s*#\s*chkconfig:\s*([-0-9]+)\s+[-0-9]+\s+[-0-9]+') subsys_regex = re.compile('/var/lock/subsys/([^/"\'\n\s;&|]+)', re.MULTILINE) -@@ -64,6 +64,9 @@ class InitScriptCheck(AbstractCheck.Abst +@@ -50,6 +50,9 @@ class InitScriptCheck(AbstractCheck.AbstractCheck): not fname.startswith('/etc/rc.d/init.d/'): continue diff --git a/perl-versioned-rpath-deps.diff b/perl-versioned-rpath-deps.diff deleted file mode 100644 index 445a53b..0000000 --- a/perl-versioned-rpath-deps.diff +++ /dev/null @@ -1,27 +0,0 @@ ---- BinariesCheck.py -+++ BinariesCheck.py -@@ -119,6 +119,8 @@ - sparc_regex=re.compile('SPARC32PLUS|SPARC V9|UltraSPARC') - system_lib_paths=Config.getOption('SystemLibPaths', DEFAULT_SYSTEM_LIB_PATHS) - usr_lib_regex=re.compile('^/usr/lib(64)?/') -+lib_perl_regex=re.compile('^/usr/lib/perl5/(?:vendor_perl/)?([0-9]+\.[0-9]+)\.([0-9]+)/') -+perl_version_trick=Config.getOption('PerlVersionTrick', 1) - bin_regex=re.compile('^(/usr(/X11R6)?)?/s?bin/') - soversion_regex=re.compile('.*?([0-9][.0-9]*)\\.so|.*\\.so\\.([0-9][.0-9]*).*') - reference_regex=re.compile('\.la$|^/usr/lib(64)?/pkgconfig/') -@@ -234,7 +236,14 @@ - if p in system_lib_paths or \ - not usr_lib_regex.search(p): - printError(pkg, 'binary-or-shlib-defines-rpath', i[0], bin_info.rpath) -- break -+ res=lib_perl_regex.search(p) -+ if res: -+ if perl_version_trick: -+ vers = res.group(1) + '.' + res.group(2) -+ else: -+ vers = res.group(1) + res.group(2) -+ if not (pkg.check_versioned_dep('perl', vers)): -+ printError(pkg, "no-dependency-on", "perl", vers) - - # statically linked ? - is_exec=executable_regex.search(i[1]) diff --git a/remove-expand-macros.diff b/remove-expand-macros.diff index f2375d5..60cc0fd 100644 --- a/remove-expand-macros.diff +++ b/remove-expand-macros.diff @@ -1,14 +1,22 @@ +From 40b4e731258c4e03f298f27691e22ae4ca650ebb Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] remove-expand-macros.diff + commit 29e43a3e1676aa452f730a741d00ef4ac7baec96 Author: Ludwig Nussel Date: Tue May 17 12:56:38 2011 +0200 remove-expand-macros.diff +--- + TagsCheck.py | 27 --------------------------- + 1 file changed, 27 deletions(-) -Index: TagsCheck.py -=================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -431,15 +431,6 @@ so_dep_regex = re.compile(r'\.so(\.[0-9a +diff --git a/TagsCheck.py b/TagsCheck.py +index fc392e5..40ce77a 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -432,15 +432,6 @@ so_dep_regex = re.compile(r'\.so(\.[0-9a-zA-z]+)*(\([^)]*\))*$') # we assume that no rpm packages existed before rpm itself existed... oldest_changelog_timestamp = calendar.timegm(time.strptime("1995-01-01", "%Y-%m-%d")) @@ -22,11 +30,11 @@ Index: TagsCheck.py - private_so_paths.add(re.sub(r'/lib(?=/|$)', '/lib64', epath)) - _enchant_checkers = {} - def spell_check(pkg, str, fmt, lang, ignored): -@@ -864,30 +855,12 @@ class TagsCheck(AbstractCheck.AbstractCh - (apply(Pkg.formatRequire, obs), - apply(Pkg.formatRequire, prov))) + +@@ -886,30 +877,12 @@ class TagsCheck(AbstractCheck.AbstractCheck): + (Pkg.formatRequire(*obs), + Pkg.formatRequire(*prov))) - expfmt = rpm.expandMacro("%{_build_name_fmt}") - if pkg.isSource(): @@ -41,8 +49,8 @@ Index: TagsCheck.py for tag in ('Distribution', 'DistTag', 'ExcludeArch', 'ExcludeOS', 'Vendor'): if hasattr(rpm, 'RPMTAG_%s' % tag.upper()): - self._unexpanded_macros( - pkg, tag, pkg[getattr(rpm, 'RPMTAG_%s' % tag.upper())]) + self._unexpanded_macros(pkg, tag, + Pkg.b2s(pkg[getattr(rpm, 'RPMTAG_%s' % tag.upper())])) - for path in private_so_paths: - for fname, pkgfile in pkg.files().items(): @@ -50,8 +58,8 @@ Index: TagsCheck.py - for prov in pkgfile.provides: - if so_dep_regex.search(prov[0]): - printWarning(pkg, "private-shared-object-provides", -- fname, apply(Pkg.formatRequire, prov)) +- fname, Pkg.formatRequire(*prov)) - - def check_description(self, pkg, lang, ignored_words): description = pkg.langtag(rpm.RPMTAG_DESCRIPTION, lang) + self._unexpanded_macros(pkg, '%%description -l %s' % lang, description) diff --git a/rpmgroup-checks.diff b/rpmgroup-checks.diff index c79a8de..a1163a9 100644 --- a/rpmgroup-checks.diff +++ b/rpmgroup-checks.diff @@ -1,8 +1,18 @@ -Index: TagsCheck.py +From e64c8d7222e0e6418f3dff1cdd2229a5c47286dd Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] rpmgroup-checks.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -722,6 +722,8 @@ class TagsCheck(AbstractCheck.AbstractCh +--- + TagsCheck.py | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/TagsCheck.py b/TagsCheck.py +index 9e00892..b1c4c7a 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -723,6 +723,8 @@ class TagsCheck(AbstractCheck.AbstractCheck): self._unexpanded_macros(pkg, 'Group', group) if not group: printError(pkg, 'no-group-tag') @@ -11,7 +21,7 @@ Index: TagsCheck.py elif VALID_GROUPS and group not in VALID_GROUPS: printWarning(pkg, 'non-standard-group', group) -@@ -1034,6 +1036,10 @@ won't fool the specfile parser, and rebu +@@ -1036,6 +1038,10 @@ won't fool the specfile parser, and rebuild the package.''', '''There is no Group tag in your package. You have to specify a valid group in your spec file using the Group tag.''', diff --git a/rpmlint-1.5-Fix-setgroups-error-name.diff b/rpmlint-1.5-Fix-setgroups-error-name.diff deleted file mode 100644 index f81918a..0000000 --- a/rpmlint-1.5-Fix-setgroups-error-name.diff +++ /dev/null @@ -1,22 +0,0 @@ -From e6c176c7d03f377e55d405ebe5d0368f688426c7 Mon Sep 17 00:00:00 2001 -From: Orion Poplawski -Date: Thu, 11 Jul 2013 12:29:34 -0600 -Subject: [PATCH] Fix setgroups error name - ---- - BinariesCheck.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: rpmlint-1.5/BinariesCheck.py -=================================================================== ---- rpmlint-1.5.orig/BinariesCheck.py -+++ rpmlint-1.5/BinariesCheck.py -@@ -518,7 +518,7 @@ class BinariesCheck(AbstractCheck.Abstra - printError(pkg, 'missing-PT_GNU_STACK-section', fname) - - if bin_info.setgid and bin_info.setuid and not bin_info.setgroups: -- printError(pkg, 'missing-call-to-setgroups', fname) -+ printError(pkg, 'missing-call-to-setgroups-before-setuid', fname) - - if bin_info.chroot: - if not bin_info.chdir or not bin_info.chroot_near_chdir: diff --git a/rpmlint-1.5-disallow-var-run-and-var-lock.diff b/rpmlint-1.5-disallow-var-run-and-var-lock.diff deleted file mode 100644 index edf8922..0000000 --- a/rpmlint-1.5-disallow-var-run-and-var-lock.diff +++ /dev/null @@ -1,165 +0,0 @@ -From c45057466e8e40bbb36fa90faa10a2b678c25ba2 Mon Sep 17 00:00:00 2001 -From: Ludwig Nussel -Date: Wed, 30 Apr 2014 16:35:20 +0200 -Subject: [PATCH rpmlint] disallow /var/run and /var/lock - -Distros moved to having /var/run and /var/lock as symlinks to /run resp -/run/lock. Therefore packages must no longer put files there at all. - -Also, refactor the code for dir-or-file-in-* and make it configurable. ---- - FilesCheck.py | 77 +++++++++++++++++++++++------------------------------------ - config | 4 ++++ - 2 files changed, 34 insertions(+), 47 deletions(-) - -Index: rpmlint-1.5/FilesCheck.py -=================================================================== ---- rpmlint-1.5.orig/FilesCheck.py -+++ rpmlint-1.5/FilesCheck.py -@@ -559,12 +559,9 @@ STANDARD_DIRS = ( - '/var/lib/nobody', - '/var/lib/pam_devperm', - '/var/lib/wwwrun', -- '/var/lock', -- '/var/lock/subsys', - '/var/log', - '/var/mail', - '/var/opt', -- '/var/run', - '/var/spool', - '/var/spool/clientmqueue', - '/var/spool/locks', -@@ -589,7 +586,19 @@ DEFAULT_STANDARD_GROUPS = ('root', 'bin' - 'shutdown', 'halt', 'mail', 'news', 'uucp', - 'man', 'nobody',) - --tmp_regex = re.compile('^(/var|/usr)?/tmp/') -+DEFAULT_DISALLOWED_DIRS = ( -+ '/home', -+ '/mnt', -+ '/opt', -+ '/tmp', -+ '/usr/local', -+ '/usr/tmp', -+ '/var/local', -+ '/var/lock', -+ '/var/run', -+ '/var/tmp', -+) -+ - sub_bin_regex = re.compile('^(/usr)?/s?bin/\S+/') - backup_regex = re.compile('(~|\#[^/]+\#|\.orig|\.orig\.gz|\.rej)$') - compr_regex = re.compile('\.(gz|z|Z|zip|bz2|lzma|xz)$') -@@ -653,6 +662,8 @@ use_relative_symlinks = Config.getOption - standard_groups = Config.getOption('StandardGroups', DEFAULT_STANDARD_GROUPS) - standard_users = Config.getOption('StandardUsers', DEFAULT_STANDARD_USERS) - -+disallowed_dirs = Config.getOption('DisallowedDirs', DEFAULT_DISALLOWED_DIRS) -+ - non_readable_regexs = (re.compile('^/var/log/'), - re.compile('^/etc/(g?shadow-?|securetty)$')) - -@@ -871,19 +882,13 @@ class FilesCheck(AbstractCheck.AbstractC - is_kernel_package: - printError(pkg, "kernel-modules-not-in-kernel-packages", f) - -- for i in ['mnt','opt','usr-local','var-local','home']: -- if f.startswith('/%s/' % i.replace('-','/')): -- printError(pkg, 'dir-or-file-in-%s' % i, f) -- -- if tmp_regex.search(f): -- printError(pkg, 'dir-or-file-in-tmp', f) -+ for i in disallowed_dirs: -+ if f.startswith(i): -+ printError(pkg, 'dir-or-file-in-%s' % '-'.join(i.split('/')[1:]), f) - -- elif f.startswith('/var/run/'): -+ if f.startswith('/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) -+ printWarning(pkg, 'non-ghost-in-run', f) - elif sub_bin_regex.search(f): - printError(pkg, 'subdir-in-bin', f) - elif '/site_perl/' in f: -@@ -1466,35 +1471,10 @@ install-info.''', - '''You have a perl temporary file in your package. Usually, this - file is beginning with a dot (.) and contain "perl" in its name.''', - --'dir-or-file-in-tmp', --'''A file in the package is located in /tmp. It's not permitted --for packages to install files in this directory.''', -- --'dir-or-file-in-mnt', --'''A file in the package is located in /mnt. It's not permitted --for packages to install files in this directory.''', -- --'dir-or-file-in-opt', --'''A file in the package is located in /opt. It's not permitted --for packages to install files in this directory.''', -- --'dir-or-file-in-usr-local', --'''A file in the package is located in /usr/local. It's not permitted --for packages to install files in this directory.''', -- --'dir-or-file-in-var-local', --'''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 -+'non-ghost-in-run', -+'''A file or directory in the package is located in /run. Files installed - in this directory should be marked as %ghost and created at runtime to work --properly in tmpfs /var/lock setups.''', -+properly in tmpfs /run setups.''', - - 'subdir-in-bin', - '''The package contains a subdirectory in /usr/bin. It's not permitted to -@@ -1505,10 +1485,6 @@ create a subdir there. Create it in /usr - by an editor or resulting from applying unclean (fuzzy, or ones with line - offsets) patches.''', - --'dir-or-file-in-home', --'''A file in the package is located in /home. It's not permitted --for packages to install files in this directory.''', -- - 'version-control-internal-file', - '''You have included file(s) internally used by a version control system - in the package. Move these files out of the package and rebuild it.''', -@@ -1832,6 +1808,13 @@ as part of the example documentation mea - use it and setup a insecure configuration.''' - ) - -+for i in disallowed_dirs: -+ addDetails('dir-or-file-in-%s' % '-'.join(i.split('/')[1:]), -+ '''A file in the package is located in %s. It's not permitted -+for packages to install files in this directory.''' % i) -+ -+ -+ - # FilesCheck.py ends here - - # Local variables: -Index: rpmlint-1.5/config -=================================================================== ---- rpmlint-1.5.orig/config -+++ rpmlint-1.5/config -@@ -126,6 +126,10 @@ from Config import * - # Type: tuple of strings, see DEFAULT_STANDARD_USERS in FilesCheck - #setOption("StandardUsers", ()) - -+# List of directory prefixes that are not allowed in packages -+# Type: tuple of strings, see DEFAULT_DISALLOWED_DIRS in FilesCheck -+#setOption("DisallowedDirs", ('/home', '/mnt')) -+ - # List of directories considered to be system default library search paths. - # Type: tuple of strings, default: see DEFAULT_SYSTEM_LIB_PATHS in BinariesCheck - #setOption("SystemLibPaths", ('/lib', '/lib64', '/usr/lib', '/usr/lib64')) diff --git a/rpmlint-1.6.tar.xz b/rpmlint-1.6.tar.xz new file mode 100644 index 0000000..5d425d9 --- /dev/null +++ b/rpmlint-1.6.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0dae71a3fed413ee5c47bd04f393cd6598c68c0dcf1504fa020d62814ff674b +size 13563040 diff --git a/rpmlint-decode-fix.diff b/rpmlint-decode-fix.diff deleted file mode 100644 index bb1f203..0000000 --- a/rpmlint-decode-fix.diff +++ /dev/null @@ -1,207 +0,0 @@ -Index: rpmlint-1.5/Pkg.py -=================================================================== ---- rpmlint-1.5.orig/Pkg.py -+++ rpmlint-1.5/Pkg.py -@@ -85,7 +85,7 @@ def getstatusoutput(cmd, stdoutonly = Fa - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, close_fds=True) - proc.stdin.close() -- text = proc.stdout.read().decode() -+ text = proc.stdout.read() - sts = proc.wait() - if sts is None: - sts = 0 -diff -ruN rpmlint-1.5/BinariesCheck.py rpmlint-1.5.new/BinariesCheck.py ---- rpmlint-1.5/BinariesCheck.py 2014-02-27 12:06:25.018163441 +0100 -+++ rpmlint-1.5.new/BinariesCheck.py 2014-02-27 12:04:14.210110261 +0100 -@@ -198,7 +198,7 @@ - try: - fobj = open(path, 'rb') - fobj.seek(-12, 2) # 2 == os.SEEK_END, for python 2.4 compat (#172) -- self.tail = fobj.read().decode() -+ self.tail = fobj.read() - except Exception: - e = sys.exc_info()[1] - printWarning(pkg, 'binaryinfo-tail-failed %s: %s' % (file, e)) -@@ -296,7 +296,7 @@ - multi_pkg = False - srpm = pkg[rpm.RPMTAG_SOURCERPM] - if srpm: -- res = srcname_regex.search(srpm.decode()) -+ res = srcname_regex.search(srpm) - if res: - multi_pkg = (pkg.name != res.group(1)) - -diff -ruN rpmlint-1.5/DocFilesCheck.py rpmlint-1.5.new/DocFilesCheck.py ---- rpmlint-1.5/DocFilesCheck.py 2014-02-27 12:06:24.826161897 +0100 -+++ rpmlint-1.5.new/DocFilesCheck.py 2014-02-27 12:04:29.681234928 +0100 -@@ -44,7 +44,7 @@ - - # register things which are provided by the package - for i in pkg.header[rpm.RPMTAG_PROVIDES]: -- core_reqs[i.decode()] = [] -+ core_reqs[i] = [] - for i in files: - core_reqs[i] = [] - -diff -ruN rpmlint-1.5/FilesCheck.py rpmlint-1.5.new/FilesCheck.py ---- rpmlint-1.5/FilesCheck.py 2014-02-27 12:06:25.012163393 +0100 -+++ rpmlint-1.5.new/FilesCheck.py 2014-02-27 12:04:41.277328352 +0100 -@@ -957,11 +957,11 @@ - - # Prefetch scriptlets, strip quotes from them (#169) - postin = (pkg[rpm.RPMTAG_POSTIN] or \ -- pkg.scriptprog(rpm.RPMTAG_POSTINPROG)).decode() -+ pkg.scriptprog(rpm.RPMTAG_POSTINPROG)) - if postin: - postin = quotes_regex.sub('', postin) - postun = (pkg[rpm.RPMTAG_POSTUN] or \ -- pkg.scriptprog(rpm.RPMTAG_POSTUNPROG)).decode() -+ pkg.scriptprog(rpm.RPMTAG_POSTUNPROG)) - if postun: - postun = quotes_regex.sub('', postun) - -diff -ruN rpmlint-1.5/LSBCheck.py rpmlint-1.5.new/LSBCheck.py ---- rpmlint-1.5/LSBCheck.py 2014-02-27 12:06:24.827161905 +0100 -+++ rpmlint-1.5.new/LSBCheck.py 2014-02-27 12:04:52.612419655 +0100 -@@ -32,13 +32,11 @@ - - version = pkg[rpm.RPMTAG_VERSION] - if version: -- version = version.decode() - if not version_regex.search(version): - printError(pkg, 'non-lsb-compliant-version', version) - - release = pkg[rpm.RPMTAG_RELEASE] - if release: -- release = release.decode() - if not version_regex.search(release): - printError(pkg, 'non-lsb-compliant-release', release) - -diff -ruN rpmlint-1.5/Pkg.py rpmlint-1.5.new/Pkg.py ---- rpmlint-1.5/Pkg.py 2014-02-27 12:06:25.041163626 +0100 -+++ rpmlint-1.5.new/Pkg.py 2014-02-27 12:03:33.599782891 +0100 -@@ -448,7 +448,7 @@ - os.close(fd) - self.is_source = not self.header[rpm.RPMTAG_SOURCERPM] - -- self.name = self.header[rpm.RPMTAG_NAME].decode() -+ self.name = self.header[rpm.RPMTAG_NAME] - if self.isNoSource(): - self.arch = 'nosrc' - elif self.isSource(): -@@ -534,7 +534,7 @@ - # LANGUAGE trumps other env vars per GNU gettext docs, see also #166 - orig = os.environ.get('LANGUAGE') - os.environ['LANGUAGE'] = lang -- ret = self[tag].decode() -+ ret = self[tag] - if orig is not None: - os.environ['LANGUAGE'] = orig - return ret -@@ -599,17 +599,17 @@ - modes = self.header[rpm.RPMTAG_FILEMODES] - users = self.header[rpm.RPMTAG_FILEUSERNAME] - groups = self.header[rpm.RPMTAG_FILEGROUPNAME] -- links = [x.decode() for x in self.header[rpm.RPMTAG_FILELINKTOS]] -+ links = self.header[rpm.RPMTAG_FILELINKTOS] - sizes = self.header[rpm.RPMTAG_FILESIZES] - md5s = self.header[rpm.RPMTAG_FILEMD5S] - mtimes = self.header[rpm.RPMTAG_FILEMTIMES] - rdevs = self.header[rpm.RPMTAG_FILERDEVS] - langs = self.header[rpm.RPMTAG_FILELANGS] - inodes = self.header[rpm.RPMTAG_FILEINODES] -- requires = [x.decode() for x in self.header[rpm.RPMTAG_FILEREQUIRE]] -- provides = [x.decode() for x in self.header[rpm.RPMTAG_FILEPROVIDE]] -- files = [x.decode() for x in self.header[rpm.RPMTAG_FILENAMES]] -- magics = [x.decode() for x in self.header[rpm.RPMTAG_FILECLASS]] -+ requires = self.header[rpm.RPMTAG_FILEREQUIRE] -+ provides = self.header[rpm.RPMTAG_FILEPROVIDE] -+ files = self.header[rpm.RPMTAG_FILENAMES] -+ magics = self.header[rpm.RPMTAG_FILECLASS] - try: # rpm >= 4.7.0 - filecaps = self.header[rpm.RPMTAG_FILECAPS] - except: -@@ -736,8 +736,8 @@ - - if versions: - for loop in range(len(versions)): -- name = names[loop].decode() -- evr = stringToVersion(versions[loop].decode()) -+ name = names[loop] -+ evr = stringToVersion(versions[loop]) - if prereq is not None and flags[loop] & PREREQ_FLAG: - prereq.append((name, flags[loop] & (~PREREQ_FLAG), evr)) - elif strong_only and flags[loop] & rpm.RPMSENSE_STRONG: -diff -ruN rpmlint-1.5/rpmdiff rpmlint-1.5.new/rpmdiff ---- rpmlint-1.5/rpmdiff 2014-02-27 12:06:24.826161897 +0100 -+++ rpmlint-1.5.new/rpmdiff 2014-02-27 12:03:50.387918248 +0100 -@@ -228,16 +228,16 @@ - if namestr == 'REQUIRES': - namestr = self.req2str(oldentry[1]) - self.__add(self.DEPFORMAT, -- (self.REMOVED, namestr, oldentry[0].decode(), -- self.sense2str(oldentry[1]), oldentry[2].decode())) -+ (self.REMOVED, namestr, oldentry[0], -+ self.sense2str(oldentry[1]), oldentry[2])) - for newentry in n: - if not newentry in o: - namestr = name - if namestr == 'REQUIRES': - namestr = self.req2str(newentry[1]) - self.__add(self.DEPFORMAT, -- (self.ADDED, namestr, newentry[0].decode(), -- self.sense2str(newentry[1]), newentry[2].decode())) -+ (self.ADDED, namestr, newentry[0], -+ self.sense2str(newentry[1]), newentry[2])) - - def __fileIteratorToDict(self, fi): - result = {} -diff -ruN rpmlint-1.5/TagsCheck.py rpmlint-1.5.new/TagsCheck.py ---- rpmlint-1.5/TagsCheck.py 2014-02-27 12:06:25.036163586 +0100 -+++ rpmlint-1.5.new/TagsCheck.py 2014-02-27 12:05:51.742895726 +0100 -@@ -536,7 +536,6 @@ - - packager = pkg[rpm.RPMTAG_PACKAGER] - if packager: -- packager = packager.decode() - self._unexpanded_macros(pkg, 'Packager', packager) - if Config.getOption('Packager') and \ - not packager_regex.search(packager): -@@ -546,7 +545,6 @@ - - version = pkg[rpm.RPMTAG_VERSION] - if version: -- version = version.decode() - self._unexpanded_macros(pkg, 'Version', version) - res = invalid_version_regex.search(version) - if res: -@@ -556,7 +554,6 @@ - - release = pkg[rpm.RPMTAG_RELEASE] - if release: -- release = release.decode() - self._unexpanded_macros(pkg, 'Release', release) - if release_ext and not extension_regex.search(release): - printWarning(pkg, 'not-standard-release-extension', release) -@@ -688,12 +685,9 @@ - ignored_words.update((x[0] for x in pkg.obsoletes())) - - langs = pkg[rpm.RPMTAG_HEADERI18NTABLE] -- if langs: -- langs = [x.decode() for x in langs] - - summary = pkg[rpm.RPMTAG_SUMMARY] - if summary: -- summary = summary.decode() - if not langs: - self._unexpanded_macros(pkg, 'Summary', summary) - else: -@@ -704,7 +698,6 @@ - - description = pkg[rpm.RPMTAG_DESCRIPTION] - if description: -- description = description.decode() - if not langs: - self._unexpanded_macros(pkg, '%description', description) - else: diff --git a/rpmlint-pkg-quoting.diff b/rpmlint-pkg-quoting.diff index 67a09f8..496acd9 100644 --- a/rpmlint-pkg-quoting.diff +++ b/rpmlint-pkg-quoting.diff @@ -1,9 +1,19 @@ -Index: Pkg.py +From 2fba34a1d8087aacb178556d0e40923b749e9035 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] rpmlint-pkg-quoting.diff + =================================================================== ---- Pkg.py.orig -+++ Pkg.py -@@ -493,7 +493,7 @@ class Pkg: - dir = self.dirname) +--- + Pkg.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Pkg.py b/Pkg.py +index cfaa5a9..f7dc31d 100644 +--- a/Pkg.py ++++ b/Pkg.py +@@ -536,7 +536,7 @@ class Pkg: + dir=self.dirname) # TODO: better shell escaping or sequence based command invocation command_str = \ - 'rpm2cpio "%s" | (cd "%s"; cpio -id); chmod -R +rX "%s"' % \ diff --git a/rpmlint-suse.diff b/rpmlint-suse.diff index f2879dc..6c65a8b 100644 --- a/rpmlint-suse.diff +++ b/rpmlint-suse.diff @@ -1,8 +1,19 @@ -Index: FilesCheck.py +From cb3e5a520e82ca2dd8a952e116067ada26d2497a Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:37 +0200 +Subject: [PATCH] rpmlint-suse.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -176,7 +176,7 @@ compr_regex = re.compile('\.(gz|z|Z|zip| +--- + FilesCheck.py | 2 +- + I18NCheck.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 1ad548b..1a70779 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -184,7 +184,7 @@ compr_regex = re.compile('\.(gz|z|Z|zip|bz2|lzma|xz)$') absolute_regex = re.compile('^/([^/]+)') absolute2_regex = re.compile('^/?([^/]+)') points_regex = re.compile('^\.\./(.*)') @@ -11,10 +22,10 @@ Index: FilesCheck.py bin_regex = re.compile('^/(?:usr/(?:s?bin|games)|s?bin)/(.*)') includefile_regex = re.compile('\.(c|h)(pp|xx)?$', re.IGNORECASE) develfile_regex = re.compile('\.(a|cmxa?|mli?)$') -Index: I18NCheck.py -=================================================================== ---- I18NCheck.py.orig -+++ I18NCheck.py +diff --git a/I18NCheck.py b/I18NCheck.py +index 54b42cd..3bcf9d0 100644 +--- a/I18NCheck.py ++++ b/I18NCheck.py @@ -30,7 +30,7 @@ INCORRECT_LOCALES = { 'en_UK': 'en_GB'} diff --git a/rpmlint.changes b/rpmlint.changes index d8770a9..51cb2f5 100644 --- a/rpmlint.changes +++ b/rpmlint.changes @@ -1,3 +1,45 @@ +------------------------------------------------------------------- +Fri Apr 10 11:16:01 UTC 2015 - lnussel@suse.de + +- new versioin 1.6 +- add script update_git.sh based on qemu's to simplify importing + a patch series from git after rebasing. +* Patches dropped: + 0001-Python-3-compatibility-tweaks.patch (upstream) + 0001-Set-Python-3.4-magic-number-to-3310.patch (upstream) + add-scoring-support.diff (different upstream solution) + check-buildroot-during-install.diff (need to fix no-cleaning-of-buildroot check upstream) + fix-versioned-prereq.diff (was disabled, not sure what it's useful for) + ignore-non-readable-in-etc.diff (filtered anyways) + locale-support.diff (drop) + locale-update.diff (different upstream solution now) + more-verbose-lsb-check.diff (drop) + perl-versioned-rpath-deps.diff (upstream) + rpmlint-1.5-disallow-var-run-and-var-lock.diff (upstream) + rpmlint-1.5-Fix-setgroups-error-name.diff (upstream) + rpmlint-decode-fix.diff (different upstream solution) + rpmlint-fix-unexpanded-macros-for-array-values.patch (different upstream solution) + stricter-tags-check.diff (merged in weak deps and check-for-self-provides.diff) + suppress-for-perl-python.diff (use filter instead) + suse-binary-info-compile-opts.diff (drop) + suse-changelog.patch (change config instead) + suse-mono-deps-checks.diff (useful?) + suse-required-lsb-tags.diff (different upstream solution) + verify-buildrequires.diff (very build system specific, drop) + xdg-check-exception.diff (upstream) +* renamed patches: + script-interpreter-only-for-exec-scripts.diff + -> script-interpreter-only-for-exec-sc.diff + confusing-invalid-spec-name.patch + -> confusing-invalid-spec-name.diff + suse-manpages-for-rc-scripts.patch + -> suse-manpages-for-rc-scripts.diff + sysv5-init-checks.diff + -> suse-sysv-init-checks.diff +* added patches: + check-for-self-provides.diff + save-content-to-an-array.diff + ------------------------------------------------------------------- Thu Apr 9 08:13:46 UTC 2015 - meissner@suse.com diff --git a/rpmlint.spec b/rpmlint.spec index 8ee19e2..3cc62a3 100644 --- a/rpmlint.spec +++ b/rpmlint.spec @@ -25,7 +25,7 @@ BuildRequires: xz Summary: Rpm correctness checker License: GPL-2.0+ Group: System/Packages -Version: 1.5 +Version: 1.6 Release: 0 Source0: https://downloads.sourceforge.net/project/rpmlint/rpmlint-%{version}.tar.xz Source1: rpmlint-checks-master.tar.gz @@ -49,88 +49,65 @@ Requires: python-magic Requires: rpm-python # Requirement for ErlangCheck.py (pull-request #2). Requires: python-pybeam -BuildArch: noarch # # Read README.packaging.txt before making any changes to this # package # -Patch0: rpmlint-suse.diff -Patch1: suse-checks.diff -Patch2: suse-version.diff -Patch3: suse-url-check.diff -Patch5: suse-python3-naming-policy.diff -Patch6: suse-filesystem.diff -Patch7: suse-pkg-config-check.diff -Patch8: suse-binarieschecks.diff -Patch9: no-doc-for-lib.diff -Patch10: add-scoring-support.diff -Patch11: suse-filter-exception.diff -Patch12: usr-arch.diff -Patch13: script-interpreter-only-for-exec-scripts.diff -Patch14: sourced-dirs.diff -Patch15: suse-filter-more-verbose.diff -Patch17: docdata-examples.diff -Patch18: 0001-Python-3-compatibility-tweaks.patch -Patch19: yast-provides.diff -Patch20: xdg-paths-update.diff -Patch22: better-wrong-script.diff -Patch23: buildroot-doc.diff -Patch24: sysv5-init-checks.diff -Patch26: ignore-non-readable-in-etc.diff -Patch29: rpmgroup-checks.diff -Patch30: devel-provide-is-devel-package.diff -Patch31: only-reg-files-are-scripts.diff -Patch33: check-buildroot-during-install.diff -Patch34: verify-buildrequires.diff -Patch35: fix-versioned-prereq.diff -Patch37: buildroot-in-scripts.diff -Patch39: libtool-wrapper-check.diff -Patch41: perl-versioned-rpath-deps.diff -Patch42: suse-check-optional-dependencies.diff -Patch46: locale-support.diff -# not is also in CheckFilelist.py -Patch47: noarch-lib64.diff -Patch49: stricter-tags-check.diff -Patch50: suse-no-run-ldconfig.diff -Patch51: description-check.diff -# this is the wrong place here -Patch52: suppress-for-perl-python.diff -Patch54: locale-update.diff -Patch57: suse-mono-deps-checks.diff -Patch58: add-weak-dependencies.diff -Patch60: selfconflicts-provide.diff -Patch62: no-badness-return.diff -Patch65: suse-shlib-devel-dependency.diff -Patch67: suse-required-lsb-tags.diff -Patch68: more-verbose-lsb-check.diff -Patch71: suse-binary-info-compile-opts.diff -Patch72: version-control-internal-file.diff -Patch73: avoid-mismatched-libregex.diff -Patch74: filename-non-utf8-exception.diff -Patch75: stricter-interpreter-check.diff -Patch76: confusing-invalid-spec-name.patch -Patch77: rpmlint-pkg-quoting.diff -Patch78: suse-g-ir-chech.diff -Patch80: remove-expand-macros.diff -Patch81: suse-whitelist-opensuse.diff -Patch84: extend-suse-conffiles-check.diff -Patch85: suse-changelog.patch -Patch87: compressed-backup-regex.diff -# accepted upstream -Patch88: suse-speccheck-utf8.diff -Patch89: suse-python-abi-check.diff -# PATCH-FIX-OPENSUSE: saschpe@suse.de - Don't complain about missing man-pages for rc-scripts -Patch91: suse-manpages-for-rc-scripts.patch -# PATCH-FIX-UPSTREAM: lnussel@suse.de - Fix setgroups error name -Patch92: rpmlint-1.5-Fix-setgroups-error-name.diff -Patch93: xdg-check-exception.diff -Patch94: suse-ignore-specfile-errors.diff -Patch95: invalid-filerequires.diff -Patch96: rpmlint-decode-fix.diff -Patch97: rpmlint-fix-unexpanded-macros-for-array-values.patch -# PATCH-FIX-UPSTREAM: lnussel@suse.de - disallow /var/run and /var/lock -Patch98: rpmlint-1.5-disallow-var-run-and-var-lock.diff -Patch99: 0001-Set-Python-3.4-magic-number-to-3310.patch +# PATCHLIST BEGIN +Patch00: rpmlint-suse.diff +Patch01: suse-checks.diff +Patch02: suse-version.diff +Patch03: suse-url-check.diff +Patch04: suse-python3-naming-policy.diff +Patch05: suse-filesystem.diff +Patch06: suse-pkg-config-check.diff +Patch07: suse-binarieschecks.diff +Patch08: no-doc-for-lib.diff +Patch09: suse-filter-exception.diff +Patch10: usr-arch.diff +Patch11: script-interpreter-only-for-exec-sc.diff +Patch12: sourced-dirs.diff +Patch13: suse-filter-more-verbose.diff +Patch14: docdata-examples.diff +Patch15: yast-provides.diff +Patch16: xdg-paths-update.diff +Patch17: better-wrong-script.diff +Patch18: buildroot-doc.diff +Patch19: rpmgroup-checks.diff +Patch20: devel-provide-is-devel-package.diff +Patch21: only-reg-files-are-scripts.diff +Patch22: buildroot-in-scripts.diff +Patch23: libtool-wrapper-check.diff +Patch24: suse-check-optional-dependencies.diff +Patch25: noarch-lib64.diff +Patch26: suse-no-run-ldconfig.diff +Patch27: description-check.diff +Patch28: add-weak-dependencies.diff +Patch29: selfconflicts-provide.diff +Patch30: no-badness-return.diff +Patch31: suse-shlib-devel-dependency.diff +Patch32: version-control-internal-file.diff +Patch33: avoid-mismatched-libregex.diff +Patch34: filename-non-utf8-exception.diff +Patch35: stricter-interpreter-check.diff +Patch36: confusing-invalid-spec-name.diff +Patch37: rpmlint-pkg-quoting.diff +Patch38: suse-g-ir-chech.diff +Patch39: remove-expand-macros.diff +Patch40: suse-whitelist-opensuse.diff +Patch41: extend-suse-conffiles-check.diff +Patch42: compressed-backup-regex.diff +Patch43: suse-speccheck-utf8.diff +Patch44: suse-python-abi-check.diff +Patch45: suse-manpages-for-rc-scripts.diff +Patch46: suse-ignore-specfile-errors.diff +Patch47: invalid-filerequires.diff +Patch48: suse-sysv-init-checks.diff +Patch49: check-for-self-provides.diff +Patch50: save-content-to-an-array.diff +# PATCHLIST END +# BuildArch must at the and. is a bug: https://bugzilla.suse.com/show_bug.cgi?id=926766 +BuildArch: noarch %py_requires @@ -139,80 +116,7 @@ Rpmlint is a tool to check common errors on rpm packages. Binary and source packages can be checked. %prep -%setup -q -n rpmlint-%{version} -a1 -%patch0 -%patch1 -%patch2 -%patch3 -%patch5 -%patch6 -%patch7 -%patch8 -%patch9 -#%patch10 -%patch11 -%patch12 -%patch13 -%patch14 -%patch15 -%patch17 -%patch18 -p1 -%patch19 -%patch20 -%patch22 -%patch23 -%patch24 -#%patch26 -%patch29 -%patch30 -%patch31 -# needs rediff -#%patch33 -#%patch34 -#%patch35 -%patch37 -%patch39 -#%patch41 -%patch42 -#%patch46 -%patch47 -#%patch49 -%patch50 -%patch51 -#%patch52 -### rediff! -#%patch54 -#%patch57 -%patch58 -%patch60 -%patch62 -%patch65 -#%patch67 -#%patch68 -#%patch71 -%patch72 -%patch73 -%patch74 -%patch75 -%patch76 -p1 -%patch77 -%patch78 -%patch80 -%patch81 -%patch84 -%patch85 -%patch87 -%patch88 -%patch89 -%patch91 -p1 -%patch92 -p1 -%patch93 -p1 -%patch94 -%patch95 -%patch96 -p1 -%patch97 -p1 -%patch98 -p1 -%patch99 -p1 +%autosetup -n rpmlint-%{version} -a1 -p1 cp -p %{SOURCE2} . # Only move top-level python files chmod 0755 rpmlint-checks-master/*.py @@ -251,5 +155,6 @@ rm -rf $RPM_BUILD_ROOT %config %{_sysconfdir}/rpmlint/licenses.config %dir /etc/rpmlint /usr/share/man/man1/rpmlint.1.gz +/usr/share/man/man1/rpmdiff.1.gz %changelog diff --git a/save-content-to-an-array.diff b/save-content-to-an-array.diff new file mode 100644 index 0000000..e3e63a4 --- /dev/null +++ b/save-content-to-an-array.diff @@ -0,0 +1,31 @@ +From 6e26550f7b5583ab15ed5573bf8093d0adbf4cb0 Mon Sep 17 00:00:00 2001 +From: Ludwig Nussel +Date: Fri, 10 Apr 2015 16:22:26 +0200 +Subject: [PATCH rpmlint] save content to an array + +due to the following join the generator would be at the end so iterating +through lines wouldn't work + +Upstream ticket: +https://sourceforge.net/p/rpmlint/tickets/44/ + +--- + InitScriptCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/InitScriptCheck.py b/InitScriptCheck.py +index 1a58562..9d197e5 100644 +--- a/InitScriptCheck.py ++++ b/InitScriptCheck.py +@@ -103,7 +103,7 @@ class InitScriptCheck(AbstractCheck.AbstractCheck): + # check common error in file content + content = None + try: +- content = Pkg.readlines(pkgfile.path) ++ content = [ x for x in Pkg.readlines(pkgfile.path) ] + except Exception: + e = sys.exc_info()[1] + printWarning(pkg, 'read-error', e) +-- +2.3.4 + diff --git a/script-interpreter-only-for-exec-sc.diff b/script-interpreter-only-for-exec-sc.diff new file mode 100644 index 0000000..69a40a7 --- /dev/null +++ b/script-interpreter-only-for-exec-sc.diff @@ -0,0 +1,23 @@ +From 02de6fffb97981397beb75738c2a2afe4e47fd02 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] script-interpreter-only-for-exec-scripts.diff + +=================================================================== +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 5929146..80148c4 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -1242,7 +1242,7 @@ class FilesCheck(AbstractCheck.AbstractCheck): + # ...but executed ones should + elif interpreter or mode_is_exec or script_regex.search(f): + if interpreter: +- if not interpreter_regex.search(interpreter): ++ if mode & 0111 != 0 and not interpreter_regex.search(interpreter): + printError(pkg, 'wrong-script-interpreter', + f, interpreter) + elif not nonexec_file and not \ diff --git a/script-interpreter-only-for-exec-scripts.diff b/script-interpreter-only-for-exec-scripts.diff deleted file mode 100644 index 4158f66..0000000 --- a/script-interpreter-only-for-exec-scripts.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: FilesCheck.py -=================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -1219,7 +1219,7 @@ class FilesCheck(AbstractCheck.AbstractC - elif interpreter or mode & 0111 != 0 or \ - script_regex.search(f): - if interpreter: -- if not interpreter_regex.search(interpreter): -+ if mode & 0111 != 0 and not interpreter_regex.search(interpreter): - printError(pkg, 'wrong-script-interpreter', - f, interpreter) - elif not nonexec_file and not \ diff --git a/selfconflicts-provide.diff b/selfconflicts-provide.diff index 0a6962f..a8ab7f7 100644 --- a/selfconflicts-provide.diff +++ b/selfconflicts-provide.diff @@ -1,8 +1,18 @@ -Index: TagsCheck.py +From aecc6b2cfb248014dd769a31a0aeb8f1bcec180b Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] selfconflicts-provide.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -827,6 +827,7 @@ class TagsCheck(AbstractCheck.AbstractCh +--- + TagsCheck.py | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/TagsCheck.py b/TagsCheck.py +index 6528d5b..18cbb6e 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -829,6 +829,7 @@ class TagsCheck(AbstractCheck.AbstractCheck): obs_names = [x[0] for x in pkg.obsoletes()] prov_names = [x[0].split(':/')[0] for x in pkg.provides()] @@ -10,7 +20,7 @@ Index: TagsCheck.py for o in (x for x in obs_names if x not in prov_names): printWarning(pkg, 'obsolete-not-provided', o) -@@ -838,6 +839,8 @@ class TagsCheck(AbstractCheck.AbstractCh +@@ -840,6 +841,8 @@ class TagsCheck(AbstractCheck.AbstractCheck): # https://bugzilla.redhat.com/460872 useless_provides = [] for p in prov_names: @@ -19,7 +29,7 @@ Index: TagsCheck.py if prov_names.count(p) != 1 and p not in useless_provides: useless_provides.append(p) for p in useless_provides: -@@ -978,6 +981,10 @@ the Release tag.''', +@@ -999,6 +1002,10 @@ the Release tag.''', '''There is no Name tag in your package. You have to specify a name using the Name tag.''', diff --git a/sourced-dirs.diff b/sourced-dirs.diff index ea37133..46693b7 100644 --- a/sourced-dirs.diff +++ b/sourced-dirs.diff @@ -1,9 +1,19 @@ -Index: FilesCheck.py +From 77dda1bf07bd9468e5b0efe15b1b93aca4f460d9 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] sourced-dirs.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -634,7 +634,7 @@ manifest_perl_regex = re.compile('^/usr/ - shebang_regex = re.compile('^#!\s*(\S+)') +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 80148c4..c485125 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -642,7 +642,7 @@ manifest_perl_regex = re.compile('^/usr/share/doc/perl-.*/MANIFEST(\.SKIP)?$') + shebang_regex = re.compile(b'^#!\s*(\S+)') interpreter_regex = re.compile('^/(usr/)?(s?bin|games|libexec(/.+)?|(lib(64)?|share)/.+)/[^/]+$') script_regex = re.compile('^/((usr/)?s?bin|etc/(rc\.d/init\.d|X11/xinit\.d|cron\.(hourly|daily|monthly|weekly)))/') -sourced_script_regex = re.compile('^/etc/(bash_completion\.d|profile\.d)/') diff --git a/stricter-interpreter-check.diff b/stricter-interpreter-check.diff index deef382..e6a1852 100644 --- a/stricter-interpreter-check.diff +++ b/stricter-interpreter-check.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From e8167b76e48fdbd98062fa05e72e40fdb98eee96 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] stricter-interpreter-check.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -1245,7 +1245,8 @@ class FilesCheck(AbstractCheck.AbstractC +--- + FilesCheck.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 14cfca3..1b68dd5 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -1265,7 +1265,8 @@ class FilesCheck(AbstractCheck.AbstractCheck): f.endswith('.la')): printError(pkg, 'script-without-shebang', f) @@ -11,4 +21,4 @@ Index: FilesCheck.py + interpreter and interpreter.startswith("/"): printError(pkg, 'non-executable-script', f, oct(perm), interpreter) - if '\r' in chunk: + if b'\r' in chunk: diff --git a/stricter-tags-check.diff b/stricter-tags-check.diff deleted file mode 100644 index 72914f1..0000000 --- a/stricter-tags-check.diff +++ /dev/null @@ -1,84 +0,0 @@ ---- TagsCheck.py -+++ TagsCheck.py -@@ -509,7 +509,7 @@ - printError(pkg, 'explicit-lib-dependency', d[0]) - if d[2] == rpm.RPMSENSE_EQUAL and string.find(d[1], '-') != -1: - printWarning(pkg, 'requires-on-release', d[0], d[1]) -- if string.find(d[1], '%') != -1: -+ if string.find(d[1], '%') != -1 or string.find(d[0], '%') != -1: - printError(pkg, 'percent-in-dependency', d[0], d[1]) - - if not name: -@@ -680,6 +680,7 @@ - - obs_names = map(lambda x: x[0], pkg.obsoletes()) - prov_names = map(lambda x: x[0].split(':/')[0], pkg.provides()) -+ req_names = map(lambda x: x[0], pkg.requires() + pkg.prereq()) - - if pkg.name in obs_names: - printError(pkg, 'obsolete-on-name') -@@ -687,7 +688,7 @@ - if not o in prov_names: - printWarning(pkg, 'obsolete-not-provided', o) - for o in pkg.obsoletes(): -- if string.find(o[1], '%') != -1: -+ if string.find(o[1], '%') != -1 or string.find(o[0], '%') != -1: - printError(pkg, 'percent-in-obsoletes', o[0], o[1]) - - # TODO: should take versions, <, <=, =, >=, > into account here -@@ -700,14 +701,41 @@ - for p in useless_provides: - printError(pkg, 'useless-provides', p) - -+ useless_reqs=set() -+ for r in req_names: -+ if not r in useless_reqs: -+ useless_reqs.add(r) -+ else: -+ if r[0] != '/': -+ printWarning(pkg, 'useless-explicit-requires', r) -+ - for p in pkg.provides(): -- if string.find(p[1], '%') != -1: -+ if string.find(p[1], '%') != -1 or string.find(p[0], '%') != -1: - printError(pkg, 'percent-in-provides', p[0], p[1]) - -+ if p[0] == pkg.name and not p[1]: -+ printError(pkg, 'unversioned-explicit-self-provides', p[0]) -+ - for c in pkg.conflicts(): -- if string.find(c[1], '%') != -1: -+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1: - printError(pkg, 'percent-in-conflicts', c[0], c[1]) - -+ for c in pkg.supplements(): -+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1: -+ printError(pkg, 'percent-in-supplements', c[0], c[1]) -+ -+ for c in pkg.suggests(): -+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1: -+ printError(pkg, 'percent-in-suggests', c[0], c[1]) -+ -+ for c in pkg.enhances(): -+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1: -+ printError(pkg, 'percent-in-enhances', c[0], c[1]) -+ -+ for c in pkg.recommends(): -+ if string.find(c[1], '%') != -1 or string.find(c[0], '%') != -1: -+ printError(pkg, 'percent-in-recommends', c[0], c[1]) -+ - expected='%s-%s-%s.%s.rpm' % (name, version, release, pkg.arch) - basename=string.split(pkg.filename, '/')[-1] - if basename != expected: -@@ -897,6 +925,10 @@ - '''This package provides 2 times the same capacity. It should only provide it - once.''', - -+'unversioned-explicit-self-provides', -+'''This package provides it's own name explicitely, which might break -+upgrade path. self-provides are autogenerated. Remove the provide.''', -+ - 'obsolete-on-name', - '''A package should not obsolete itself, as it can cause weird errors in tools.''', - -Nur in b/rpmlint-0.85: TagsCheck.py.rej. diff --git a/suppress-for-perl-python.diff b/suppress-for-perl-python.diff deleted file mode 100644 index 86c749e..0000000 --- a/suppress-for-perl-python.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- FilesCheck.py -+++ FilesCheck.py -@@ -971,7 +971,7 @@ class FilesCheck(AbstractCheck.AbstractCheck): - - if not perl_dep_error: - res=perl_regex.search(f) -- if res: -+ if res and not pkg.name in ('perl', 'perl-base'): - if perl_version_trick: - vers = res.group(1) + '.' + res.group(2) - else: -@@ -981,7 +981,7 @@ class FilesCheck(AbstractCheck.AbstractCheck): - printError(pkg, 'no-dependency-on', 'perl-base', vers) - perl_dep_error=1 - -- if not python_dep_error: -+ if not python_dep_error and not pkg.name in ('python', 'python-base'): - res=python_regex.search(f) - if res: - if not (pkg.check_versioned_dep('python-base', res.group(1)) or diff --git a/suse-binarieschecks.diff b/suse-binarieschecks.diff index 7c3703c..416b8a7 100644 --- a/suse-binarieschecks.diff +++ b/suse-binarieschecks.diff @@ -1,12 +1,18 @@ -Index: BinariesCheck.py +From 44ff92a4575956ffdcef5b3aad6ffa284b9f2282 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] suse-binarieschecks.diff + =================================================================== ---- BinariesCheck.py.orig -+++ BinariesCheck.py -@@ -9,13 +9,15 @@ - - import re - import stat -+import os +--- + BinariesCheck.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 56 insertions(+), 2 deletions(-) + +diff --git a/BinariesCheck.py b/BinariesCheck.py +index 4634eed..a74d3e3 100644 +--- a/BinariesCheck.py ++++ b/BinariesCheck.py +@@ -14,7 +14,7 @@ import sys import rpm @@ -15,11 +21,7 @@ Index: BinariesCheck.py import AbstractCheck import Config import Pkg -+import os - - - DEFAULT_SYSTEM_LIB_PATHS = ( -@@ -42,6 +44,9 @@ class BinaryInfo: +@@ -46,6 +46,9 @@ class BinaryInfo: unused_regex = re.compile('^\s+(\S+)') exit_call_regex = create_regexp_call('_?exit') fork_call_regex = create_regexp_call('fork') @@ -27,9 +29,9 @@ Index: BinariesCheck.py + symtab_regex=re.compile('^\s+\[\s*\d+\]\s+\.symtab\s+') + gethostbyname_call_regex = re.compile('\s+FUNC\s+.*?\s+(gethostbyname(?:@\S+)?)(?:\s|$)') # regexp for setgid setegid setresgid set(?:res|e)?gid - setgid_call_regex = create_regexp_call(['setresgid','setegid','setgid']) - setuid_call_regex = create_regexp_call(['setresuid','seteuid','setuid']) -@@ -62,7 +67,10 @@ class BinaryInfo: + setgid_call_regex = create_regexp_call(['setresgid', 'setegid', 'setgid']) + setuid_call_regex = create_regexp_call(['setresuid', 'seteuid', 'setuid']) +@@ -66,7 +69,10 @@ class BinaryInfo: self.stack = False self.exec_stack = False self.exit_calls = [] @@ -40,7 +42,7 @@ Index: BinariesCheck.py self.tail = '' self.setgid = False -@@ -131,6 +139,11 @@ class BinaryInfo: +@@ -135,6 +141,11 @@ class BinaryInfo: self.exec_stack = True continue @@ -52,7 +54,7 @@ Index: BinariesCheck.py if is_shlib: r = BinaryInfo.exit_call_regex.search(l) if r: -@@ -141,6 +154,14 @@ class BinaryInfo: +@@ -145,6 +156,14 @@ class BinaryInfo: fork_called = True continue @@ -67,7 +69,7 @@ Index: BinariesCheck.py if self.non_pic: self.non_pic = 'TEXTREL' in res[1] -@@ -330,13 +351,26 @@ class BinariesCheck(AbstractCheck.Abstra +@@ -339,13 +358,26 @@ class BinariesCheck(AbstractCheck.AbstractCheck): continue # stripped ? @@ -95,7 +97,7 @@ Index: BinariesCheck.py if is_shlib: has_lib = True -@@ -386,6 +420,10 @@ class BinariesCheck(AbstractCheck.Abstra +@@ -396,6 +428,10 @@ class BinariesCheck(AbstractCheck.AbstractCheck): for ec in bin_info.exit_calls: printWarning(pkg, 'shared-lib-calls-exit', fname, ec) @@ -106,7 +108,7 @@ Index: BinariesCheck.py # rpath ? if bin_info.rpath: for p in bin_info.rpath: -@@ -590,6 +628,14 @@ with the intended shared libraries only. +@@ -603,6 +639,14 @@ with the intended shared libraries only.''', 'ldd-failed', '''Executing ldd on this file failed, all checks could not be run.''', @@ -121,7 +123,7 @@ Index: BinariesCheck.py 'executable-stack', '''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 -@@ -602,6 +648,10 @@ don\'t define a proper .note.GNU-stack s +@@ -615,6 +659,10 @@ don\'t define a proper .note.GNU-stack section.''', make the stack executable. Usual suspects include use of a non-GNU linker or an old GNU linker version.''', @@ -132,7 +134,7 @@ Index: BinariesCheck.py 'shared-lib-calls-exit', '''This library package calls exit() or _exit(), probably in a non-fork() context. Doing so from a library is strongly discouraged - when a library -@@ -620,6 +670,12 @@ that use prelink, make sure that prelink +@@ -633,6 +681,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 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=256900#49''', diff --git a/suse-binary-info-compile-opts.diff b/suse-binary-info-compile-opts.diff deleted file mode 100644 index a5f6369..0000000 --- a/suse-binary-info-compile-opts.diff +++ /dev/null @@ -1,25 +0,0 @@ ---- BinariesCheck.py -+++ BinariesCheck.py -@@ -56,10 +56,11 @@ - self.debuginfo=0 - self.symtab=0 - self.tail = '' -+ self.compileOpts = set() - - is_debug=BinaryInfo.debug_file_regex.search(path) - -- cmd = ['env', 'LC_ALL=C', 'readelf', '-W', '-S', '-l', '-d', '-s'] -+ cmd = ['env', 'LC_ALL=C', 'readelf', '-W', '-S', '-l', '-d', '-s', '-p', '.comment.SUSE.OPTs'] - cmd.append(path) - res = Pkg.getstatusoutput(cmd) - if not res[0]: -@@ -115,6 +116,9 @@ - self.symtab=1 - continue - -+ if l.lower().find(" ospwg") != -1: -+ self.compileOpts.add(l.rpartition(' ')[2]) -+ - if self.non_pic: - self.non_pic=BinaryInfo.non_pic_regex.search(res[1]) - diff --git a/suse-check-optional-dependencies.diff b/suse-check-optional-dependencies.diff index bc285a5..ffe5a28 100644 --- a/suse-check-optional-dependencies.diff +++ b/suse-check-optional-dependencies.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From e9849cceb327c1a6ebf6d0a4ba0cf15d3256776c Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] suse-check-optional-dependencies.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -908,6 +908,16 @@ class FilesCheck(AbstractCheck.AbstractC +--- + FilesCheck.py | 28 ++++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + +diff --git a/FilesCheck.py b/FilesCheck.py +index ae9c364..7d2b92f 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -926,6 +926,16 @@ class FilesCheck(AbstractCheck.AbstractCheck): if res.group(1) != pkg.name: printError(pkg, 'incoherent-logrotate-file', f) @@ -19,7 +29,7 @@ Index: FilesCheck.py if link != '': ext = compr_regex.search(link) if ext: -@@ -1730,6 +1740,24 @@ consequences), or other compiler flags w +@@ -1717,6 +1727,24 @@ consequences), or other compiler flags which result in rpmbuild's debuginfo extraction not working as expected. Verify that the binaries are not unexpectedly stripped and that the intended compiler flags are used.''', diff --git a/suse-checks.diff b/suse-checks.diff index ece15c2..13fdfc5 100644 --- a/suse-checks.diff +++ b/suse-checks.diff @@ -1,7 +1,17 @@ -Index: Config.py +From 80b89c397099061098a00df263ad3c451f2beaf0 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:37 +0200 +Subject: [PATCH] suse-checks.diff + =================================================================== ---- Config.py.orig -+++ Config.py +--- + Config.py | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/Config.py b/Config.py +index ac3c5ea..f27607c 100644 +--- a/Config.py ++++ b/Config.py @@ -16,14 +16,13 @@ try: except ImportError: __version__ = 'devel' diff --git a/suse-filesystem.diff b/suse-filesystem.diff index eb5feba..0b5dbc8 100644 --- a/suse-filesystem.diff +++ b/suse-filesystem.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From 183222dd3232a4f6d8cde5b4b66aa4c49986bdc4 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] suse-filesystem.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -103,24 +103,415 @@ STANDARD_DIRS = ( +--- + FilesCheck.py | 454 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 437 insertions(+), 17 deletions(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 1a70779..9532011 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -102,24 +102,415 @@ STANDARD_DIRS = ( '/usr/local/man/mann', '/usr/local/sbin', '/usr/local/share', @@ -429,7 +439,7 @@ Index: FilesCheck.py '/usr/share/man', '/usr/share/man/man1', '/usr/share/man/man2', -@@ -132,28 +523,57 @@ STANDARD_DIRS = ( +@@ -131,25 +522,54 @@ STANDARD_DIRS = ( '/usr/share/man/man8', '/usr/share/man/man9', '/usr/share/man/mann', @@ -473,14 +483,11 @@ Index: FilesCheck.py + '/var/lib/nobody', + '/var/lib/pam_devperm', + '/var/lib/wwwrun', - '/var/lock', - '/var/lock/subsys', '/var/log', '/var/mail', - '/var/nis', '/var/opt', - '/var/preserve', - '/var/run', '/var/spool', + '/var/spool/clientmqueue', + '/var/spool/locks', diff --git a/suse-filter-exception.diff b/suse-filter-exception.diff index 1e69d05..0b4eaac 100644 --- a/suse-filter-exception.diff +++ b/suse-filter-exception.diff @@ -1,8 +1,18 @@ -Index: Config.py +From 33fa1e8f8c1917d82d26c419321efb7ba9eddc48 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] suse-filter-exception.diff + =================================================================== ---- Config.py.orig -+++ Config.py -@@ -102,11 +102,23 @@ def getOption(name, default = ""): +--- + Config.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------- + 1 file changed, 54 insertions(+), 7 deletions(-) + +diff --git a/Config.py b/Config.py +index f27607c..b4e19cc 100644 +--- a/Config.py ++++ b/Config.py +@@ -111,12 +111,23 @@ def getOption(name, default=""): _filters = [] _filters_re = None @@ -11,7 +21,7 @@ Index: Config.py + +_filters_except = [] +_filters_except_re = None -+ + def addFilter(s): global _filters_re + global _filters_except @@ -26,10 +36,10 @@ Index: Config.py - _filters.append(s) - _filters_re = None + def removeFilter(s): - global _filters_re -@@ -121,19 +133,38 @@ def removeFilter(s): - _scoring = {} +@@ -133,8 +144,13 @@ _scoring = {} + def setBadness(s, score): + global _scoring @@ -39,11 +49,11 @@ Index: Config.py + global _filters_except + + _filters_except.append(s) -+ + def badness(s): return _scoring.get(s, 0) +@@ -144,11 +160,24 @@ _non_named_group_re = re.compile('[^\\](\()[^:]') - _non_named_group_re = re.compile('[^\\](\()[^:]') def isFiltered(s): global _filters_re + global _filters_except @@ -51,7 +61,7 @@ Index: Config.py + global _filters_non_except + global _filters_non_except_re -- if _filters_re == None: +- if _filters_re is None: - # no filter - if len(_filters) == 0: - return False @@ -71,8 +81,8 @@ Index: Config.py _filters_re = '(?:' + _filters[0] + ')' for idx in range(1, len(_filters)): -@@ -145,9 +176,27 @@ def isFiltered(s): - _filters_re = _filters_re + '|(?:' + _filters[idx] +')' +@@ -160,9 +189,27 @@ def isFiltered(s): + _filters_re = _filters_re + '|(?:' + _filters[idx] + ')' _filters_re = re.compile(_filters_re) + if _filters_except_re == None and len(_filters_except): diff --git a/suse-filter-more-verbose.diff b/suse-filter-more-verbose.diff index 8d3baa6..0888bdc 100644 --- a/suse-filter-more-verbose.diff +++ b/suse-filter-more-verbose.diff @@ -1,7 +1,17 @@ -Index: Config.py +From 901114eb2ec05cbf2ad16557f0d24cfbc6e8717f Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] suse-filter-more-verbose.diff + =================================================================== ---- Config.py.orig -+++ Config.py +--- + Config.py | 25 +++++++++++++++++++++++-- + 1 file changed, 23 insertions(+), 2 deletions(-) + +diff --git a/Config.py b/Config.py +index b4e19cc..c29db24 100644 +--- a/Config.py ++++ b/Config.py @@ -10,6 +10,7 @@ import locale import os.path @@ -10,7 +20,7 @@ Index: Config.py try: from __version__ import __version__ -@@ -162,7 +163,17 @@ def isFiltered(s): +@@ -175,7 +176,17 @@ def isFiltered(s): if '(' in _filters_non_except[idx]: _non_named_group_re.subn('(:?', _filters_non_except[idx]) _filters_non_except_re = _filters_non_except_re + '|(?:' + _filters_non_except[idx] +')' @@ -29,10 +39,10 @@ Index: Config.py if _filters_re == None and len(_filters): _filters_re = '(?:' + _filters[0] + ')' -@@ -174,7 +185,17 @@ def isFiltered(s): +@@ -187,7 +198,17 @@ def isFiltered(s): if '(' in _filters[idx]: _non_named_group_re.subn('(:?', _filters[idx]) - _filters_re = _filters_re + '|(?:' + _filters[idx] +')' + _filters_re = _filters_re + '|(?:' + _filters[idx] + ')' - _filters_re = re.compile(_filters_re) + try: + _filters_re = re.compile(_filters_re) diff --git a/suse-g-ir-chech.diff b/suse-g-ir-chech.diff index 41af1f1..af28ba6 100644 --- a/suse-g-ir-chech.diff +++ b/suse-g-ir-chech.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From 63be0917d8528f33739c7360631a3a69fa22186c Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] suse-g-ir-chech.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -599,7 +599,7 @@ points_regex = re.compile('^\.\./(.*)') +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 1b68dd5..0bb4b3d 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -607,7 +607,7 @@ points_regex = re.compile('^\.\./(.*)') doc_regex = re.compile('^/usr(/share|/X11R6)?/(doc|man|info)/|^/opt/kde3/share/doc|^/usr/share/gnome/help') bin_regex = re.compile('^/(?:usr/(?:s?bin|games)|s?bin)/(.*)') includefile_regex = re.compile('\.(c|h)(pp|xx)?$', re.IGNORECASE) diff --git a/suse-ignore-specfile-errors.diff b/suse-ignore-specfile-errors.diff index a1d9ab5..5656a0f 100644 --- a/suse-ignore-specfile-errors.diff +++ b/suse-ignore-specfile-errors.diff @@ -1,10 +1,20 @@ -Index: SpecCheck.py +From 70405312535d40c4d3489834af7a1676b10a63ae Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] suse-ignore-specfile-errors.diff + =================================================================== ---- SpecCheck.py.orig -+++ SpecCheck.py -@@ -537,9 +537,8 @@ class SpecCheck(AbstractCheck.AbstractCh - printWarning(pkg, "patch-not-applied", "Patch%d:" % pnum, - pfile) +--- + SpecCheck.py | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/SpecCheck.py b/SpecCheck.py +index 60e946b..ace044c 100644 +--- a/SpecCheck.py ++++ b/SpecCheck.py +@@ -562,9 +562,8 @@ class SpecCheck(AbstractCheck.AbstractCheck): + printWarning(pkg, "patch-not-applied", + "Patch%d:" % pnum, pfile) - # Rest of the checks require a real spec file - if not self._spec_file: diff --git a/suse-manpages-for-rc-scripts.diff b/suse-manpages-for-rc-scripts.diff new file mode 100644 index 0000000..e7aebfc --- /dev/null +++ b/suse-manpages-for-rc-scripts.diff @@ -0,0 +1,23 @@ +From 9d8086e75306f2e90ba402514a6c53da507c0467 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] suse-manpages-for-rc-scripts + +=================================================================== +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 214ac76..5342871 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -1426,7 +1426,7 @@ class FilesCheck(AbstractCheck.AbstractCheck): + for exe, paths in bindir_exes.items(): + if len(paths) > 1: + printWarning(pkg, "duplicate-executable", exe, paths) +- if exe not in man_basenames: ++ if exe not in man_basenames and not exe.startswith("rc") and len(paths) is not 0: + printWarning(pkg, "no-manual-page-for-binary", exe) + + # Create an object to enable the auto registration of the test diff --git a/suse-mono-deps-checks.diff b/suse-mono-deps-checks.diff deleted file mode 100644 index 78cbb83..0000000 --- a/suse-mono-deps-checks.diff +++ /dev/null @@ -1,32 +0,0 @@ ---- TagsCheck.py -+++ TagsCheck.py -@@ -686,6 +686,17 @@ class TagsCheck(AbstractCheck.AbstractCheck): - for p in useless_provides: - printError(pkg, 'useless-explicit-provides',p) - -+ have_mono_reqs=False -+ for r in req_names + prov_names: -+ if r.startswith('mono('): -+ have_mono_reqs=True -+ break -+ -+ if not have_mono_reqs: -+ for fname in pkg.files(): -+ if fname.endswith('.dll'): -+ printError(pkg, 'mono-versioned-deps-missing', fname) -+ - useless_reqs=set() - for r in reqs: - if not r in useless_reqs: -@@ -901,6 +912,11 @@ upgrade path. self-provides are autogenerated. Remove the provide.''', - 'obsolete-on-name', - '''A package should not obsolete itself, as it can cause weird errors in tools.''', - -+'mono-versioned-deps-missing', -+'''This package appears to be related to mono, but doesn't have versioned -+mono provides being generated. Add mono-devel to the buildrequires to -+build the package with the correct provides.''', -+ - 'invalid-filepath-dependency', - '''A package has a file or path based dependency that is not resolveable for - package solvers because it is not in the whitelist for path based dependencies diff --git a/suse-no-run-ldconfig.diff b/suse-no-run-ldconfig.diff index b0011a1..f7f5360 100644 --- a/suse-no-run-ldconfig.diff +++ b/suse-no-run-ldconfig.diff @@ -1,9 +1,19 @@ -Index: SpecCheck.py +From cc1c035a8d572cd0005d999e4e1f3dc76a31efd4 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] suse-no-run-ldconfig.diff + =================================================================== ---- SpecCheck.py.orig -+++ SpecCheck.py -@@ -424,6 +424,10 @@ class SpecCheck(AbstractCheck.AbstractCh - printWarning(pkg, 'comparison-operator-in-deptoken', +--- + SpecCheck.py | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/SpecCheck.py b/SpecCheck.py +index 63897f2..12b6f2b 100644 +--- a/SpecCheck.py ++++ b/SpecCheck.py +@@ -448,6 +448,10 @@ class SpecCheck(AbstractCheck.AbstractCheck): + 'comparison-operator-in-deptoken', conf) + if current_section in ('post', 'postun'): @@ -13,7 +23,7 @@ Index: SpecCheck.py if current_section == 'changelog': for match in AbstractCheck.macro_regex.findall(line): res = re.match('%+', match) -@@ -748,6 +752,14 @@ may break short circuit builds.''', +@@ -773,6 +777,14 @@ may break short circuit builds.''', '''Make check or other automated regression test should be run in %check, as they can be disabled with a rpm macro for short circuiting purposes.''', diff --git a/suse-pkg-config-check.diff b/suse-pkg-config-check.diff index ff1e86e..08633c4 100644 --- a/suse-pkg-config-check.diff +++ b/suse-pkg-config-check.diff @@ -1,8 +1,18 @@ -Index: TagsCheck.py +From ef47fdf1ddf38ef1ff48b31242a75955042f468f Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] suse-pkg-config-check.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -415,6 +415,7 @@ lib_devel_number_regex = re.compile('^li +--- + TagsCheck.py | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/TagsCheck.py b/TagsCheck.py +index d49239f..0a56b7d 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -416,6 +416,7 @@ lib_devel_number_regex = re.compile('^lib(.*?)([0-9.]+)(_[0-9.]+)?-devel') invalid_url_regex = re.compile(Config.getOption('InvalidURL'), re.IGNORECASE) lib_package_regex = re.compile('(?:^(?:compat-)?lib.*?(\.so.*)?|libs?[\d-]*)$', re.IGNORECASE) leading_space_regex = re.compile('^\s+') @@ -10,7 +20,7 @@ Index: TagsCheck.py license_regex = re.compile('\(([^)]+)\)|\s(?:and|or)\s') invalid_version_regex = re.compile('([0-9](?:rc|alpha|beta|pre).*)', re.IGNORECASE) # () are here for grouping purpose in the regexp -@@ -626,10 +627,12 @@ class TagsCheck(AbstractCheck.AbstractCh +@@ -634,10 +635,12 @@ class TagsCheck(AbstractCheck.AbstractCheck): base = is_devel.group(1) dep = None has_so = False @@ -24,7 +34,7 @@ Index: TagsCheck.py if has_so: base_or_libs = base + '/' + base + '-libs/lib' + base # try to match *%_isa as well (e.g. "(x86-64)", "(x86-32)") -@@ -666,6 +669,15 @@ class TagsCheck(AbstractCheck.AbstractCh +@@ -674,6 +677,15 @@ class TagsCheck(AbstractCheck.AbstractCheck): if prov not in (x[0] for x in pkg.provides()): printWarning(pkg, 'no-provides', prov) @@ -40,7 +50,7 @@ Index: TagsCheck.py # List of words to ignore in spell check ignored_words = set() for pf in pkg.files(): -@@ -1099,6 +1111,11 @@ once.''', +@@ -1112,6 +1124,11 @@ once.''', 'no-url-tag', '''The URL tag is missing. Please add a http or ftp link to the project location.''', diff --git a/suse-python-abi-check.diff b/suse-python-abi-check.diff index 87dd016..67d77d8 100644 --- a/suse-python-abi-check.diff +++ b/suse-python-abi-check.diff @@ -1,8 +1,18 @@ -Index: FilesCheck.py +From ebde573491954aa965530c0147d00d4f3400a647 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] suse-python-abi-check.diff + =================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -1110,8 +1110,11 @@ class FilesCheck(AbstractCheck.AbstractC +--- + FilesCheck.py | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index acb379f..214ac76 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -1129,8 +1129,11 @@ class FilesCheck(AbstractCheck.AbstractCheck): if res and not (pkg.check_versioned_dep('python-base', res.group(1)) or pkg.check_versioned_dep('python', diff --git a/suse-python3-naming-policy.diff b/suse-python3-naming-policy.diff index 5604848..78a4f90 100644 --- a/suse-python3-naming-policy.diff +++ b/suse-python3-naming-policy.diff @@ -1,7 +1,17 @@ -Index: NamingPolicyCheck.py +From 04dd83f02896ad46f4db5b6115e18eb80a5e8bdf Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:37 +0200 +Subject: [PATCH] suse-python3-naming-policy.diff + =================================================================== ---- NamingPolicyCheck.py.orig -+++ NamingPolicyCheck.py +--- + NamingPolicyCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/NamingPolicyCheck.py b/NamingPolicyCheck.py +index 231b936..96fb91d 100644 +--- a/NamingPolicyCheck.py ++++ b/NamingPolicyCheck.py @@ -90,7 +90,7 @@ check = NamingPolicyCheck() diff --git a/suse-required-lsb-tags.diff b/suse-required-lsb-tags.diff deleted file mode 100644 index ce0c8ea..0000000 --- a/suse-required-lsb-tags.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- InitScriptCheck.py -+++ InitScriptCheck.py -@@ -105,7 +105,7 @@ class InitScriptCheck(AbstractCheck.AbstractCheck): - - # TODO: where is it specified that these (or some) - # keywords are mandatory? -- for i in ('Provides', 'Description', 'Short-Description'): -+ for i in ('Provides', 'Required-Start', 'Required-Stop', 'Default-Start'): - if i not in lsb_tags.keys(): - printError(pkg, 'missing-mandatory-lsb-keyword', "%s in %s" % (i, f)) - if in_lsb_tag: diff --git a/suse-shlib-devel-dependency.diff b/suse-shlib-devel-dependency.diff index c6f9655..a143049 100644 --- a/suse-shlib-devel-dependency.diff +++ b/suse-shlib-devel-dependency.diff @@ -1,8 +1,18 @@ -Index: TagsCheck.py +From f32933089f8ee5df3c918bc031d41a143624f7b9 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] suse-shlib-devel-dependency.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -639,10 +639,10 @@ class TagsCheck(AbstractCheck.AbstractCh +--- + TagsCheck.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/TagsCheck.py b/TagsCheck.py +index 18cbb6e..fc392e5 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -642,10 +642,10 @@ class TagsCheck(AbstractCheck.AbstractCheck): if pkg_config_regex.match(fname) and fname.endswith('.pc'): has_pc = True if has_so: diff --git a/suse-speccheck-utf8.diff b/suse-speccheck-utf8.diff index cfda93d..4c7f6b7 100644 --- a/suse-speccheck-utf8.diff +++ b/suse-speccheck-utf8.diff @@ -1,8 +1,18 @@ -Index: SpecCheck.py +From bfd4f480818bccedf8c5a7c45eeaa35f0968c27a Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] suse-speccheck-utf8.diff + =================================================================== ---- SpecCheck.py.orig -+++ SpecCheck.py -@@ -625,8 +625,8 @@ SPEC file to build a valid RPM package.' +--- + SpecCheck.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/SpecCheck.py b/SpecCheck.py +index d0d381a..60e946b 100644 +--- a/SpecCheck.py ++++ b/SpecCheck.py +@@ -650,8 +650,8 @@ SPEC file to build a valid RPM package.''', ("Name:" tag). Either rename your package or the specfile.''', 'non-utf8-spec-file', diff --git a/suse-sysv-init-checks.diff b/suse-sysv-init-checks.diff new file mode 100644 index 0000000..27d2327 --- /dev/null +++ b/suse-sysv-init-checks.diff @@ -0,0 +1,79 @@ +From 738e37c34c66a665012bcf6b123b81717c16d3f3 Mon Sep 17 00:00:00 2001 +From: Ludwig Nussel +Date: Fri, 10 Apr 2015 14:38:22 +0200 +Subject: [PATCH] suse sysv init checks + +we don't use chkconfig but have different macros +--- + InitScriptCheck.py | 44 ++++++++++++++++++++++++++++++-------------- + 1 file changed, 30 insertions(+), 14 deletions(-) + +diff --git a/InitScriptCheck.py b/InitScriptCheck.py +index fb53d93..1a58562 100644 +--- a/InitScriptCheck.py ++++ b/InitScriptCheck.py +@@ -36,6 +36,10 @@ LSB_KEYWORDS = ('Provides', 'Required-Start', 'Required-Stop', 'Should-Start', + RECOMMENDED_LSB_KEYWORDS = ('Provides', 'Required-Start', 'Required-Stop', + 'Default-Stop', 'Short-Description') + ++suse = True ++stop_on_removal_regex=re.compile('bin/systemctl stop \$service >/dev/null') ++restart_on_update_regex=re.compile('bin/systemctl try-restart \$service >/dev/null') ++insserv_cleanup_regex=re.compile('^\s*/sbin/insserv /etc/init.d$', re.MULTILINE) + + class InitScriptCheck(AbstractCheck.AbstractCheck): + +@@ -44,6 +48,12 @@ class InitScriptCheck(AbstractCheck.AbstractCheck): + + def check_binary(self, pkg): + initscript_list = [] ++ ++ # check chkconfig call in %post and %preun ++ postin = Pkg.b2s(pkg[rpm.RPMTAG_POSTIN]) or pkg.scriptprog(rpm.RPMTAG_POSTINPROG) ++ preun = Pkg.b2s(pkg[rpm.RPMTAG_PREUN]) or pkg.scriptprog(rpm.RPMTAG_PREUNPROG) ++ postun = Pkg.b2s(pkg[rpm.RPMTAG_POSTUN]) or pkg.scriptprog(rpm.RPMTAG_POSTUNPROG) ++ + for fname, pkgfile in pkg.files().items(): + + if not fname.startswith('/etc/init.d/') and \ +@@ -61,20 +71,26 @@ class InitScriptCheck(AbstractCheck.AbstractCheck): + if "." in basename: + printError(pkg, 'init-script-name-with-dot', fname) + +- # check chkconfig call in %post and %preun +- postin = Pkg.b2s(pkg[rpm.RPMTAG_POSTIN]) or \ +- pkg.scriptprog(rpm.RPMTAG_POSTINPROG) +- if not postin: +- printError(pkg, 'init-script-without-chkconfig-postin', fname) +- elif not chkconfig_regex.search(postin): +- printError(pkg, 'postin-without-chkconfig', fname) +- +- preun = Pkg.b2s(pkg[rpm.RPMTAG_PREUN]) or \ +- pkg.scriptprog(rpm.RPMTAG_PREUNPROG) +- if not preun: +- printError(pkg, 'init-script-without-chkconfig-preun', fname) +- elif not chkconfig_regex.search(preun): +- printError(pkg, 'preun-without-chkconfig', fname) ++ if not suse: ++ if not postin: ++ printError(pkg, 'init-script-without-chkconfig-postin', fname) ++ elif not chkconfig_regex.search(postin): ++ printError(pkg, 'postin-without-chkconfig', fname) ++ ++ if not preun: ++ printError(pkg, 'init-script-without-chkconfig-preun', fname) ++ elif not chkconfig_regex.search(preun): ++ printError(pkg, 'preun-without-chkconfig', fname) ++ ++ else: ++ if not preun or not stop_on_removal_regex.search(preun): ++ printError(pkg, 'init-script-without-%stop_on_removal-preun', fname) ++ ++ if not postun or not restart_on_update_regex.search(postun): ++ printError(pkg, 'init-script-without-%restart_on_update-postun', fname) ++ ++ if not postun or not insserv_cleanup_regex.search(postun): ++ printError(pkg, 'init-script-without-%insserv_cleanup-postun', fname) + + status_found = False + reload_found = False diff --git a/suse-url-check.diff b/suse-url-check.diff index 3e706e3..1ee979c 100644 --- a/suse-url-check.diff +++ b/suse-url-check.diff @@ -1,17 +1,27 @@ -Index: TagsCheck.py +From 3c022dc151d18c32c2d3a7f3efdaed0d8ed39245 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:37 +0200 +Subject: [PATCH] suse-url-check.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -781,7 +781,7 @@ class TagsCheck(AbstractCheck.AbstractCh +--- + TagsCheck.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/TagsCheck.py b/TagsCheck.py +index fa38a07..d49239f 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -794,7 +794,7 @@ class TagsCheck(AbstractCheck.AbstractCheck): if not valid_license: self._unexpanded_macros(pkg, 'License', rpm_license) - for tag in ('URL', 'DistURL', 'BugURL'): + for tag in ('URL', 'BugURL'): if hasattr(rpm, 'RPMTAG_%s' % tag.upper()): - url = pkg[getattr(rpm, 'RPMTAG_%s' % tag.upper())] - self._unexpanded_macros(pkg, tag, url, is_url = True) -@@ -1097,7 +1097,7 @@ once.''', + url = Pkg.b2s(pkg[getattr(rpm, 'RPMTAG_%s' % tag.upper())]) + self._unexpanded_macros(pkg, tag, url, is_url=True) +@@ -1110,7 +1110,7 @@ once.''', '''This rpm requires a specific release of another package.''', 'no-url-tag', diff --git a/suse-version.diff b/suse-version.diff index 8656513..3846a02 100644 --- a/suse-version.diff +++ b/suse-version.diff @@ -1,16 +1,26 @@ -Index: SpecCheck.py +From 79b3a5168fc9e2be4f74624a63721e6b77c40020 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:37 +0200 +Subject: [PATCH] suse-version.diff + =================================================================== ---- SpecCheck.py.orig -+++ SpecCheck.py -@@ -66,6 +66,7 @@ libdir_regex = re.compile('%{?_lib(?:dir +--- + SpecCheck.py | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/SpecCheck.py b/SpecCheck.py +index 2b24b43..9ea5c6e 100644 +--- a/SpecCheck.py ++++ b/SpecCheck.py +@@ -66,6 +66,7 @@ libdir_regex = re.compile('%{?_lib(?:dir)?\}?\\b') comment_or_empty_regex = re.compile('^\s*(#|$)') defattr_regex = re.compile('^\s*%defattr\\b') attr_regex = re.compile('^\s*%attr\\b') +suse_version_regex = re.compile('%suse_version\s*[<>=]+\s*(\d+)') section_regexs = dict( ([x, re.compile('^%' + x + '(?:\s|$)')] - for x in ['build', 'changelog', 'check', 'clean', 'description', 'files', -@@ -369,6 +370,12 @@ class SpecCheck(AbstractCheck.AbstractCh + for x in ('build', 'changelog', 'check', 'clean', 'description', 'files', +@@ -387,6 +388,12 @@ class SpecCheck(AbstractCheck.AbstractCheck): if not res.group(1).startswith('%'): printWarning(pkg, 'hardcoded-prefix-tag', res.group(1)) @@ -23,7 +33,7 @@ Index: SpecCheck.py res = prereq_regex.search(line) if res: printError(pkg, 'prereq-use', res.group(2)) -@@ -790,6 +797,15 @@ in the resulting binary package dependin +@@ -815,6 +822,15 @@ in the resulting binary package depending on the build environment and rpmbuild version (typically < 4.4). Add default attributes using %defattr before it in the %files section, or use per entry %attr's.''', diff --git a/suse-whitelist-opensuse.diff b/suse-whitelist-opensuse.diff index dfefc8d..c74ad9c 100644 --- a/suse-whitelist-opensuse.diff +++ b/suse-whitelist-opensuse.diff @@ -1,8 +1,18 @@ -Index: TagsCheck.py +From 7157c6617f37aae4fd6a0cc3da3f9620b52a1b59 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:40 +0200 +Subject: [PATCH] suse-whitelist-opensuse.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -891,7 +891,7 @@ class TagsCheck(AbstractCheck.AbstractCh +--- + TagsCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/TagsCheck.py b/TagsCheck.py +index 40ce77a..3c68d28 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -912,7 +912,7 @@ class TagsCheck(AbstractCheck.AbstractCheck): spell_check(pkg, utf8summary, 'Summary(%s)', lang, ignored_words) if '\n' in summary: printError(pkg, 'summary-on-multiple-lines', lang) diff --git a/sysv5-init-checks.diff b/sysv5-init-checks.diff deleted file mode 100644 index 04f1f11..0000000 --- a/sysv5-init-checks.diff +++ /dev/null @@ -1,76 +0,0 @@ -Index: InitScriptCheck.py -=================================================================== ---- InitScriptCheck.py.orig -+++ InitScriptCheck.py -@@ -30,6 +30,10 @@ lsb_tags_regex = re.compile('^# ([\w-]+) - lsb_cont_regex = re.compile('^#(?:\t| )(.*?)\s*$') - use_subsys = Config.getOption('UseVarLockSubsys', True) - -+stop_on_removal_regex=re.compile('bin/systemctl stop \$service >/dev/null') -+restart_on_update_regex=re.compile('bin/systemctl try-restart \$service >/dev/null') -+insserv_cleanup_regex=re.compile('^\s*/sbin/insserv /etc/init.d$', re.MULTILINE) -+ - LSB_KEYWORDS = ('Provides', 'Required-Start', 'Required-Stop', 'Should-Start', - 'Should-Stop', 'Default-Start', 'Default-Stop', - 'Short-Description', 'Description') -@@ -47,6 +51,13 @@ class InitScriptCheck(AbstractCheck.Abst - return - - initscript_list = [] -+ -+ -+ # check chkconfig call in %post and %preun -+ postin = pkg[rpm.RPMTAG_POSTIN] or pkg.scriptprog(pkg[rpm.RPMTAG_POSTINPROG]) -+ preun = pkg[rpm.RPMTAG_PREUN] or pkg.scriptprog(pkg[rpm.RPMTAG_PREUNPROG]) -+ postun = pkg[rpm.RPMTAG_POSTUN] or pkg.scriptprog(pkg[rpm.RPMTAG_POSTUNPROG]) -+ - for fname, pkgfile in pkg.files().items(): - - if not fname.startswith('/etc/init.d/') and \ -@@ -61,20 +72,16 @@ class InitScriptCheck(AbstractCheck.Abst - if "." in basename: - printError(pkg, 'init-script-name-with-dot', fname) - -- # check chkconfig call in %post and %preun -- postin = pkg[rpm.RPMTAG_POSTIN] or \ -- pkg.scriptprog(rpm.RPMTAG_POSTINPROG) -- if not postin: -- printError(pkg, 'init-script-without-chkconfig-postin', fname) -- elif not chkconfig_regex.search(postin): -- printError(pkg, 'postin-without-chkconfig', fname) -- - preun = pkg[rpm.RPMTAG_PREUN] or \ - pkg.scriptprog(rpm.RPMTAG_PREUNPROG) -- if not preun: -- printError(pkg, 'init-script-without-chkconfig-preun', fname) -- elif not chkconfig_regex.search(preun): -- printError(pkg, 'preun-without-chkconfig', fname) -+ if not preun or not stop_on_removal_regex.search(preun): -+ printError(pkg, 'init-script-without-%stop_on_removal-preun', fname) -+ -+ if not postun or not restart_on_update_regex.search(postun): -+ printError(pkg, 'init-script-without-%restart_on_update-postun', fname) -+ -+ if not postun or not insserv_cleanup_regex.search(postun): -+ printError(pkg, 'init-script-without-%insserv_cleanup-postun', fname) - - status_found = False - reload_found = False -@@ -276,6 +283,17 @@ of chkconfig don't work as expected with - 'init-script-non-executable', - '''The init script should have at least the execution bit set for root - in order for it to run at boot time.''', -+ -+'init-script-without-%stop_on_removal-preun', -+'''The init script should have a %preun script that calls %stop_on_removal.''', -+ -+'init-script-without-%insserv_cleanup-postun', -+'''The package doesn't have a %insserv_cleanup call in %postun''', -+ -+'init-script-without-%restart_on_update-postun', -+''' The package has an init script but is missing the %restart_on_update -+call in %postun to automatically restart the daemon. This is optional, -+but in most cases it is wanted. Please check.''' - ) - - # InitScriptCheck.py ends here diff --git a/usr-arch.diff b/usr-arch.diff index e9f33eb..7e5fac8 100644 --- a/usr-arch.diff +++ b/usr-arch.diff @@ -1,16 +1,26 @@ -Index: BinariesCheck.py +From 20d0203074b713a337cad87d8db5713bcc0bbf63 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] usr-arch.diff + =================================================================== ---- BinariesCheck.py.orig -+++ BinariesCheck.py -@@ -263,6 +263,7 @@ usr_lib_exception_regex = re.compile(Con +--- + BinariesCheck.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/BinariesCheck.py b/BinariesCheck.py +index a74d3e3..c1c566d 100644 +--- a/BinariesCheck.py ++++ b/BinariesCheck.py +@@ -270,6 +270,7 @@ usr_lib_exception_regex = re.compile(Config.getOption('UsrLibBinaryException', ' srcname_regex = re.compile('(.*?)-[0-9]') invalid_dir_ref_regex = re.compile('/(home|tmp)(\W|$)') ocaml_mixed_regex = re.compile('^Caml1999X0\d\d$') +usr_arch_share_regex = re.compile('/share/.*/(?:x86|i.86|x86_64|ppc|ppc64|s390|s390x|ia64|m68k|arm|aarch64)') + def dir_base(path): - res = path_regex.search(path) -@@ -336,7 +337,7 @@ class BinariesCheck(AbstractCheck.Abstra +@@ -343,7 +344,7 @@ class BinariesCheck(AbstractCheck.AbstractCheck): # arch dependent packages only from here on # in /usr/share ? diff --git a/verify-buildrequires.diff b/verify-buildrequires.diff deleted file mode 100644 index c9c59b2..0000000 --- a/verify-buildrequires.diff +++ /dev/null @@ -1,105 +0,0 @@ ---- SpecCheck.py -+++ SpecCheck.py -@@ -45,7 +45,8 @@ - biarch_package_regex = re.compile(DEFAULT_BIARCH_PACKAGES) - hardcoded_lib_path_exceptions_regex = re.compile(Config.getOption('HardcodedLibPathExceptions', DEFAULT_HARDCODED_LIB_PATH_EXCEPTIONS)) - prereq_regex = re.compile('^PreReq(\(.*\))?:\s*(.+?)\s*$', re.IGNORECASE) --buildprereq_regex = re.compile('^BuildPreReq:\s*(.+?)\s*$', re.IGNORECASE) -+buildprereq_regex = re.compile('^BuildPreReq\s*:\s*(.+)\s*$', re.IGNORECASE) -+buildrequires_regex = re.compile('^\s*BuildRequires\s*:\s*(.+)\s*$', re.IGNORECASE) - use_utf8 = Config.getOption('UseUTF8', Config.USEUTF8_DEFAULT) - macro_regex = re.compile('(%+)[{(]?(\w+)') - libdir_regex = re.compile('%{?_lib(?:dir)?\}?\\b') -@@ -126,6 +127,25 @@ - res.append(tok) - return res - -+def find_reverse_requires(): -+ reverse_requires = dict() -+ try: -+ f = file("/.builtinfo/rpmdeps", "r") -+ except: -+ return reverse_requires -+ -+ for line in f: -+ if line.startswith('R:'): -+ package = "-".join(line.split(':')[1].split('-')[:-3]) -+ deps = deptokens(line.split(':')[2]) -+ for dep in deps: -+ name = dep.split(' ')[0] -+ if name.startswith('/') or name.find('(') != -1 or name == dep: -+ continue -+ reverse_requires.setdefault(name, set()).add(package) -+ -+ return reverse_requires -+ - def contains_buildroot(line): - '''Check if the given line contains use of rpm buildroot.''' - res = rpm_buildroot_regex.search(line) -@@ -188,6 +208,8 @@ - indent_tabs = 0 - files_has_defattr = 0 - section = {} -+ buildrequires = set() -+ - for sec in ['description', 'prep', 'build', 'install', 'clean', - 'files', 'changelog', 'package', 'check']: - section[sec] = { -@@ -348,6 +370,14 @@ - if res: - printError(pkg, 'buildprereq-use', res.group(1)) - -+ res = buildrequires_regex.search(line) -+ if not if_depth and res: -+ for r in deptokens(res.group(1)): -+ name = r.split(' ')[0] -+ if name in buildrequires: -+ printWarning(pkg, 'duplicate-buildrequires', name) -+ buildrequires.add(name) -+ - if scriptlet_requires_regex.search(line): - printError(pkg, 'broken-syntax-in-scriptlet-requires', string.strip(line)) - -@@ -420,6 +450,24 @@ - '(spaces: line %d, tab: line %d)' % - (indent_spaces, indent_tabs)) - -+ reverse_requires = find_reverse_requires() -+ for r in buildrequires: -+ if r in reverse_requires: -+ for rev in reverse_requires[r]: -+ if rev in buildrequires: -+ printWarning(pkg, 'unnecessary-buildrequires', r, 'already included by', rev) -+ -+ if not r.endswith("-devel"): -+ develr = [ r + "-devel" ] -+ # libfoo-4_2 -> libfoo-devel -+ dr2 = re.sub(r'-?[0-9_]+$', '', r) + "-devel" -+ if dr2 != develr[0]: -+ develr.append(dr2); -+ for dr in develr: -+ if r in reverse_requires and dr in reverse_requires[r] \ -+ and not dr in buildrequires: -+ printWarning(pkg, "non-devel-buildrequires", r, "- did you mean", dr, "?") -+ - # process gathered info - for p in patches.keys(): - if p in applied_patches_ifarch: -@@ -557,6 +605,17 @@ - odd entries eg. in source rpms, which is rarely wanted. Avoid use of macros - in %changelog altogether, or use two '%'s to escape them, like '%%foo'.''', - -+'unnecessary-buildrequires', -+''' The specfile contains a buildrequires entry that seems to be already -+requires by one of the other buildrequires. Please consider reducing your -+buildrequires definitions in case this is a real implicit dependency.''', -+ -+'non-devel-buildrequires', -+'''The specfile contains a buildrequires entry that has a -devel package. -+Please carefully check if you want to buildrequire the -devel subpackage or if -+this is an unnecessary dependency that is already required by one of the other -+buildrequires.''', -+ - 'depscript-without-disabling-depgen', - '''In some common rpm configurations/versions, defining __find_provides and/or - __find_requires has no effect if rpm's internal dependency generator has not diff --git a/version-control-internal-file.diff b/version-control-internal-file.diff index 7f3859d..96a2cab 100644 --- a/version-control-internal-file.diff +++ b/version-control-internal-file.diff @@ -1,9 +1,18 @@ +From b7555312b3496b9e15bae3d292fa038227c072e0 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:39 +0200 +Subject: [PATCH] version-control-internal-file.diff + also detect RCS files -Index: FilesCheck.py -=================================================================== ---- FilesCheck.py.orig -+++ FilesCheck.py -@@ -612,7 +612,7 @@ ldconfig_regex = re.compile('^[^#]*ldcon +--- + FilesCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/FilesCheck.py b/FilesCheck.py +index 7d2b92f..efda328 100644 +--- a/FilesCheck.py ++++ b/FilesCheck.py +@@ -620,7 +620,7 @@ ldconfig_regex = re.compile('^[^#]*ldconfig', re.MULTILINE) depmod_regex = re.compile('^[^#]*depmod', re.MULTILINE) install_info_regex = re.compile('^[^#]*install-info', re.MULTILINE) perl_temp_file_regex = re.compile('.*perl.*/(\.packlist|perllocal\.pod)$') diff --git a/xdg-check-exception.diff b/xdg-check-exception.diff deleted file mode 100644 index ff855f2..0000000 --- a/xdg-check-exception.diff +++ /dev/null @@ -1,27 +0,0 @@ -Index: rpmlint-1.5/MenuXDGCheck.py -=================================================================== ---- rpmlint-1.5.orig/MenuXDGCheck.py -+++ rpmlint-1.5/MenuXDGCheck.py -@@ -43,13 +43,16 @@ class MenuXDGCheck(AbstractCheck.Abstrac - printError(pkg, 'non-utf8-desktopfile', filename) - - self.cfp.read(f) -- binary = self.cfp.get('Desktop Entry','Exec').split(' ',1)[0] -+ binary = None - found = False -- for i in STANDARD_BIN_DIRS: -- if os.path.exists(root + i + binary): -- # no need to check if the binary is +x, rpmlint does it -- # in another place -- found = True -+ if self.cfp.has_option('Desktop Entry','Exec'): -+ binary = self.cfp.get('Desktop Entry','Exec').split(' ',1)[0] -+ -+ for i in STANDARD_BIN_DIRS: -+ if os.path.exists(root + i + binary): -+ # no need to check if the binary is +x, rpmlint does it -+ # in another place -+ found = True - if not found and binary: - printWarning(pkg, 'desktopfile-without-binary', filename, binary) - diff --git a/xdg-paths-update.diff b/xdg-paths-update.diff index 62f6cb6..1c08938 100644 --- a/xdg-paths-update.diff +++ b/xdg-paths-update.diff @@ -1,10 +1,20 @@ -Index: MenuXDGCheck.py +From 8f5c28a5bce4c922e7b9ab62ad357b2a58e966a2 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] xdg-paths-update.diff + =================================================================== ---- MenuXDGCheck.py.orig -+++ MenuXDGCheck.py -@@ -24,7 +24,7 @@ class MenuXDGCheck(AbstractCheck.Abstrac +--- + MenuXDGCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/MenuXDGCheck.py b/MenuXDGCheck.py +index 4aab385..158db23 100644 +--- a/MenuXDGCheck.py ++++ b/MenuXDGCheck.py +@@ -24,7 +24,7 @@ class MenuXDGCheck(AbstractCheck.AbstractFilesCheck): + # $ echo $XDG_DATA_DIRS/applications # /var/lib/menu-xdg:/usr/share - self.cfp = RawConfigParser() AbstractCheck.AbstractFilesCheck.__init__( - self, "MenuXDGCheck", "/usr/share/applications/.*\.desktop$") + self, "MenuXDGCheck", "(?:/usr/share|/etc/opt/.*/share|/opt/.*)/applications/.*\.desktop$") diff --git a/yast-provides.diff b/yast-provides.diff index 427a66c..a5cd19c 100644 --- a/yast-provides.diff +++ b/yast-provides.diff @@ -1,8 +1,18 @@ -Index: TagsCheck.py +From 75c0cb8cc089bdbe907c776a78a296d8f1a48cf6 Mon Sep 17 00:00:00 2001 +From: Some One +Date: Thu, 9 Apr 2015 14:55:38 +0200 +Subject: [PATCH] yast-provides.diff + =================================================================== ---- TagsCheck.py.orig -+++ TagsCheck.py -@@ -821,7 +821,7 @@ class TagsCheck(AbstractCheck.AbstractCh +--- + TagsCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/TagsCheck.py b/TagsCheck.py +index 0a56b7d..9e00892 100644 +--- a/TagsCheck.py ++++ b/TagsCheck.py +@@ -823,7 +823,7 @@ class TagsCheck(AbstractCheck.AbstractCheck): printWarning(pkg, 'no-url-tag') obs_names = [x[0] for x in pkg.obsoletes()]