Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/cygwin-apps/calm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2021-05-02 22:22:26 +0300
committerJon Turney <jon.turney@dronecode.org.uk>2021-05-09 14:43:24 +0300
commit4c8d71e3a30bb0e342ad8c3da8e30f74554cfa28 (patch)
treec65dcdcd6cf0556ad3411552e80d52f8314aca1a
parent242bfe789a63d420308397ccea6703a245267018 (diff)
Improve empty package checks
An empty install package without depends should be in the '_obsolete' category. (We're now checking all install packages, not just ones without external-source: (which we ignored here for somewhat bogus reasons), so add additional exceptions to past_mistakes.) An empty install package with depends should be in the 'virtual' category (but there are many old obsoletion packages which look like that, so allow '_obsolete' as well). Also check for empty source packages (and then fix the empty rpm-doc-src we have in test data).
-rwxr-xr-xcalm/package.py54
-rw-r--r--calm/past_mistakes.py28
-rw-r--r--test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src3
-rw-r--r--test/testdata/inifile/setup.ini.expected4
-rw-r--r--test/testdata/process_arch/setup.ini.expected4
-rw-r--r--test/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2bin42 -> 188 bytes
6 files changed, 67 insertions, 26 deletions
diff --git a/calm/package.py b/calm/package.py
index 8a166bb..b223edf 100755
--- a/calm/package.py
+++ b/calm/package.py
@@ -781,24 +781,42 @@ def validate_packages(args, packages):
if rv in packages[p].version_hints:
logging.warning("package '%s' replace-versions: lists version '%s', which is also available to install" % (p, rv))
- # If the install tarball is empty and there is no source tarball, we
- # should probably be marked obsolete
- if not packages[p].skip:
- for vr in packages[p].version_hints:
- if '_obsolete' not in packages[p].version_hints[vr].get('category', '') and vr in packages[p].vermap:
- if ('source' not in packages[p].vermap[vr]) and ('external-source' not in packages[p].version_hints[vr]):
- if 'install' in packages[p].vermap[vr]:
- if packages[p].tar(vr, 'install').is_empty:
- if ((vr in past_mistakes.empty_but_not_obsolete.get(p, [])) or
- ('empty-obsolete' in packages[p].version_hints[vr].get('disable-check', ''))):
- lvl = logging.DEBUG
- else:
- if 'external-source' in packages[p].version_hints[vr]:
- lvl = logging.ERROR
- error = True
- else:
- lvl = logging.WARNING
- logging.log(lvl, "package '%s' version '%s' has empty install tar file, but it's not in the _obsolete category" % (p, vr))
+ # If the install tarball is empty, we should probably either be marked
+ # obsolete (if we have no dependencies) or virtual (if we do)
+ if packages[p].kind == Kind.binary and not packages[p].skip:
+ for vr in packages[p].vermap:
+ if 'install' in packages[p].vermap[vr]:
+ if packages[p].tar(vr, 'install').is_empty:
+ # this classification relies on obsoleting packages
+ # not being present in depends
+ if packages[p].version_hints[vr].get('depends', ''):
+ # also allow '_obsolete' because old obsoletion
+ # packages depend on their replacement, but are not
+ # obsoleted by it
+ expected_categories = ['virtual', '_obsolete']
+ else:
+ expected_categories = ['_obsolete']
+
+ if all(c not in packages[p].version_hints[vr].get('category', '').lower() for c in expected_categories):
+ if ((vr in past_mistakes.empty_but_not_obsolete.get(p, [])) or
+ ('empty-obsolete' in packages[p].version_hints[vr].get('disable-check', ''))):
+ lvl = logging.DEBUG
+ else:
+ lvl = logging.ERROR
+ error = True
+ logging.log(lvl, "package '%s' version '%s' has empty install tar file, but it's not in %s category" % (p, vr, expected_categories))
+ # If the source tarball is empty, that can't be right!
+ elif packages[p].kind == Kind.source:
+ for vr in packages[p].vermap:
+ if 'source' in packages[p].vermap[vr]:
+ if packages[p].tar(vr, 'source').is_empty:
+ if ((vr in past_mistakes.empty_source.get(p, [])) and
+ '_obsolete' in packages[p].version_hints[vr].get('category', '')):
+ lvl = logging.DEBUG
+ else:
+ error = True
+ lvl = logging.ERROR
+ logging.log(lvl, "package '%s' version '%s' has empty source tar file" % (p, vr))
# make another pass to verify a source tarfile exists for every install
# tarfile version
diff --git a/calm/past_mistakes.py b/calm/past_mistakes.py
index a87c1f8..064ad27 100644
--- a/calm/past_mistakes.py
+++ b/calm/past_mistakes.py
@@ -135,19 +135,18 @@ nonunique_versions = [
'w3m-img',
]
-# packages with an empty install file, no source, but aren't obsolete
+# empty install packages, that aren't obsolete
#
# don't add to this list, use 'disable-check: empty-obsolete' in pvr.hint instead
empty_but_not_obsolete = {
+ 'freeglut-doc': ['3.0.0-1', '3.2.1-1'], # should be obsoleted by libglut-devel which contains doc now
'isl': ['0.16.1-1'], # useless empty package, not autosupressed as it has depends
- 'kdegames3': ['3.5.10-11'], # a metapackage
- 'kdewebdev': ['15.04.3-1', '16.08.3-1', '16.08.3-2'], # a metapackage
'libpopt-devel': ['1.16-1'], # version 1.16-1 was empty (x86_64)
'libpopt0': ['1.16-1'], # version 1.16-1 was empty
'mbedtls': ['2.16.0-1'], # useless empty package, not autosupressed as it has depends
'mpclib': ['1.1.0-1'], # useless empty package, not autosupressed as it has depends
'mpfr': ['4.0.2-1'], # useless empty package, not autosupressed as it has depends
- 'ocaml': ['4.02.3-2'], # a metapackage
+ 'serf-debuginfo': ['1.3.8-1', '1.3.9-1'], # empty presumably due to build problems
}
# packages with timestamp anomalies
@@ -190,3 +189,24 @@ maint_anomalies = {
nonexistent_provides = [
'perl5_026',
]
+
+# empty source packages
+#
+# (these usually have a corresponding hand-built empty install package, which
+# depends on it's replacement, and so are a lingering remnant of something not
+# properly obsoleted)
+empty_source = {
+ 'SuiteSparse-src': ['4.0.2-1'],
+ 'ash-src': ['20040127-5'], # obsoleted by dash
+ 'checkx-src': ['0.2.1-1'], # obsoleted by run2
+ 'db4.8-src': ['4.8.30-2'], # obsoleted by db
+ 'gcc-tools-autoconf-src': ['2.59-11'], # obsoleted by gcc-tools-epoch{1,2}-autoconf
+ 'gcc-tools-automake-src': ['1.9.6-11'], # obsoleted by gcc-tools-epoch{1,2}-automake
+ 'lzma-src': ['4.32.7-10'], # obsoleted by xz
+ 'mlcscope-src': ['99-1'], # obsoleted by cscope
+ 'octave-forge-src': ['20140215-1'],
+ 'octave-octcdf-src': ['1.1.7-99'],
+ 'perl-File-Slurp-Unicode-src': ['0.7.1-2'], # obsoleted by perl-File-Slurp
+ 'pinentry-qt3-src': ['0.7.6-3'], # obsoleted by pinentry-qt
+ 'xerces-c-devel-src': ['2.8.0-1'], # obsoleted by libxerces-c-devel
+}
diff --git a/test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src b/test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src
index fb29610..aef3d74 100644
--- a/test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src
+++ b/test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src
@@ -6,6 +6,9 @@
<body>
<h1>rpm-doc-src: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line) (source)</h1>
<pre>
+ 2021-05-03 19:35 0 rpm-4.1.tar.gz
+ 2021-05-03 19:36 0 rpm-4.1-1.patch
+ 2021-05-03 19:36 0 rpm-4.1-1.sh
</pre>
</body>
</html>
diff --git a/test/testdata/inifile/setup.ini.expected b/test/testdata/inifile/setup.ini.expected
index ff9dc85..3f583d7 100644
--- a/test/testdata/inifile/setup.ini.expected
+++ b/test/testdata/inifile/setup.ini.expected
@@ -294,8 +294,8 @@
'version: 4.1-2\n'
'install: x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2 50941 '
'7cc9db802364252e3206ce9f75c8ca53813d8308a22a425b50ef695dd8e51568740b06739d3aa3399a83fb3d3e1345ab7e2ad03a1e9d47c02dded3363bf4f493\n'
- 'source: x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 42 '
- '28c70b843fe01d90a3eeab4a3617551d236cd0b7d69668d1b1b6c8b14a9fd050e4039c192894c93bdf31575771c58c1fea2a41c24c8da22d10080d8b032b6369\n'
+ 'source: x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 188 '
+ 'a4ee9121cfff2ccd5b4d84ffd18d2cff0ea071cef3c5416b8825d7b7f7cff8a8873c71832f3f3cb8742d004f9db34e9d160ad613b5df839723a3f986f0901402\n'
'\n'
'@ staleversion\n'
'sdesc: "Test package for stale version removal"\n'
diff --git a/test/testdata/process_arch/setup.ini.expected b/test/testdata/process_arch/setup.ini.expected
index e7aa93c..6705bfb 100644
--- a/test/testdata/process_arch/setup.ini.expected
+++ b/test/testdata/process_arch/setup.ini.expected
@@ -301,8 +301,8 @@
'version: 4.1-2\n'
'install: x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2 50941 '
'7cc9db802364252e3206ce9f75c8ca53813d8308a22a425b50ef695dd8e51568740b06739d3aa3399a83fb3d3e1345ab7e2ad03a1e9d47c02dded3363bf4f493\n'
- 'source: x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 42 '
- '28c70b843fe01d90a3eeab4a3617551d236cd0b7d69668d1b1b6c8b14a9fd050e4039c192894c93bdf31575771c58c1fea2a41c24c8da22d10080d8b032b6369\n'
+ 'source: x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 188 '
+ 'a4ee9121cfff2ccd5b4d84ffd18d2cff0ea071cef3c5416b8825d7b7f7cff8a8873c71832f3f3cb8742d004f9db34e9d160ad613b5df839723a3f986f0901402\n'
'\n'
'@ staleversion\n'
'sdesc: "Test package for stale version removal"\n'
diff --git a/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 b/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2
index cbf838c..f90a445 100644
--- a/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2
+++ b/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2
Binary files differ