Package: lintian Version: 1.23.36 Severity: wishlist Following a recent thread on debian-devel, I've implemented a lintian check for useless empty directories. This patch takes the conservative route of listing which directories are normally useless, as well as several directories where any empty subdirectories are likewise useless.
Note that this patch also deals with #357838. -- Daniel Schepler
diff -urN lintian-1.23.36.old/checks/files lintian-1.23.36/checks/files --- lintian-1.23.36.old/checks/files 2007-10-15 23:37:56.000000000 -0400 +++ lintian-1.23.36/checks/files 2007-11-21 15:58:45.000000000 -0500 @@ -75,6 +75,8 @@ # We only want to warn about this once. my $warned_x11_predepends = 0; +my %empty_dirs = (); + # Read package contents... open(IN, '<', "index") or fail("cannot open index file index: $!"); while (<IN>) { @@ -108,6 +110,11 @@ ($file, $link) = split(' -> ', $file); } + if ($file =~ m,^(.*/)[^/]+/?$,) { + delete $empty_dirs{$1}; + } + $empty_dirs{$file} = 1 if $perm =~ /^d/; + $operm = perm2oct($perm); my ($year) = ($date =~ /^(\d{4})/); @@ -810,6 +817,40 @@ } } +my %base_dirs = ("bin/" => 1, "boot/" => 1, "dev/" => 1, + "etc/" => 1, "etc/default/" => 1, "etc/opt/" => 1, + "etc/skel/" => 1, + "home/" => 1, "initrd/" => 1, "lib/" => 1, "media/" => 1, + "mnt/" => 1, "opt/" => 1, "proc/" => 1, "root/" => 1, + "sbin/" => 1, "srv/" => 1, "tmp/" => 1, + "usr/" => 1, "usr/bin/" => 1, "usr/games/" => 1, + "usr/games/" => 1, "usr/lib/" => 1, "usr/sbin/" => 1, + "usr/share/" => 1, "usr/share/doc/" => 1, + "usr/share/info/" => 1, "usr/share/man/" => 1, + "usr/share/misc/" => 1, "usr/src/" => 1, + "var/" => 1, "var/backups/" => 1, "var/cache/" => 1, + "var/lib/" => 1, "var/lib/dpkg/" => 1, "var/lib/misc/" => 1, + "var/local/" => 1, "var/lock/" => 1, "var/log/" => 1, + "var/mail/" => 1, "var/opt/" => 1, "var/run/" => 1, + "var/spool/" => 1, "var/tmp/" => 1); +foreach my $dir (keys %empty_dirs) { + if ($dir =~ m,^usr/include/, || + $dir =~ m,^usr/share/doc/, || + $dir =~ m,^usr/share/doc-base/, || + $dir =~ m,^usr/share/info/, || + $dir =~ m,^usr/share/locale/, || + $dir =~ m,^usr/share/man/, || + $dir =~ m,^usr/(lib|share)/menu/, || + $dir =~ m,^usr/(lib|share)/perl5/, || + $dir =~ m,^usr/share/applications/, || + $dir =~ m,^usr/share/applnk/, || + $dir =~ m,^usr/share/icons/, || + $dir =~ m,^usr/share/pixmaps/, || + $base_dirs{$dir}) { + tag "useless-empty-directory", "/" . substr($dir, 0, -1); + } +} + } 1; diff -urN lintian-1.23.36.old/checks/files.desc lintian-1.23.36/checks/files.desc --- lintian-1.23.36.old/checks/files.desc 2007-10-15 22:54:52.000000000 -0400 +++ lintian-1.23.36/checks/files.desc 2007-11-21 15:11:43.000000000 -0500 @@ -689,3 +689,8 @@ . One possible cause is using debhelper 5.0.57 or earlier to install a doc-base file with a Document field that ends in whitespace. + +Tag: useless-empty-directory +Type: warning +Info: This package installs an empty directory which is already + provided by base-files or is otherwise useless.