/[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.8 - (hide annotations) (download)
Sun Feb 12 05:01:05 2006 UTC (18 years, 3 months ago) by gordonr
Branch: MAIN
Changes since 1.7: +5 -3 lines
Add output directory option

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

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