#!perl -lw
if (defined($ARGV[0])){
    $workarea=$ARGV[0];
} else {
    die "need workarea"
}
print "set -x"; # because we use true instead of echo
open FI,"$workarea/stackage/the_packages" or die;
while(<FI>){
    chomp;
    $a{$_}=1;
}
open FI,"$workarea/more-packages/10/fetch-singles" or open FI,"$workarea/more-packages/10/all-singles" or die;
while(<FI>){
    chomp;
    $a{$_}=1;
}
$thresh=0;
if(open FI,"$workarea/more-packages/20/all-singles"){
    while(<FI>){
	chomp;
	$a{$_}=1;
    }
} else {
    print "true INFO no 20";
    # currently this does not exist because the phase has no packages
    # $thresh=1;
}
if(open FI,"$workarea/more-packages/70/go"){
    while(<FI>){
	chomp;
	$a{$_}=1;
    }
} else {
    print "true ERROR no 70, continuing less aggressively...";
    $thresh=1;
}
print "true INFO $0 : keep size ",scalar keys%a;
$prefix="$workarea/home/.cabal/packages/hackage.haskell.org";
for(<$prefix/*/*/*.tar.gz>){
    $count++;
    die unless ($dname,$dver,$fname,$fver)=m,/([^/]+)/([0-9.]+)/([^/]+)-([0-9.]+)\.tar\.gz$,;
    die unless $dname eq $fname;
    die unless $dver eq $fver;
    push @{$v{$dname}},$dver;
}
die unless $count;
for(sort keys%v){
    next unless(@{$v{$_}}>$thresh);  # or 1
    $kcount=0;
    undef@del;
    for$v(@{$v{$_}}){
	$n=$_."-".$v;
	if($a{$n}){
	    $kcount++;
	}else{
	    push@del,$v;
	}
    }
    for$v(@del){
	print "ls -lAR --full-time $prefix/$_/$v";
	print "rm -vfr $prefix/$_/$v";
    }
    if(!$kcount){
	print "true INFO warning keeping none of $_";
    }
}
