1#!/usr/bin/perl 2 3use strict; 4use Archive::Tar; 5use Getopt::Std; 6 7my $opts = {}; 8getopts('h:', $opts) or die usage(); 9 10die usages() if $opts->{h}; 11 12### need Text::Diff -- give a polite error (not a standard prereq) 13unless ( eval { require Text::Diff; Text::Diff->import; 1 } ) { 14 die "\n\t This tool requires the 'Text::Diff' module to be installed\n"; 15} 16 17my $arch = shift or die usage(); 18my $tar = Archive::Tar->new( $arch ) or die "Couldn't read '$arch': $!"; 19 20 21foreach my $file ( $tar->get_files ) { 22 next unless $file->is_file; 23 my $name = $file->name; 24 25 diff( \($file->get_content), $name, 26 { FILENAME_A => $name, 27 MTIME_A => $file->mtime, 28 OUTPUT => \*STDOUT 29 } 30 ); 31} 32 33 34 35 36sub usage { 37 return q[ 38 39Usage: ptardiff ARCHIVE_FILE 40 ptardiff -h 41 42 ptardiff is a small program that diffs an extracted archive 43 against an unextracted one, using the perl module Archive::Tar. 44 45 This effectively lets you view changes made to an archives contents. 46 47 Provide the progam with an ARCHIVE_FILE and it will look up all 48 the files with in the archive, scan the current working directory 49 for a file with the name and diff it against the contents of the 50 archive. 51 52 53Options: 54 h Prints this help message 55 56 57Sample Usage: 58 59 $ tar -xzf Acme-Buffy-1.3.tar.gz 60 $ vi Acme-Buffy-1.3/README 61 62 [...] 63 64 $ ptardiff Acme-Buffy-1.3.tar.gz > README.patch 65 66 67See Also: 68 tar(1) 69 ptar 70 Archive::Tar 71 72 ] . $/; 73} 74 75 76 77=head1 NAME 78 79ptardiff - program that diffs an extracted archive against an unextracted one 80 81=head1 DESCRIPTION 82 83 ptardiff is a small program that diffs an extracted archive 84 against an unextracted one, using the perl module Archive::Tar. 85 86 This effectively lets you view changes made to an archives contents. 87 88 Provide the progam with an ARCHIVE_FILE and it will look up all 89 the files with in the archive, scan the current working directory 90 for a file with the name and diff it against the contents of the 91 archive. 92 93=head1 SYNOPSIS 94 95 ptardiff ARCHIVE_FILE 96 ptardiff -h 97 98 $ tar -xzf Acme-Buffy-1.3.tar.gz 99 $ vi Acme-Buffy-1.3/README 100 [...] 101 $ ptardiff Acme-Buffy-1.3.tar.gz > README.patch 102 103 104=head1 OPTIONS 105 106 h Prints this help message 107 108=head1 SEE ALSO 109 110tar(1), L<Archive::Tar>. 111 112=cut 113