From: root Date: Mon, 4 Nov 2019 14:02:03 +0000 (+0100) Subject: +rpmsafe,+rpmsafereduce X-Git-Url: https://git.jankratochvil.net/?p=nethome.git;a=commitdiff_plain;h=5305e2b3ed1b08c4394429bd78ee47e4803b7f61;ds=sidebyside +rpmsafe,+rpmsafereduce --- diff --git a/bin/rpmsafe b/bin/rpmsafe new file mode 100755 index 0000000..54f771e --- /dev/null +++ b/bin/rpmsafe @@ -0,0 +1,2 @@ +#! /bin/bash +rpm -Vva 2>/dev/null|perl -ne 'BEGIN{use Cwd qw(realpath);}print if s/^[.]{7}[.T][.] [^g] //;' diff --git a/bin/rpmsafereduce b/bin/rpmsafereduce new file mode 100755 index 0000000..73c91ea --- /dev/null +++ b/bin/rpmsafereduce @@ -0,0 +1,68 @@ +#! /usr/bin/perl +# rpmsafe|sort -u|rpmsafereduce >EXCLUDEFILE +use strict; +use warnings; +sub slashes($) { + my($s)=@_; + (my $sl=$s)=~tr{/}{}cd; + $sl=length $sl; + $sl>=1 or die $_; + return $sl; +} +my(%d,%f,%t); +my $l; +while (<>) { + chomp; + next if $_ eq "/"; + die $_ if m{//}; + m{^/} or die $_; + die $_ if m{/$}; + die "sort -u: $l >= $_" if $l && $l ge $_; + $l=$_; + my $sl=slashes $_; + $d{$_}=$sl if -d; + $f{$_}=$sl if -f; + s{/[^/]*$}{} or die $_; + $t{$_}=1 if $d{$_}; +} +my $time; +while (%t) { + my @t=keys(%t); + %t=(); + #warn((@t+0)."\n"); + @t=sort { ($f{$b}||$d{$b}) <=> ($f{$a}||$d{$a}) || $a cmp $b; } @t; + while (@t) { + if (defined $time&&time()!=$time) { + $time=time(); + print STDERR (@t+0)." \r"; + } + my $t=shift @t; + next if !$d{$t}&&!$f{$t}; + opendir DIR,$t or die "$t: $!"; + my $ok=1; + local $_; + my @d; + for my $d (readdir DIR) { + push @d,$d; + next if $d eq "."; + next if $d eq ".."; + next if $f{"$t/$d"}; + next if $d{"$t/$d"}; + $ok=0; + last; + } + closedir DIR or die "$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; + } +} +for my $f (sort keys(%f)) { + print "$f\n"; +}