Author: sparky
Date: Tue Feb  2 18:51:59 2010
New Revision: 11124

Added:
   toys/tools/cleanbuild/findunusedbr   (contents, props changed)
Log:
- NEW: script for finding unused BRs:
  1. before building run with -c to reset access time of all files
     of build-required packages
  2. after building checks which packages have all files with unchanged
     access time - those are unused packages
  NOTE: won't work with noatime; relatime is OK


Added: toys/tools/cleanbuild/findunusedbr
==============================================================================
--- (empty file)
+++ toys/tools/cleanbuild/findunusedbr  Tue Feb  2 18:51:59 2010
@@ -0,0 +1,78 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+die "Arguments missing: $0 [-c] <chroot> <spec>\n" unless @ARGV;
+my $clear;
+if ( $ARGV[0] eq "-c" ) {
+       $clear = 1;
+       shift @ARGV;
+}
+my $chroot = shift @ARGV or die "chroot directory not specified\n";
+my $spec = shift @ARGV or die "Spec file not specified\n";
+
+-d $chroot or die "chroot '$chroot' is not a directory\n";
+-r $spec or die "spec file '$spec' is not readable\n";
+
+my @rpms;
+open F_IN, "<", $spec or die "Cannot open '$spec'\n";
+while ( <F_IN> ) {
+       if ( /^\s*(?:%{.*)?BuildRequires:\s*(\S+)/i ) {
+               local $_ = $1;
+               s/}$//;
+               push @rpms, $_;
+       } elsif ( /^%(prep|build|changelog)/ ) {
+               last;
+       }
+}
+close F_IN;
+
+sub clear_files
+{
+       my $rpm = shift;
+       my $files = shift;
+       foreach my $file ( @$files ) {
+               chop $file;
+               my $f = $chroot.$file;
+
+               # XXX: this truncates mtime to its low resolution value
+               my $mtime = (stat $f)[9];
+               warn "Mtime failed on $f" unless $mtime;
+               utime 0, $mtime, $f;
+       }
+}
+
+sub check_files
+{
+       my $rpm = shift;
+       my $files = shift;
+       #my $used = 0;
+       foreach my $file ( @$files ) {
+               chop $file;
+               my $f = $chroot.$file;
+
+               my $atime = (stat $f)[8];
+               if ( $atime > 0 ) {
+                       #print "$rpm: $file accessed\n";
+                       #$used = 1;
+                       return;
+               } else {
+                       #print "$rpm: $file NOT accessed !\n";
+               }
+       }
+       print "$rpm may be superfluous !\n";# unless $used;
+}
+
+
+foreach my $rpm ( @rpms ) {
+       my @files = qx/rpm --root=$chroot -ql --what-provides "$rpm"/;
+       next if $files[0] =~ /^no package provides/;
+       #print "*** $rpm ***\n";
+       if ( $clear ) {
+               clear_files( $rpm, \...@files );
+       } else {
+               check_files( $rpm, \...@files );
+       }
+       #print "\n\n";
+}
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to