/[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.16 - (hide annotations) (download)
Wed Nov 7 19:31:20 2007 UTC (17 years ago) by slords
Branch: MAIN
CVS Tags: HEAD
Changes since 1.15: +1 -1 lines
FILE REMOVED
Stage doesnt have and weight

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

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