/[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.14 - (hide annotations) (download)
Wed Apr 19 06:25:05 2006 UTC (18 years, 1 month ago) by gordonr
Branch: MAIN
Changes since 1.13: +11 -3 lines
Fix multi-arch bug

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

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