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

Bug#452316: lintian: Check for useless empty directories



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.

Reply to: