[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#576005: lintian: check if package is shipping *.pyc/*.pyo



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

tags 576005 + patch
thanks

Hi

Together with some people in #debian-python I was able to create the
following patch.

It will add two new tags package-installs-python-egg and
package-installs-python-pycache-dir, which checks for .egg files (in
some directores) and __pycache__ directories (every where).

It also renames package-installs-python-pyc to
package-installs-python-bytecode, but since the former is in the FTP
master auto reject list the original tag remains in the patch[1].  If we
have a better way of handling this, let me know and I will rewrite the
patch accordingly.
  The -bytecode tag is also triggered on .pyo files and is not limited
to the directories that the old -pyc tag was.

~Niels

[1] Note it is never triggered, but lintian will fail if it cannot find
cannot find the tag.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBCAAGBQJNMwsjAAoJEAVLu599gGRCPtIP/RXqXNBIkcCNz5Wt/cjs9WWX
j4/60wXR4oR/7h4RJW5bkqTquks1YqhmZG8e153kklGnDimw2RDEo27858KvxPbG
LCnxpvZxHxUpRsIHcavwRS6d3gR+5Zl0Nn6IZXnRbAhNdrLE8nqHqrSd0AGDL+oC
/9y1RP+PEstC1UvoB0LV/8z5Ud4KMaNtBu2GpBBcJbUeRKC3HBzJxOSIOmh9l29v
f3ZZT5rFpwyFlOGgAVhza6Fpd8k88MqFTP1Ya1L8lsp9WLGuRRRCP0SymvHm5o3h
s/qvBzJpLLHmuCPJe4u18mGOU/2LWAAiYj8mTaGJJo8NtkZpvRNCuZNBeHHCZGuK
UAdEa8oexy2Ab/cDkJAS9O+jLBVDcnIszcF/s8fzwt69le0UjKFyQEBS0MlC96o5
Gu5r5upuLcd8GqVHa131qtkxWY4/f8qpqiYMVu0WuYD9ILiAPjhB32Tc3OjD3/3L
HVk+TLV/otaKoU1Hn7qzXAS1cjpttDgR7mIMz4nu5jcS+6fV84uWu3/KK5e6yHro
x9qy2HW7001cKlaB/rPdufdJm46nBNXMXzP/6HrQeonEtIKpoNUeQ1iLRveKSJx6
h0NnmYzUouMmicuceupPbxVEz3WvW5IewtVLZd3BZQ9ZWHdu8S2vz12bdzfTW7/k
oYBcUCOlHUY8peo6L4uM
=LPbW
-----END PGP SIGNATURE-----
>From 82ff2e6fb189f64616eb1c646c94d44fb4ba9336 Mon Sep 17 00:00:00 2001
From: Niels Thykier <niels@thykier.net>
Date: Sun, 16 Jan 2011 16:01:22 +0100
Subject: [PATCH] Improved checks for python bytecode and eggs

Renamed package-installs-python-pyc to package-installs-python-bytecode
and added package-installs-python-pycache-dir plus
package-installs-python-egg.
  The -bytecode tag is now triggered on any .pyc or .pyo file regardless
of install location[1].  The egg check is only triggered for files
installed in usr/share/, usr/lib/pyshared and usr/lib/pythonX(.Y).
Finally any __pycache__ dir (but not subdirs) triggers the -pycache-dir
tag.

Note since the FTP master auto-reject tags includes
package-installs-python-pyc, the tag itself remains but is no longer
triggered.

[1] Exception being if they are in a __pycache__ dir, which triggers
a separate tag.
---
 checks/files                                       |   23 ++-
 checks/files.desc                                  |   30 +++-
 t/COVERAGE                                         |    3 +-
 t/tests/files-objects-inv/debian/debian/control.in |   16 --
 t/tests/files-objects-inv/debian/debian/install    |    1 -
 t/tests/files-objects-inv/debian/debian/rules      |   11 -
 t/tests/files-objects-inv/debian/objects.inv       |  199 --------------------
 t/tests/files-objects-inv/desc                     |    7 -
 t/tests/files-objects-inv/tags                     |    1 -
 t/tests/files-python-general/debian/code.pyc       |    1 +
 t/tests/files-python-general/debian/code.pyo       |    1 +
 .../files-python-general/debian/debian/control.in  |   16 ++
 t/tests/files-python-general/debian/debian/install |    6 +
 t/tests/files-python-general/debian/debian/rules   |   11 +
 t/tests/files-python-general/debian/objects.inv    |  199 ++++++++++++++++++++
 t/tests/files-python-general/debian/python.egg     |    1 +
 t/tests/files-python-general/desc                  |   10 +
 t/tests/files-python-general/tags                  |    5 +
 testset/tags.scripts                               |    2 +-
 19 files changed, 301 insertions(+), 242 deletions(-)
 delete mode 100644 t/tests/files-objects-inv/debian/debian/control.in
 delete mode 100644 t/tests/files-objects-inv/debian/debian/install
 delete mode 100644 t/tests/files-objects-inv/debian/debian/rules
 delete mode 100644 t/tests/files-objects-inv/debian/objects.inv
 delete mode 100644 t/tests/files-objects-inv/desc
 delete mode 100644 t/tests/files-objects-inv/tags
 create mode 100644 t/tests/files-python-general/debian/code.pyc
 create mode 100644 t/tests/files-python-general/debian/code.pyo
 create mode 100644 t/tests/files-python-general/debian/debian/control.in
 create mode 100644 t/tests/files-python-general/debian/debian/install
 create mode 100644 t/tests/files-python-general/debian/debian/rules
 create mode 100644 t/tests/files-python-general/debian/objects.inv
 create mode 100644 t/tests/files-python-general/debian/python.egg
 create mode 100644 t/tests/files-python-general/desc
 create mode 100644 t/tests/files-python-general/tags

diff --git a/checks/files b/checks/files
index 9a16d53..578ed3c 100644
--- a/checks/files
+++ b/checks/files
@@ -707,11 +707,28 @@ foreach my $file (@{$info->sorted_index}) {
 	}
     }
 
