root/bin/cleanpkgs

Revision 1041, 3.0 KB (checked in by vasi, 20 months ago)

add files

  • Property svn:executable set to *
Line 
1#!/usr/bin/perl
2use warnings;
3use strict;
4
5use File::Copy qw(move);
6use FileHandle;
7use IPC::Open2;
8use File::Spec::Functions;
9use File::Find;
10use File::Basename;
11
12use Getopt::Long;
13
14our $DEBUG = 0;
15our $remove = '';       # no, trash, delete
16
17our $parentdir = '/Volumes/Junior/Dave/packages';
18our $pid; # of child process
19
20GetOptions(
21        'debug'                 => \$DEBUG,
22        'r|remove=s'    => \$remove,
23) or die "Bad options\n";
24$remove = 0 if grep { $_ eq lc $remove } ('false', '0', 'no');
25
26sub remote_needed {
27        my ($in, $out);
28        my $input = <<COMMAND;
29. /fink/permanent/bin/init.sh
30/Users/vasi/Hacking/bin/fink-needed
31COMMAND
32        $pid = open2($in, $out, qw(ssh -T 10.0.1.203));
33        print $out $input;
34        close $out;
35        return $in;
36}
37
38our %targets = (
39        DEFAULT => {
40                keep => sub { \*STDIN },
41                scan => sub { m,/binary-darwin-powerpc$, }
42        },
43       
44        permanent => {
45                subdir  => 'ToasterPermanentFink',
46                keep    => sub { \*STDIN },
47                scan    => sub { m,/binary-darwin-powerpc$, },
48        },
49        regular => {
50                subdir  => 'ToasterFink105',
51                keep    => sub { \*STDIN },
52                scan    => sub { m,/binary-darwin-powerpc$, },
53        },
54);
55
56sub needed {
57        my ($target) = @_;
58       
59        my $in = &{$target->{keep}}();
60        my @result = <$in>;
61        close $in;
62       
63        waitpid $pid, 0 if defined $pid;
64       
65        print @result if $DEBUG;
66        die "Not enough needed, probably a bug!\n" . join('', @result)
67                unless scalar(@result) > 10;
68       
69        chomp @result;
70        return @result;
71}
72
73sub have {
74        my @debs;
75        find({ no_chdir => 1, wanted => sub {
76                return if m,^\W*/trash/,;
77                return unless /\.deb$/;
78                push @debs, $_;
79        }}, '.');
80        print map { "$_\n" } @debs if $DEBUG;
81        @debs;
82}
83
84my ($tname, $tdir) = @ARGV;
85my $target = $targets{$tname} || $targets{DEFAULT};
86$target->{subdir} ||= $tdir;
87print "### Cleaning up target '$tname'\n";
88
89my $debdir = catdir($parentdir, $target->{subdir});
90my $trash = catdir($debdir, 'trash');
91mkdir $trash unless -d $trash;
92chdir($debdir);
93
94if ($remove) {
95        print "### Getting the debs to keep\n";
96        my %needed = map { $_ => 1 } needed($target);
97               
98        print "### Finding the debs we have\n";
99        my @have = have;
100       
101        print "### Throwing out the ones we don't want anymore\n";
102        for my $have (@have) {
103                my ($file, $dir) = fileparse($have);
104                unless ($needed{$file}) {
105                        my $newdir = catdir($trash, $dir);
106                        unless (-d $newdir) {
107                                system('mkdir', '-p', $newdir) == 0
108                                        or die "Can't create the target dir $newdir: $!\n";
109                        }
110                        my $newfile = catfile($newdir, $file);
111                        print "  $have => $newfile\n";
112                        File::Copy::move($have, $newfile);
113                }
114        }
115}
116
117print "### Updating the Packages.gz files\n";
118my @scandirs;
119find({ no_chdir => 1, wanted => sub {
120        return if m,^\W*/trash/, || !&{$target->{scan}}();
121        push @scandirs, $_;
122        $File::Find::prune = 1;
123}}, '.');
124
125use lib '/sw/lib/perl5';
126use Fink::Scanpackages;
127my $sp = Fink::Scanpackages->new(db => 'scanpackages.db');
128my $release = {
129        Origin => 'Vasi',
130        Label => 'Fink',
131        Architecture => 'darwin-powerpc'
132};
133$sp->scan_dists({ release => $release }, @scandirs);
134
135
136if (!$DEBUG && $remove eq 'delete') {
137        print "### Permanently deleting old debs\n";
138        system('rm', '-rf', $trash) == 0 or die "Can't take out the trash: $!\n";
139}
Note: See TracBrowser for help on using the browser.