/[smeserver]/builds_bin/update_rpms_dir
ViewVC logotype

Annotation of /builds_bin/update_rpms_dir

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.11 - (hide annotations) (download)
Mon Mar 6 04:02:12 2006 UTC (18 years, 8 months ago) by gordonr
Branch: MAIN
Changes since 1.10: +5 -3 lines
Allow a different target directory when checking for updates - WIP

1 gordonr 1.1 #!/usr/bin/perl -w
2     #
3     # Copyright (c) 2005 Gormand Pty Ltd. All rights reserved. This program
4     # is free software; you can redistribute it and/or modify it under the
5     # same terms as Perl itself.
6     #
7 gordonr 1.11 # $Id: update_rpms_dir,v 1.10 2006/02/14 04:08:46 gordonr Exp $
8 gordonr 1.1 #
9     # Update RPMS directory with the latest from a given list of directories
10    
11     use RPM2;
12     use Getopt::Long;
13    
14     my $rpm_flags = RPM2->vsf_nodsa; # Deal with missing DSA keys
15    
16 gordonr 1.11 GetOptions(\%opt, "verbose", "debug", "rpms_dir=s", "target_dir=s");
17 gordonr 1.1
18     # XXX - FIXME - These will be command line options
19    
20 gordonr 1.8 my $rpms_dir = $opt{rpms_dir} || "/builds/RPMS";
21    
22 gordonr 1.11 my $target_dir = $opt{target_dir} || $rpms_dir;
23    
24 gordonr 1.9 warn "Using $rpms_dir\n" if $opt{verbose};
25 gordonr 1.1
26     my @repositories = qw(
27     /builds/rpms/RPMS/i386/
28     /builds/rpms/RPMS/noarch/
29 gordonr 1.4 /mirrors/centos/4.2/updates/i386/RPMS/
30     /mirrors/centos/4.2/os/i386/CentOS/RPMS/
31 gordonr 1.1 );
32    
33     chdir $rpms_dir or die "Couldn't chdir $rpms_dir";
34    
35     opendir RPMS, '.' or die "Couldn't opendir $rpms_dir";
36    
37     for my $file ( sort grep { /.rpm$/ } readdir RPMS )
38     {
39     warn "Checking $file:\n" if $opt{verbose};
40    
41     my $rpm = RPM2->open_package($file, $rpm_flags);
42    
43     for my $dir ( @repositories )
44     {
45     my $newest = find_newest($rpm, $dir);
46    
47     if ($newest)
48     {
49     # XXX - FIXME - Should we try other repos, or stop here?
50 gordonr 1.11 print "rm $target_dir/$file; cp -p $dir/$newest $target_dir\n"
51 gordonr 1.1 }
52     }
53     }
54    
55     sub find_newest
56     {
57     my ($rpm, $dir) = @_;
58    
59     # XXX - FIXME - Need to cater for multiple architectures
60    
61     my $name = $rpm->name;
62     $name =~ s/\+/\\+/g; # libstdc++ and friends
63    
64     opendir DIR, $dir or die "Couldn't opendir $dir";
65 gordonr 1.5 my @rpms = sort grep { /^${name}-.*.rpm$/ } readdir DIR;
66 gordonr 1.1 closedir DIR;
67    
68     my $newest_file = undef;
69     my $newest_hdr = undef;
70    
71     for my $file (@rpms)
72     {
73 gordonr 1.7 warn "\tExamining $dir/$file\n" if $opt{debug};
74    
75 gordonr 1.1 my $candidate = RPM2->open_package("$dir/$file", $rpm_flags);
76    
77     if ($candidate->name ne $name)
78     {
79 gordonr 1.7 warn "\tIgnoring $file - name doesn't match\n" if $opt{debug};
80 gordonr 1.1 next;
81     }
82    
83     if ( ($candidate cmp $rpm) <= 0)
84     {
85 gordonr 1.7 warn "\tIgnoring $file - older or same version\n" if $opt{debug};
86 gordonr 1.1 next;
87     }
88    
89 gordonr 1.5 if (not defined $newest_hdr or ($candidate cmp $newest_hdr) > 0)
90 gordonr 1.1 {
91 gordonr 1.7 warn "\tNewest is $file\n" if $opt{debug};
92 gordonr 1.1 $newest_file = $file;
93     $newest_hdr = $candidate;
94     }
95     }
96    
97     return $newest_file;
98     }

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed