#!/usr/bin/perl -w # # Produce a list of files which are contained in the specified # .dsc / .changes file. # # Only include those files which have the matching MD5 sum. # # Steve # -- # $Id: dls,v 1.1 2007-06-18 14:59:00 steve Exp $ # use strict; use warnings; while( my $file = shift ) { if ( defined( $file ) && ( -e $file ) ) { if ( ( $file =~ /.dsc$/i ) || ( $file =~ /.changes$/i ) ) { processFile( $file ); } else { print "This script only understands .dsc + .changes\n"; } } else { print "File not found: $file\n"; } } # # # sub processFile { my( $filename ) = (@_); my $dir = ""; if ( $filename =~ /(.*)\/(.*)$/ ) { $dir = $1 . "/"; chdir( $dir ); } die "Can't find file $filename" unless ( -e $filename ); open( FIL, "<", $filename ) or die "Failed to open file $filename $!"; # found the marker "files"? my $found = 0; while( ) { my $line = $_; chomp( $line ); if ( $found ) { if ( !length($line ) ) { $found = 0; } else { my @entries = split( /[ \t]/, $line ); my $name = $entries[$#entries]; if ( -e $name ) { # check md5 my $md5 = `md5sum $name | awk '{print \$1}'`; chomp( $md5 ); if ( lc($md5) eq lc($entries[1]) ) { print $dir . $name . "\n"; } else { print "WARNING: $name MD5 mismatch: $entries[1] vs. $md5\n"; } } else { print "WARNING: $name not present\n"; } } } else { $found = 1 if ( $line =~ /^Files:/ ); } } close( FIL ); }