-    # ---------------- .pyc (compiled python files
-    if ($file =~ m,^usr/lib/python\d\.\d/.*.pyc$,) {
-	tag "package-installs-python-pyc", "$file"
+    # ---------------- .pyc/.pyo (compiled python files)
+    #  skip any file installed inside a __pycache__ directory
+    #  - we have a separate check for that directory.
+    if ($file =~ m,\.py[co]$,o && $file !~ m,/__pycache__/,o) {
+	tag "package-installs-python-bytecode", "$file";
+	# To avoid failing the "tag not implemented" test.
+	tag "package-installs-python-pyc", "$file" if (0);
     }
 
+    # ---------------- __pycache__ (directory for pyc/pyo files)
+    if ($index_info->{type} =~ m/^d/o && $file =~ m,/__pycache__/,o){
+	tag "package-installs-python-pycache-dir", "$file";
+    }
+
+    # ---------------- .egg (python egg files)
+    if ($file =~ m,\.egg$,o && 	($file =~ m,usr/lib/python\d+(?:\.\d+/),o ||
+				 $file =~ m,usr/lib/pyshared,o ||
+				 $file =~ m,usr/share/,o)){
+	tag "package-installs-python-egg", "$file";
+    }
+
+
     # ---------------- /usr/lib/site-python
     if ($file =~ m,^usr/lib/site-python/\S,) {
 	tag "file-in-usr-lib-site-python", "$file";
diff --git a/checks/files.desc b/checks/files.desc
index 5f5e97c..b71f9d8 100644
--- a/checks/files.desc
+++ b/checks/files.desc
@@ -744,9 +744,37 @@ Info: The directory /usr/lib/site-python has been deprecated as a
 Tag: package-installs-python-pyc
 Severity: serious
 Certainty: certain
+Info: This tag has been replaced by package-installs-python-bytecode,
+ but since the ftp-master auto-reject file refers to it we still need
+ it.
+
+Tag: package-installs-python-bytecode
+Severity: serious
+Certainty: certain
+Ref: python-policy 2.6
 Info: Compiled python source files must not be included in the package.
  These files should be removed from the package and created at package
- installation time in the postinst. 
+ installation time in the postinst.
+
+Tag: package-installs-python-egg
+Severity: serious
+Certainty: possible
+Ref: python-policy 2.6
+Info: Python eggs should not be installed, since the Debian package is
+ supposed to do the required steps for installing the Python code.
+ .
+ The egg may contain pre-compiled python bytecode or shared libraries.
+
+Tag: package-installs-python-pycache-dir
+Severity: serious
+Certainty: certain
+Ref: python-policy 2.6
+Info: The package installs a __pycache__ directory, which is normally
+ only used to store compiled python source files. Compiled python
+ source files must not be included in the package, instead they
+ should be generated at installation time in the postinst.
+ .
+ Note this tag is issues even if the directory is empty.
 
 Tag: bad-permissions-for-ali-file
 Severity: normal
diff --git a/t/COVERAGE b/t/COVERAGE
index 67ddd0a..7325998 100644
--- a/t/COVERAGE
+++ b/t/COVERAGE
@@ -94,6 +94,7 @@ files package-installs-font-to-usr-x11r6
 files package-installs-into-etc-rc.boot
 files package-installs-into-etc-rc.d
 files package-installs-perllocal-pod
+files package-installs-python-pyc
 files package-uses-obsolete-file
 files perl-module-in-core-directory
 files setgid-binary
@@ -257,7 +258,6 @@ files package-installs-file-to-usr-x11r6-bin
 files package-installs-into-etc-gconf-schemas
 files package-installs-nonbinary-perl-in-usr-lib-perl5
 files package-installs-packlist
-files package-installs-python-pyc
 files script-in-usr-share-doc
 files script-with-language-extension
 files setuid-binary
@@ -545,7 +545,6 @@ scripts
   init.d-script-missing-lsb-short-description
   non-standard-executable-perm
   non-standard-setuid-executable-perm
-  package-installs-python-pyc
   php-script-but-no-phpX-cli-dep
   python-script-but-no-python-dep
   script-in-usr-share-doc
diff --git a/t/tests/files-objects-inv/debian/debian/control.in b/t/tests/files-objects-inv/debian/debian/control.in
deleted file mode 100644
index 79a6d1c..0000000
--- a/t/tests/files-objects-inv/debian/debian/control.in
+++ /dev/null
@@ -1,16 +0,0 @@
-Source: {$srcpkg}
-Priority: extra
-Section: python
-Maintainer: {$author}
-Standards-Version: {$standards_version}
-Build-Depends: debhelper (>= 7.0.50~)
-
-Package: python-kinterbasdb
-Architecture: all
-Depends: $\{misc:Depends\},
-Description: {$description}
- This is a test package designed to exercise some feature or tag of
- Lintian.  It is part of the Lintian test suite and may do very odd
- things.  It should not be installed like a regular package.  It may
- be an empty package.
-
diff --git a/t/tests/files-objects-inv/debian/debian/install b/t/tests/files-objects-inv/debian/debian/install
deleted file mode 100644
index 07f0eb9..0000000
--- a/t/tests/files-objects-inv/debian/debian/install
+++ /dev/null
@@ -1 +0,0 @@
-objects.inv usr/share/doc/python-kinterbasdb/docs/
diff --git a/t/tests/files-objects-inv/debian/debian/rules b/t/tests/files-objects-inv/debian/debian/rules
deleted file mode 100644
index 6efd88b..0000000
--- a/t/tests/files-objects-inv/debian/debian/rules
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/make -f
-
-DOCS:=debian/python-kinterbasdb/usr/share/doc/python-kinterbasdb/docs
-%:
-	dh $@
-
-override_dh_compress:
-	dh_compress
-	# Manually compress it, since debhelper will fix #608907
-	# in the "near" future.
-	[ -f "$(DOCS)/objects.inv.gz" ] || gzip --best "$(DOCS)/objects.inv"
diff --git a/t/tests/files-objects-inv/debian/objects.inv b/t/tests/files-objects-inv/debian/objects.inv
deleted file mode 100644
index 2dcebcb..0000000
--- a/t/tests/files-objects-inv/debian/objects.inv
+++ /dev/null
@@ -1,199 +0,0 @@
-# Sphinx inventory version 1
-# Project: KInterbasDB
-# Version: 3.3
-kinterbasdb.typeconv_23plus_lowmem mod beyond-python-db-api.html
-kinterbasdb mod index.html
-kinterbasdb.typeconv_naked mod beyond-python-db-api.html
-kinterbasdb.typeconv_fixed_fixedpoint mod beyond-python-db-api.html
-kinterbasdb.typeconv_23plus mod beyond-python-db-api.html
-kinterbasdb.typeconv_fixed_decimal mod beyond-python-db-api.html
-kinterbasdb.typeconv_fixed_stdlib mod beyond-python-db-api.html
-kinterbasdb.typeconv_datetime_stdlib mod beyond-python-db-api.html
-kinterbasdb.typeconv_text_unicode mod beyond-python-db-api.html
-kinterbasdb.typeconv_datetime_mx mod beyond-python-db-api.html
-kinterbasdb.typeconv_backcompat mod beyond-python-db-api.html
-kinterbasdb.services mod beyond-python-db-api.html
-kinterbasdb.typeconv_24plus mod beyond-python-db-api.html
-kinterbasdb.services.Connection.getArchitecture method beyond-python-db-api.html
-kinterbasdb.connect function python-db-api-compliance.html
-kinterbasdb.Cursor.transaction attribute beyond-python-db-api.html
-Cursor.executemany method Python-DB-API-2.0.html
-kinterbasdb.TableReservation.render method beyond-python-db-api.html
-Error exception Python-DB-API-2.0.html
-kinterbasdb.PreparedStatement.description attribute beyond-python-db-api.html
-kinterbasdb.DATETIME data python-db-api-compliance.html
-kinterbasdb.Connection.prepare method beyond-python-db-api.html
-kinterbasdb.PreparedStatement.sql attribute beyond-python-db-api.html
-kinterbasdb.Transaction.cursors attribute beyond-python-db-api.html
-kinterbasdb.Connection.trans method beyond-python-db-api.html
-kinterbasdb.services.Conenction.setWriteMode method beyond-python-db-api.html
-kinterbasdb.Connection.event_conduit method beyond-python-db-api.html
-kinterbasdb.BlobReader.chunks method beyond-python-db-api.html
-kinterbasdb.ConnectionGroup.prepare method beyond-python-db-api.html
-kinterbasdb.TableReservation class beyond-python-db-api.html
-Cursor.close method Python-DB-API-2.0.html
-kinterbasdb.Transaction.n_physical attribute beyond-python-db-api.html
-TimestampFromTicks function Python-DB-API-2.0.html
-kinterbasdb.CT_NONTRANSPARENT data beyond-python-db-api.html
-kinterbasdb.TPB.isolation_level attribute beyond-python-db-api.html
-kinterbasdb.Transaction.close method beyond-python-db-api.html
-kinterbasdb.PreparedStatement.n_output_params attribute beyond-python-db-api.html
-Cursor.nextset method Python-DB-API-2.0.html
-DATETIME data Python-DB-API-2.0.html
-kinterbasdb.Cursor.rowcount attribute python-db-api-compliance.html
-kinterbasdb.Connection.database_info method beyond-python-db-api.html
-kinterbasdb.ConnectionGroup.remove method beyond-python-db-api.html
-kinterbasdb.TPB.render method beyond-python-db-api.html
-kinterbasdb.services.Conenction.modifyUser method beyond-python-db-api.html
-kinterbasdb.services.Conenction.rollbackLimboTransaction method beyond-python-db-api.html
-kinterbasdb.Transaction.__init__ method beyond-python-db-api.html
-kinterbasdb.services.Connection.getHomeDir method beyond-python-db-api.html
-kinterbasdb.Cursor.setinputsizes method python-db-api-compliance.html
-paramstyle data Python-DB-API-2.0.html
-kinterbasdb.TPB.lock_timeout attribute beyond-python-db-api.html
-Connection.rollback method Python-DB-API-2.0.html
-kinterbasdb.EventConduit.close method beyond-python-db-api.html
-kinterbasdb.Cursor.arraysize attribute python-db-api-compliance.html
-DatabaseError exception Python-DB-API-2.0.html
-kinterbasdb.Cursor.description attribute python-db-api-compliance.html
-kinterbasdb.EventConduit.flush method beyond-python-db-api.html
-kinterbasdb.services.Connection.close method beyond-python-db-api.html
-kinterbasdb.services.Conenction.activateShadowFile method beyond-python-db-api.html
-kinterbasdb.Cursor.setoutputsize method python-db-api-compliance.html
-kinterbasdb.ConnectionGroup.commit method beyond-python-db-api.html
-kinterbasdb.services.Conenction.setSQLDialect method beyond-python-db-api.html
-connect function Python-DB-API-2.0.html
-Cursor.setinputsizes method Python-DB-API-2.0.html
-kinterbasdb.Connection.dialect attribute python-db-api-compliance.html
-kinterbasdb.Connection.execute_immediate method python-db-api-compliance.html
-kinterbasdb.create_database function beyond-python-db-api.html
-kinterbasdb.Connection.get_type_trans_in method beyond-python-db-api.html
-kinterbasdb.TPB class beyond-python-db-api.html
-kinterbasdb.services.connect function beyond-python-db-api.html
-kinterbasdb.Transaction.commit method beyond-python-db-api.html
-kinterbasdb.Connection.charset attribute python-db-api-compliance.html
-TimeFromTicks function Python-DB-API-2.0.html
-kinterbasdb.Connection.savepoint method beyond-python-db-api.html
-kinterbasdb.Cursor.fetchallmap method python-db-api-compliance.html
-kinterbasdb.PreparedStatement.statement_type attribute beyond-python-db-api.html
-kinterbasdb.Cursor class beyond-python-db-api.html
-kinterbasdb.services.Conenction.setShouldReservePageSpace method beyond-python-db-api.html
-kinterbasdb.ConnectionGroup class beyond-python-db-api.html
-Cursor.callproc method Python-DB-API-2.0.html
-kinterbasdb.services.Connection class beyond-python-db-api.html
-kinterbasdb.services.Connection.getServiceManagerVersion method beyond-python-db-api.html
-IntegrityError exception Python-DB-API-2.0.html
-kinterbasdb.Transaction class beyond-python-db-api.html
-Cursor class Python-DB-API-2.0.html
-kinterbasdb.Connection.drop_database method beyond-python-db-api.html
-Connection.commit method Python-DB-API-2.0.html
-kinterbasdb.services.Conenction.userExists method beyond-python-db-api.html
-kinterbasdb.Cursor.fetchone method python-db-api-compliance.html
-kinterbasdb.Connection.transactions attribute beyond-python-db-api.html
-kinterbasdb.ConnectionGroup.disband method beyond-python-db-api.html
-InterfaceError exception Python-DB-API-2.0.html
-kinterbasdb.Transaction.connection attribute beyond-python-db-api.html
-kinterbasdb.Connection.rollback method python-db-api-compliance.html
-kinterbasdb.services.Connection.getStatistics method beyond-python-db-api.html
-kinterbasdb.TPB.access_mode attribute beyond-python-db-api.html
-kinterbasdb.services.Connection.getCapabilityMask method beyond-python-db-api.html
-kinterbasdb.Connection.precision_mode attribute python-db-api-compliance.html
-kinterbasdb.Connection.transaction_info method beyond-python-db-api.html
-kinterbasdb.EventConduit class beyond-python-db-api.html
-BINARY data Python-DB-API-2.0.html
-kinterbasdb.Connection.db_info method beyond-python-db-api.html
-kinterbasdb.ConnectionGroup.add method beyond-python-db-api.html
-Binary function Python-DB-API-2.0.html
-kinterbasdb.init function beyond-python-db-api.html
-Cursor.setoutputsize method Python-DB-API-2.0.html
-kinterbasdb.CT_COMMIT data beyond-python-db-api.html
-kinterbasdb.services.Connection.getConnectionCount method beyond-python-db-api.html
-kinterbasdb.services.Connection.getLockFileDir method beyond-python-db-api.html
-kinterbasdb.ConnectionGroup.contains method beyond-python-db-api.html
-kinterbasdb.ConnectionGroup.rollback method beyond-python-db-api.html
-kinterbasdb.Connection.set_type_trans_in method beyond-python-db-api.html
-kinterbasdb.Transaction.trans_info method beyond-python-db-api.html
-Cursor.rowcount attribute Python-DB-API-2.0.html
-threadsafety data Python-DB-API-2.0.html
-kinterbasdb.services.Connection.restore method beyond-python-db-api.html
-Warning exception Python-DB-API-2.0.html
-kinterbasdb.services.Connection.getSecurityDatabasePath method beyond-python-db-api.html
-Timestamp function Python-DB-API-2.0.html
-kinterbasdb.Cursor.fetchmanymap method python-db-api-compliance.html
-kinterbasdb.Transaction.closed attribute beyond-python-db-api.html
-kinterbasdb.Cursor.fetchonemap method python-db-api-compliance.html
-Date function Python-DB-API-2.0.html
-kinterbasdb.ConnectionGroup.count method beyond-python-db-api.html
-kinterbasdb.services.Connection.setSweepInterval method beyond-python-db-api.html
-ProgrammingError exception Python-DB-API-2.0.html
-kinterbasdb.Transaction.begin method beyond-python-db-api.html
-kinterbasdb.CT_ROLLBACK data beyond-python-db-api.html
-kinterbasdb.Cursor.set_type_trans_in method beyond-python-db-api.html
-kinterbasdb.services.Conenction.shutdown method beyond-python-db-api.html
-kinterbasdb.services.Connection.getAttachedDatabaseNames method beyond-python-db-api.html
-kinterbasdb.Cursor.fetchall method python-db-api-compliance.html
-kinterbasdb.services.Connection.backup method beyond-python-db-api.html
-Connection class Python-DB-API-2.0.html
-kinterbasdb.ConnectionGroup.begin method beyond-python-db-api.html
-Time function Python-DB-API-2.0.html
-kinterbasdb.services.Connection.getMessageFileDir method beyond-python-db-api.html
-kinterbasdb.Transaction.resolution attribute beyond-python-db-api.html
-Connection.cursor method Python-DB-API-2.0.html
-kinterbasdb.ConnectionGroup.__init__ method beyond-python-db-api.html
-kinterbasdb.Cursor.itermap method python-db-api-compliance.html
-kinterbasdb.services.User class beyond-python-db-api.html
-DataError exception Python-DB-API-2.0.html
-kinterbasdb.CT_VETO data beyond-python-db-api.html
-kinterbasdb.services.Conenction.bringOnline method beyond-python-db-api.html
-apilevel data Python-DB-API-2.0.html
-kinterbasdb.Cursor.get_type_trans_in method beyond-python-db-api.html
-InternalError exception Python-DB-API-2.0.html
-NUMBER data Python-DB-API-2.0.html
-kinterbasdb.services.Conenction.repair method beyond-python-db-api.html
-Cursor.fetchall method Python-DB-API-2.0.html
-kinterbasdb.Transaction.prepare method beyond-python-db-api.html
-kinterbasdb.Transaction.rollback method beyond-python-db-api.html
-kinterbasdb.services.Conenction.setAccessMode method beyond-python-db-api.html
-Cursor.fetchmany method Python-DB-API-2.0.html
-kinterbasdb.services.Connection.getServerVersion method beyond-python-db-api.html
-kinterbasdb.Transaction.cursor method beyond-python-db-api.html
-kinterbasdb.services.Conenction.commitLimboTransaction method beyond-python-db-api.html
-kinterbasdb.Cursor.fetchmany method python-db-api-compliance.html
-Cursor.execute method Python-DB-API-2.0.html
-kinterbasdb.services.Conenction.removeUser method beyond-python-db-api.html
-kinterbasdb.Cursor.name attribute beyond-python-db-api.html
-kinterbasdb.ConnectionGroup.clear method beyond-python-db-api.html
-kinterbasdb.Connection class beyond-python-db-api.html
-kinterbasdb.Connection.main_transaction attribute beyond-python-db-api.html
-kinterbasdb.Cursor.prep method beyond-python-db-api.html
-kinterbasdb.Cursor.nextset method python-db-api-compliance.html
-kinterbasdb.BlobReader class beyond-python-db-api.html
-kinterbasdb.TPB.lock_resolution attribute beyond-python-db-api.html
-kinterbasdb.services.Conenction.getLimboTransactionIDs method beyond-python-db-api.html
-STRING data Python-DB-API-2.0.html
-Cursor.description attribute Python-DB-API-2.0.html
-NotSupportedError exception Python-DB-API-2.0.html
-kinterbasdb.PreparedStatement class beyond-python-db-api.html
-kinterbasdb.ConnectionGroup.members method beyond-python-db-api.html
-kinterbasdb.services.Conenction.addUser method beyond-python-db-api.html
-kinterbasdb.PreparedStatement.n_input_params attribute beyond-python-db-api.html
-kinterbasdb.services.Conenction.setDefaultPageBuffers method beyond-python-db-api.html
-kinterbasdb.Connection.server_version attribute python-db-api-compliance.html
-Connection.close method Python-DB-API-2.0.html
-kinterbasdb.Connection.trans_info method beyond-python-db-api.html
-kinterbasdb.Cursor.iter method python-db-api-compliance.html
-DateFromTicks function Python-DB-API-2.0.html
-kinterbasdb.EventConduit.wait method beyond-python-db-api.html
-kinterbasdb.EventConduit.__init__ method beyond-python-db-api.html
-Cursor.fetchone method Python-DB-API-2.0.html
-kinterbasdb.Transaction.savepoint method beyond-python-db-api.html
-kinterbasdb.services.Conenction.getUsers method beyond-python-db-api.html
-kinterbasdb.TPB.table_reservation attribute beyond-python-db-api.html
-kinterbasdb.Transaction.transaction_info method beyond-python-db-api.html
-kinterbasdb.PreparedStatement.plan attribute beyond-python-db-api.html
-kinterbasdb.services.Connection.getLog method beyond-python-db-api.html
-ROWID data Python-DB-API-2.0.html
-kinterbasdb.Connection.begin method beyond-python-db-api.html
-kinterbasdb.services.Connection.sweep method beyond-python-db-api.html
-kinterbasdb.Connection.commit method python-db-api-compliance.html
-OperationalError exception Python-DB-API-2.0.html
diff --git a/t/tests/files-objects-inv/desc b/t/tests/files-objects-inv/desc
deleted file mode 100644
index 7ee3493..0000000
--- a/t/tests/files-objects-inv/desc
+++ /dev/null
@@ -1,7 +0,0 @@
-Testname: files-objects-inv
-Sequence: 6000
-Version: 1.0
-Description: Test tags for compressed objects.inv files
-References: Debian Bug#608810
-Test-For:
- compressed-objects.inv
diff --git a/t/tests/files-objects-inv/tags b/t/tests/files-objects-inv/tags
deleted file mode 100644
index ce5d810..0000000
--- a/t/tests/files-objects-inv/tags
+++ /dev/null
@@ -1 +0,0 @@
-W: python-kinterbasdb: compressed-objects.inv usr/share/doc/python-kinterbasdb/docs/objects.inv.gz
diff --git a/t/tests/files-python-general/debian/code.pyc b/t/tests/files-python-general/debian/code.pyc
new file mode 100644
index 0000000..5a11df8
--- /dev/null
+++ b/t/tests/files-python-general/debian/code.pyc
@@ -0,0 +1 @@
+Hallo world
diff --git a/t/tests/files-python-general/debian/code.pyo b/t/tests/files-python-general/debian/code.pyo
new file mode 100644
index 0000000..5a11df8
--- /dev/null
+++ b/t/tests/files-python-general/debian/code.pyo
@@ -0,0 +1 @@
+Hallo world
diff --git a/t/tests/files-python-general/debian/debian/control.in b/t/tests/files-python-general/debian/debian/control.in
new file mode 100644
index 0000000..79a6d1c
--- /dev/null
+++ b/t/tests/files-python-general/debian/debian/control.in
@@ -0,0 +1,16 @@
+Source: {$srcpkg}
+Priority: extra
+Section: python
+Maintainer: {$author}
+Standards-Version: {$standards_version}
+Build-Depends: debhelper (>= 7.0.50~)
+
+Package: python-kinterbasdb
+Architecture: all
+Depends: $\{misc:Depends\},
+Description: {$description}
+ This is a test package designed to exercise some feature or tag of
+ Lintian.  It is part of the Lintian test suite and may do very odd
+ things.  It should not be installed like a regular package.  It may
+ be an empty package.
+
diff --git a/t/tests/files-python-general/debian/debian/install b/t/tests/files-python-general/debian/debian/install
new file mode 100644
index 0000000..332e6f1
--- /dev/null
+++ b/t/tests/files-python-general/debian/debian/install
@@ -0,0 +1,6 @@
+code.pyc usr/share/python-kinterbasdb/
+code.pyo usr/share/python-kinterbasdb/
+code.pyc usr/share/python-kinterbasdb/__pycache__/
+code.pyo usr/share/python-kinterbasdb/__pycache__/
+objects.inv usr/share/doc/python-kinterbasdb/docs/
+python.egg usr/share/python-kinterbasdb/
diff --git a/t/tests/files-python-general/debian/debian/rules b/t/tests/files-python-general/debian/debian/rules
new file mode 100644
index 0000000..6efd88b
--- /dev/null
+++ b/t/tests/files-python-general/debian/debian/rules
@@ -0,0 +1,11 @@
+#!/usr/bin/make -f
+
+DOCS:=debian/python-kinterbasdb/usr/share/doc/python-kinterbasdb/docs
+%:
+	dh $@
+
+override_dh_compress:
+	dh_compress
+	# Manually compress it, since debhelper will fix #608907
+	# in the "near" future.
+	[ -f "$(DOCS)/objects.inv.gz" ] || gzip --best "$(DOCS)/objects.inv"
diff --git a/t/tests/files-python-general/debian/objects.inv b/t/tests/files-python-general/debian/objects.inv
new file mode 100644
index 0000000..2dcebcb
--- /dev/null
+++ b/t/tests/files-python-general/debian/objects.inv
@@ -0,0 +1,199 @@
+# Sphinx inventory version 1
+# Project: KInterbasDB
+# Version: 3.3
+kinterbasdb.typeconv_23plus_lowmem mod beyond-python-db-api.html
+kinterbasdb mod index.html
+kinterbasdb.typeconv_naked mod beyond-python-db-api.html
+kinterbasdb.typeconv_fixed_fixedpoint mod beyond-python-db-api.html
+kinterbasdb.typeconv_23plus mod beyond-python-db-api.html
+kinterbasdb.typeconv_fixed_decimal mod beyond-python-db-api.html
+kinterbasdb.typeconv_fixed_stdlib mod beyond-python-db-api.html
+kinterbasdb.typeconv_datetime_stdlib mod beyond-python-db-api.html
+kinterbasdb.typeconv_text_unicode mod beyond-python-db-api.html
+kinterbasdb.typeconv_datetime_mx mod beyond-python-db-api.html
+kinterbasdb.typeconv_backcompat mod beyond-python-db-api.html
+kinterbasdb.services mod beyond-python-db-api.html
+kinterbasdb.typeconv_24plus mod beyond-python-db-api.html
+kinterbasdb.services.Connection.getArchitecture method beyond-python-db-api.html
+kinterbasdb.connect function python-db-api-compliance.html
+kinterbasdb.Cursor.transaction attribute beyond-python-db-api.html
+Cursor.executemany method Python-DB-API-2.0.html
+kinterbasdb.TableReservation.render method beyond-python-db-api.html
+Error exception Python-DB-API-2.0.html
+kinterbasdb.PreparedStatement.description attribute beyond-python-db-api.html
+kinterbasdb.DATETIME data python-db-api-compliance.html
+kinterbasdb.Connection.prepare method beyond-python-db-api.html
+kinterbasdb.PreparedStatement.sql attribute beyond-python-db-api.html
+kinterbasdb.Transaction.cursors attribute beyond-python-db-api.html
+kinterbasdb.Connection.trans method beyond-python-db-api.html
+kinterbasdb.services.Conenction.setWriteMode method beyond-python-db-api.html
+kinterbasdb.Connection.event_conduit method beyond-python-db-api.html
+kinterbasdb.BlobReader.chunks method beyond-python-db-api.html
+kinterbasdb.ConnectionGroup.prepare method beyond-python-db-api.html
+kinterbasdb.TableReservation class beyond-python-db-api.html
+Cursor.close method Python-DB-API-2.0.html
+kinterbasdb.Transaction.n_physical attribute beyond-python-db-api.html
+TimestampFromTicks function Python-DB-API-2.0.html
+kinterbasdb.CT_NONTRANSPARENT data beyond-python-db-api.html
+kinterbasdb.TPB.isolation_level attribute beyond-python-db-api.html
+kinterbasdb.Transaction.close method beyond-python-db-api.html
+kinterbasdb.PreparedStatement.n_output_params attribute beyond-python-db-api.html
+Cursor.nextset method Python-DB-API-2.0.html
+DATETIME data Python-DB-API-2.0.html
+kinterbasdb.Cursor.rowcount attribute python-db-api-compliance.html
+kinterbasdb.Connection.database_info method beyond-python-db-api.html
+kinterbasdb.ConnectionGroup.remove method beyond-python-db-api.html
+kinterbasdb.TPB.render method beyond-python-db-api.html
+kinterbasdb.services.Conenction.modifyUser method beyond-python-db-api.html
+kinterbasdb.services.Conenction.rollbackLimboTransaction method beyond-python-db-api.html
+kinterbasdb.Transaction.__init__ method beyond-python-db-api.html
+kinterbasdb.services.Connection.getHomeDir method beyond-python-db-api.html
+kinterbasdb.Cursor.setinputsizes method python-db-api-compliance.html
+paramstyle data Python-DB-API-2.0.html
+kinterbasdb.TPB.lock_timeout attribute beyond-python-db-api.html
+Connection.rollback method Python-DB-API-2.0.html
+kinterbasdb.EventConduit.close method beyond-python-db-api.html
+kinterbasdb.Cursor.arraysize attribute python-db-api-compliance.html
+DatabaseError exception Python-DB-API-2.0.html
+kinterbasdb.Cursor.description attribute python-db-api-compliance.html
+kinterbasdb.EventConduit.flush method beyond-python-db-api.html
+kinterbasdb.services.Connection.close method beyond-python-db-api.html
+kinterbasdb.services.Conenction.activateShadowFile method beyond-python-db-api.html
+kinterbasdb.Cursor.setoutputsize method python-db-api-compliance.html
+kinterbasdb.ConnectionGroup.commit method beyond-python-db-api.html
+kinterbasdb.services.Conenction.setSQLDialect method beyond-python-db-api.html
+connect function Python-DB-API-2.0.html
+Cursor.setinputsizes method Python-DB-API-2.0.html
+kinterbasdb.Connection.dialect attribute python-db-api-compliance.html
+kinterbasdb.Connection.execute_immediate method python-db-api-compliance.html
+kinterbasdb.create_database function beyond-python-db-api.html
+kinterbasdb.Connection.get_type_trans_in method beyond-python-db-api.html
+kinterbasdb.TPB class beyond-python-db-api.html
+kinterbasdb.services.connect function beyond-python-db-api.html
+kinterbasdb.Transaction.commit method beyond-python-db-api.html
+kinterbasdb.Connection.charset attribute python-db-api-compliance.html
+TimeFromTicks function Python-DB-API-2.0.html
+kinterbasdb.Connection.savepoint method beyond-python-db-api.html
+kinterbasdb.Cursor.fetchallmap method python-db-api-compliance.html
+kinterbasdb.PreparedStatement.statement_type attribute beyond-python-db-api.html
+kinterbasdb.Cursor class beyond-python-db-api.html
+kinterbasdb.services.Conenction.setShouldReservePageSpace method beyond-python-db-api.html
+kinterbasdb.ConnectionGroup class beyond-python-db-api.html
+Cursor.callproc method Python-DB-API-2.0.html
+kinterbasdb.services.Connection class beyond-python-db-api.html
+kinterbasdb.services.Connection.getServiceManagerVersion method beyond-python-db-api.html
+IntegrityError exception Python-DB-API-2.0.html
+kinterbasdb.Transaction class beyond-python-db-api.html
+Cursor class Python-DB-API-2.0.html
+kinterbasdb.Connection.drop_database method beyond-python-db-api.html
+Connection.commit method Python-DB-API-2.0.html
+kinterbasdb.services.Conenction.userExists method beyond-python-db-api.html
+kinterbasdb.Cursor.fetchone method python-db-api-compliance.html
+kinterbasdb.Connection.transactions attribute beyond-python-db-api.html
+kinterbasdb.ConnectionGroup.disband method beyond-python-db-api.html
+InterfaceError exception Python-DB-API-2.0.html
+kinterbasdb.Transaction.connection attribute beyond-python-db-api.html
+kinterbasdb.Connection.rollback method python-db-api-compliance.html
+kinterbasdb.services.Connection.getStatistics method beyond-python-db-api.html
+kinterbasdb.TPB.access_mode attribute beyond-python-db-api.html
+kinterbasdb.services.Connection.getCapabilityMask method beyond-python-db-api.html
+kinterbasdb.Connection.precision_mode attribute python-db-api-compliance.html
+kinterbasdb.Connection.transaction_info method beyond-python-db-api.html
+kinterbasdb.EventConduit class beyond-python-db-api.html
+BINARY data Python-DB-API-2.0.html
+kinterbasdb.Connection.db_info method beyond-python-db-api.html
+kinterbasdb.ConnectionGroup.add method beyond-python-db-api.html
+Binary function Python-DB-API-2.0.html
+kinterbasdb.init function beyond-python-db-api.html
+Cursor.setoutputsize method Python-DB-API-2.0.html
+kinterbasdb.CT_COMMIT data beyond-python-db-api.html
+kinterbasdb.services.Connection.getConnectionCount method beyond-python-db-api.html
+kinterbasdb.services.Connection.getLockFileDir method beyond-python-db-api.html
+kinterbasdb.ConnectionGroup.contains method beyond-python-db-api.html
+kinterbasdb.ConnectionGroup.rollback method beyond-python-db-api.html
+kinterbasdb.Connection.set_type_trans_in method beyond-python-db-api.html
+kinterbasdb.Transaction.trans_info method beyond-python-db-api.html
+Cursor.rowcount attribute Python-DB-API-2.0.html
+threadsafety data Python-DB-API-2.0.html
+kinterbasdb.services.Connection.restore method beyond-python-db-api.html
+Warning exception Python-DB-API-2.0.html
+kinterbasdb.services.Connection.getSecurityDatabasePath method beyond-python-db-api.html
+Timestamp function Python-DB-API-2.0.html
+kinterbasdb.Cursor.fetchmanymap method python-db-api-compliance.html
+kinterbasdb.Transaction.closed attribute beyond-python-db-api.html
+kinterbasdb.Cursor.fetchonemap method python-db-api-compliance.html
+Date function Python-DB-API-2.0.html
+kinterbasdb.ConnectionGroup.count method beyond-python-db-api.html
+kinterbasdb.services.Connection.setSweepInterval method beyond-python-db-api.html
+ProgrammingError exception Python-DB-API-2.0.html
+kinterbasdb.Transaction.begin method beyond-python-db-api.html
+kinterbasdb.CT_ROLLBACK data beyond-python-db-api.html
+kinterbasdb.Cursor.set_type_trans_in method beyond-python-db-api.html
+kinterbasdb.services.Conenction.shutdown method beyond-python-db-api.html
+kinterbasdb.services.Connection.getAttachedDatabaseNames method beyond-python-db-api.html
+kinterbasdb.Cursor.fetchall method python-db-api-compliance.html
+kinterbasdb.services.Connection.backup method beyond-python-db-api.html
+Connection class Python-DB-API-2.0.html
+kinterbasdb.ConnectionGroup.begin method beyond-python-db-api.html
+Time function Python-DB-API-2.0.html
+kinterbasdb.services.Connection.getMessageFileDir method beyond-python-db-api.html
+kinterbasdb.Transaction.resolution attribute beyond-python-db-api.html
+Connection.cursor method Python-DB-API-2.0.html
+kinterbasdb.ConnectionGroup.__init__ method beyond-python-db-api.html
+kinterbasdb.Cursor.itermap method python-db-api-compliance.html
+kinterbasdb.services.User class beyond-python-db-api.html
+DataError exception Python-DB-API-2.0.html
+kinterbasdb.CT_VETO data beyond-python-db-api.html
+kinterbasdb.services.Conenction.bringOnline method beyond-python-db-api.html
+apilevel data Python-DB-API-2.0.html
+kinterbasdb.Cursor.get_type_trans_in method beyond-python-db-api.html
+InternalError exception Python-DB-API-2.0.html
+NUMBER data Python-DB-API-2.0.html
+kinterbasdb.services.Conenction.repair method beyond-python-db-api.html
+Cursor.fetchall method Python-DB-API-2.0.html
+kinterbasdb.Transaction.prepare method beyond-python-db-api.html
+kinterbasdb.Transaction.rollback method beyond-python-db-api.html
+kinterbasdb.services.Conenction.setAccessMode method beyond-python-db-api.html
+Cursor.fetchmany method Python-DB-API-2.0.html
+kinterbasdb.services.Connection.getServerVersion method beyond-python-db-api.html
+kinterbasdb.Transaction.cursor method beyond-python-db-api.html
+kinterbasdb.services.Conenction.commitLimboTransaction method beyond-python-db-api.html
+kinterbasdb.Cursor.fetchmany method python-db-api-compliance.html
+Cursor.execute method Python-DB-API-2.0.html
+kinterbasdb.services.Conenction.removeUser method beyond-python-db-api.html
+kinterbasdb.Cursor.name attribute beyond-python-db-api.html
+kinterbasdb.ConnectionGroup.clear method beyond-python-db-api.html
+kinterbasdb.Connection class beyond-python-db-api.html
+kinterbasdb.Connection.main_transaction attribute beyond-python-db-api.html
+kinterbasdb.Cursor.prep method beyond-python-db-api.html
+kinterbasdb.Cursor.nextset method python-db-api-compliance.html
+kinterbasdb.BlobReader class beyond-python-db-api.html
+kinterbasdb.TPB.lock_resolution attribute beyond-python-db-api.html
+kinterbasdb.services.Conenction.getLimboTransactionIDs method beyond-python-db-api.html
+STRING data Python-DB-API-2.0.html
+Cursor.description attribute Python-DB-API-2.0.html
+NotSupportedError exception Python-DB-API-2.0.html
+kinterbasdb.PreparedStatement class beyond-python-db-api.html
+kinterbasdb.ConnectionGroup.members method beyond-python-db-api.html
+kinterbasdb.services.Conenction.addUser method beyond-python-db-api.html
+kinterbasdb.PreparedStatement.n_input_params attribute beyond-python-db-api.html
+kinterbasdb.services.Conenction.setDefaultPageBuffers method beyond-python-db-api.html
+kinterbasdb.Connection.server_version attribute python-db-api-compliance.html
+Connection.close method Python-DB-API-2.0.html
+kinterbasdb.Connection.trans_info method beyond-python-db-api.html
+kinterbasdb.Cursor.iter method python-db-api-compliance.html
+DateFromTicks function Python-DB-API-2.0.html
+kinterbasdb.EventConduit.wait method beyond-python-db-api.html
+kinterbasdb.EventConduit.__init__ method beyond-python-db-api.html
+Cursor.fetchone method Python-DB-API-2.0.html
+kinterbasdb.Transaction.savepoint method beyond-python-db-api.html
+kinterbasdb.services.Conenction.getUsers method beyond-python-db-api.html
+kinterbasdb.TPB.table_reservation attribute beyond-python-db-api.html
+kinterbasdb.Transaction.transaction_info method beyond-python-db-api.html
+kinterbasdb.PreparedStatement.plan attribute beyond-python-db-api.html
+kinterbasdb.services.Connection.getLog method beyond-python-db-api.html
+ROWID data Python-DB-API-2.0.html
+kinterbasdb.Connection.begin method beyond-python-db-api.html
+kinterbasdb.services.Connection.sweep method beyond-python-db-api.html
+kinterbasdb.Connection.commit method python-db-api-compliance.html
+OperationalError exception Python-DB-API-2.0.html
diff --git a/t/tests/files-python-general/debian/python.egg b/t/tests/files-python-general/debian/python.egg
new file mode 100644
index 0000000..336f590
--- /dev/null
+++ b/t/tests/files-python-general/debian/python.egg
@@ -0,0 +1 @@
+Hallo World
diff --git a/t/tests/files-python-general/desc b/t/tests/files-python-general/desc
new file mode 100644
index 0000000..ec25e73
--- /dev/null
+++ b/t/tests/files-python-general/desc
@@ -0,0 +1,10 @@
+Testname: files-python-general
+Sequence: 6000
+Version: 1.0
+Description: Test general python related tags
+References: Debian Bug#608810
+Test-For:
+ compressed-objects.inv
+ package-installs-python-bytecode
+ package-installs-python-egg
+ package-installs-python-pycache-dir
diff --git a/t/tests/files-python-general/tags b/t/tests/files-python-general/tags
new file mode 100644
index 0000000..6383a44
--- /dev/null
+++ b/t/tests/files-python-general/tags
@@ -0,0 +1,5 @@
+E: python-kinterbasdb: package-installs-python-bytecode usr/share/python-kinterbasdb/code.pyc
+E: python-kinterbasdb: package-installs-python-bytecode usr/share/python-kinterbasdb/code.pyo
+E: python-kinterbasdb: package-installs-python-egg usr/share/python-kinterbasdb/python.egg
+E: python-kinterbasdb: package-installs-python-pycache-dir usr/share/python-kinterbasdb/__pycache__/
+W: python-kinterbasdb: compressed-objects.inv usr/share/doc/python-kinterbasdb/docs/objects.inv.gz
diff --git a/testset/tags.scripts b/testset/tags.scripts
index 8097482..9be7f41 100644
--- a/testset/tags.scripts
+++ b/testset/tags.scripts
@@ -11,7 +11,7 @@ E: scripts: init.d-script-has-duplicate-lsb-section /etc/init.d/lsb-broken
 E: scripts: init.d-script-has-unterminated-lsb-section /etc/init.d/lsb-broken:15
 E: scripts: missing-dep-for-interpreter jruby => jruby | jruby1.0 | jruby1.1 | jruby1.2 (./usr/bin/jruby-broken)
 E: scripts: missing-dep-for-interpreter lefty => graphviz (./usr/bin/lefty-foo)
-E: scripts: package-installs-python-pyc usr/lib/python2.3/site-packages/test.pyc
+E: scripts: package-installs-python-bytecode usr/lib/python2.3/site-packages/test.pyc
 E: scripts: php-script-but-no-phpX-cli-dep ./usr/share/scripts/php5foo
 E: scripts: php-script-but-no-phpX-cli-dep ./usr/share/scripts/phpfoo
 E: scripts: python-script-but-no-python-dep ./usr/bin/py2foo
-- 
1.7.2.3

Attachment: 0001-Improved-checks-for-python-bytecode-and-eggs.patch.sig
Description: Binary data


Reply to: