#!/usr/bin/perl
use strict;

my $method = $ARGV[1];

chdir("/usr/share/selinux/policy") or die "Couldn't chdir: $!";
my %newfiles = readfile("newfiles");
my %delfiles = readfile("delfiles");
my %ignorediff = readfile("ignorediff");
chdir("current") or die "Can't access directory current: $!";
my %current = findit();
chdir("..") or die "Can't change directory: $!";

my $file;

foreach $file (keys %current)
{
  if($ignorediff{$file} != 1)
  {
    open(INPUT, "<current/$file") or die "Can't open $file";
    my $line = <INPUT>;
    if("#DESC " eq substr($line, 0, 6))
    {
      LOOP: while(1)
      {
        print "Do you want $file:" . substr($line, 6);
        print "Yes/No/Display [Y/n/d]? ";
        my $in = lc(substr(<STDIN>, 0, 1));
        SWITCH: {
          if($in =~ /n/ ) { system("rm current/$file"); $delfiles{$file} = 1; last LOOP; }
          if($in =~ /d/) { system("less current/$file"); last SWITCH; }
          last LOOP;
        }
      }
    }
  }
}

open(OUT, ">delfiles") or die "Can't write to list of deleted files.";
foreach $file (keys %delfiles)
{
  if($delfiles{$file} == 1)
  {
    printf(OUT "%s\n", $file) or die "Can't write to file";
  }
}
close(OUT);


sub findit
{
  open(INPUT, "find domains/program -type f 2> /dev/null |") or die "Can't find.";
  my %files = ();
  while(<INPUT>)
  {
    chomp;
    if($_ =~ /\/.*\//)
    {
      $files{$_} = 1;
    }
  }
  close(INPUT);
  return %files;
}

sub readfile
{
  open(INPUT, "<" . $_[0]) or return ();
  my %files = ();

  while(<INPUT>)
  {
    chomp;
    $files{$_} = 1;
  }
  close(INPUT);
  return %files;
}
