/[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.6 - (hide annotations) (download)
Thu Jan 12 23:12:35 2006 UTC (18 years, 10 months ago) by gordonr
Branch: MAIN
Changes since 1.5: +1 -2 lines
No longer refer to mitel/devel/repo

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.6 # $Id: update_rpms_dir,v 1.5 2006/01/09 07:07:14 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.5 GetOptions(\%opt, "verbose", "debug");
17 gordonr 1.1
18     # XXX - FIXME - These will be command line options
19    
20     my $rpms_dir = "/builds/RPMS";
21    
22     my @repositories = qw(
23     /builds/rpms/RPMS/i386/
24     /builds/rpms/RPMS/noarch/
25 gordonr 1.4 /mirrors/centos/4.2/updates/i386/RPMS/
26     /mirrors/centos/4.2/os/i386/CentOS/RPMS/
27 gordonr 1.1 );
28    
29     chdir $rpms_dir or die "Couldn't chdir $rpms_dir";
30    
31     opendir RPMS, '.' or die "Couldn't opendir $rpms_dir";
32    
33     for my $file ( sort grep { /.rpm$/ } readdir RPMS )
34     {
35     warn "Checking $file:\n" if $opt{verbose};
36    
37     my $rpm = RPM2->open_package($file, $rpm_flags);
38    
39     for my $dir ( @repositories )
40     {
41     my $newest = find_newest($rpm, $dir);
42    
43     if ($newest)
44     {
45     # XXX - FIXME - Should we try other repos, or stop here?
46 gordonr 1.3 warn "rm $rpms_dir/$file; cp -p $dir/$newest $rpms_dir\n"
47 gordonr 1.1 }
48     }
49     }
50    
51     sub find_newest
52     {
53     my ($rpm, $dir) = @_;
54    
55     # XXX - FIXME - Need to cater for multiple architectures
56    
57     my $name = $rpm->name;
58     $name =~ s/\+/\\+/g; # libstdc++ and friends
59    
60     opendir DIR, $dir or die "Couldn't opendir $dir";
61 gordonr 1.5 my @rpms = sort grep { /^${name}-.*.rpm$/ } readdir DIR;
62 gordonr 1.1 closedir DIR;
63    
64     my $newest_file = undef;
65     my $newest_hdr = undef;
66    
67     for my $file (@rpms)
68     {
69     my $candidate = RPM2->open_package("$dir/$file", $rpm_flags);
70    
71     if ($candidate->name ne $name)
72     {
73 gordonr 1.5 warn "Ignoring $file - name doesn't match\n" if $opt{debug};
74 gordonr 1.1 next;
75     }
76    
77     if ( ($candidate cmp $rpm) <= 0)
78     {
79 gordonr 1.5 warn "Ignoring $file - older or same version\n" if $opt{debug};
80 gordonr 1.1 next;
81     }
82    
83 gordonr 1.5 if (not defined $newest_hdr or ($candidate cmp $newest_hdr) > 0)
84 gordonr 1.1 {
85 gordonr 1.5 warn "Newest is $file\n" if $opt{debug};
86 gordonr 1.1 $newest_file = $file;
87     $newest_hdr = $candidate;
88     }
89     }
90    
91     return $newest_file;
92     }

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