+rpmsafe,+rpmsafereduce
authorroot <jan.kratochvil@redhat.com>
Mon, 4 Nov 2019 14:02:03 +0000 (15:02 +0100)
committerroot <jan.kratochvil@redhat.com>
Mon, 4 Nov 2019 14:02:03 +0000 (15:02 +0100)
bin/rpmsafe [new file with mode: 0755]
bin/rpmsafereduce [new file with mode: 0755]

diff --git a/bin/rpmsafe b/bin/rpmsafe
new file mode 100755 (executable)
index 0000000..54f771e
--- /dev/null
@@ -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 (executable)
index 0000000..73c91ea
--- /dev/null
@@ -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";
+}