#! /usr/bin/perl
-# rpmsafe|sort -u|rpmsafereduce|sed 's/^/- /' >EXCLUDEFILE
+# rpmsafe|sort -u|rpmsafereduce >EXCLUDE-FILELIST
+use Carp;
+my $IGNORE_D;
+#$IGNORE_D=1; # Do not backup directory entry itself even if it is missing in rpms. 581692 -> 37998 vs. 44248
use strict;
use warnings;
sub slashes($) {
my($s)=@_;
(my $sl=$s)=~tr{/}{}cd;
$sl=length $sl;
- $sl>=1 or die $_;
+ $sl>=1 or carp "<$s>";
return $sl;
}
my(%d,%f,%t);
while (<>) {
chomp;
next if $_ eq "/";
- die $_ if m{//};
- m{^/} or die $_;
- die $_ if m{/$};
- die "sort -u: $l >= $_" if $l && $l ge $_;
+ carp $_ if m{//};
+ m{^/} or carp $_;
+ carp $_ if m{/$};
+ carp "sort -u: $l >= $_" if $l && $l ge $_;
$l=$_;
my $sl=slashes $_;
$d{$_}=$sl if -d;
$f{$_}=$sl if -f;
- s{/[^/]*$}{} or die $_;
+ s{/[^/]*$}{} or carp $_;
+ $d{$_}=$sl-1 if $IGNORE_D && $_ ne "";
$t{$_}=1 if $d{$_};
}
my $time;
}
my $t=shift @t;
next if !$d{$t}&&!$f{$t};
- opendir DIR,$t or die "$t: $!";
+ opendir DIR,$t or carp "$t: $!";
my $ok=1;
local $_;
my @d;
$ok=0;
last;
}
- closedir DIR or die "$t: $!";
+ closedir DIR or carp "$t: $!";
next if !$ok;
for my $d (@d) {
delete $f{"$t/$d"};
delete $t{"$t/$d"};
}
$f{$t}=slashes $t;
- $t=~s{/[^/]*$}{} or die $t;
- $d{$t}=slashes $t;
- $t{$t}=1;
+ $t=~s{/[^/]*$}{} or carp $t;
+ $d{$t}=slashes $t if $IGNORE_D && $t ne "";
+ $t{$t}=1 if $d{$t};
}
}
for my $f (sort keys(%f)) {