source: soft/build_system/build_system/upload/robot/trunk/sync_community_updates @ 1

Last change on this file since 1 was 1, checked in by fasma, 13 years ago

Initial Import from Mandriva's soft revision 224062 and package revision 45733

File size: 4.4 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4use File::NCopy qw(copy);
5use URPM;
6
7my $genhdlist;
8if ($ARGV[0] eq "--genhdlist") { $genhdlist = 1; shift @ARGV }
9if ($ARGV[0] eq "--forcegenhdlist") { $genhdlist = 2; shift @ARGV }
10if ($ARGV[0] eq "--forcedesc") { $genhdlist = 3; shift @ARGV }
11my $version = shift @ARGV;
12my $updates_dir = "/mnt/BIG/dis/updates/";
13
14$version =~ /\d\d\.\d/ or usage($version);
15
16my $version_dir = "/mnt/BIG/dis/community/$version";
17-d $version_dir or usage($version);
18if ($genhdlist == 2) { 
19        foreach my $arch (@ARGV) {
20                genhdlist($version_dir, $arch); 
21        }
22        exit 
23}
24if ($genhdlist == 3) {
25        foreach my $arch (@ARGV) {
26                print "Generating descriptions\n";
27                system("/home/mandrake/robot/gen-descriptions3 $version $arch > /mnt/BIG/dis/community/$version/$arch/media/descriptions");
28        }
29        exit
30}
31
32my $done;
33
34my ($re1, $re2, $re3) = ('(kernel-source(?:-stripped)?-2\..)\.([^-]+-[^-]+)\.[^\.]+\.rpm$','(kernel.*-2\..)\.([^-]+)-[^-]+-[^-]+\.[^\.]+\.rpm$','(.*)-([^-]+-[^-]+)\.[^\.]+\.rpm$');
35foreach my $rpms_dirs (["$version/main_updates",  "i586/media/main/"], [ "x86_64/$version/main_updates", "x86_64/media/main/" ], [ "$version/SRPMS", "SRPMS/main/" ]) {
36        my ($u_dir, $c_dir) = (@$rpms_dirs);
37        -d "$version_dir/$c_dir" or next;
38        my $current_dir = "$updates_dir/$u_dir";
39        print "Looking at $current_dir\n";
40        opendir my $UPDATES_DIR, $current_dir or print "ERROR: could not open $current_dir" and next; 
41        my %updates_rpm;
42        foreach my $rpm (readdir $UPDATES_DIR) { 
43                if ($rpm =~ /$re1/) {
44                        ($updates_rpm{$1}{ver}, $updates_rpm{$1}{file}) = ($2, $rpm)
45                } elsif ($rpm =~ /$re2/) {
46                        ($updates_rpm{$1}{ver}, $updates_rpm{$1}{file}) = ($2, $rpm)
47                } elsif ($rpm =~ /$re3/) { 
48                        ($updates_rpm{$1}{ver}, $updates_rpm{$1}{file}) = ($2, $rpm)
49                }
50                #print "$rpm ($1 -- $updates_rpm{$1}{ver} -- $updates_rpm{$1}{file})\n"
51        }
52        closedir $UPDATES_DIR;
53        opendir my $VERSION_DIR, "$version_dir/$c_dir"; 
54        my %done_rpm;
55        foreach my $rpm (readdir $VERSION_DIR) { 
56                $rpm =~ /$re1/ or $rpm =~ /$re2/ or $rpm =~ /$re3/ or next;
57                $done_rpm{$1} = 1;
58                if ($updates_rpm{$1}) {
59                        if (URPM::ranges_overlap("== $2", "< $updates_rpm{$1}{ver}")) {
60                                $done = 1;
61                                print "$1 version $updates_rpm{$1}{ver} more recent than $1 version $2\n";
62                                copy_rpm($updates_rpm{$1}{file}, $current_dir, "$version_dir/$c_dir");
63                                print "Removing $version_dir/$c_dir/$rpm\n";
64                                my $ok = unlink "$version_dir/$c_dir/$rpm";
65                                $ok or print "ERROR: deleting $rpm failed ($!)\n";
66                        }
67                }
68        }
69        foreach (keys %updates_rpm) {
70                $_ or next;
71                if (!$done_rpm{$_}) {
72                        $done = 1;
73                        print "$_ ($updates_rpm{$_}{file}) not present in community\n";
74                        copy_rpm($updates_rpm{$_}{file}, $current_dir, "$version_dir/$c_dir");
75                }
76        }
77        closedir $VERSION_DIR;
78}
79
80if ($done) {
81        foreach my $arch ('i586', 'x86_64') {
82                if ($genhdlist) {
83                        genhdlist($version_dir, $arch);
84                }
85                print "Generating descriptions\n";
86                system("/home/mandrake/robot/gen-descriptions3 $version $arch > /mnt/BIG/dis/community/$version/$arch/media/descriptions");
87        }
88}
89
90exit;
91
92sub genhdlist {
93        my ($version_dir, $arch) = @_;
94        print "Generating hdlists files\n";
95        system(qq(echo "Mandrakelinux $version Community-Download-$arch `date +"%Y%m%d %k:%M"`" > $version_dir/$arch/VERSION));
96        my $tmpdir = "/home/mandrake/tmp/Community/$version/";
97        -d $tmpdir or mkdir $tmpdir;
98        my $gendistrib = $version eq '10.0' ? '/home/mandrake/local/bin/gendistrib' : 'gendistrib';
99        system(qq(export TMPDIR=\"$tmpdir\"; $gendistrib --nochkdep --nobadrpm --noclean $version_dir/$arch/));
100        system(qq(chmod 644 $version_dir/$arch/media/media_info/*hdlist*));
101        foreach ('main', 'contrib') {
102                print "Linking media_info/synthesis.hdlist_$_.cz with $_/synthesis.hdlist.cz\n";
103                unlink "$version_dir/media/$_/media_info/synthesis.hdlist.cz";
104                link "$version_dir/$arch/media/media_info/synthesis.hdlist_$_.cz", "$version_dir/media/$_/media_info/synthesis.hdlist.cz";
105                unlink "$version_dir/media/$_/media_info/hdlist.cz";
106                link "$version_dir/$arch/media_media_info/hdlist_$_.cz", "$version_dir/media/$_/media_info/hdlist.cz";
107        }
108}
109
110sub copy_rpm {
111        my ($rpm, $dir1, $dir2) = @_;
112        my $link = "$dir1/$rpm";
113        print "Copying $link to $dir2\n";
114        my $ok = copy "$link", "$dir2/$rpm";
115        $ok or print "ERROR: copying failed ($!)\n";
116        print "Resigning $rpm\n";
117        $done = 1;
118        system("sudo -H /root/bin/resign_cooker $dir2/$rpm");
119}
120
121sub usage {
122        $_[0] and print "\nERROR: \"$version\" does not appear to be a community version\n\n";
123        print "usage:\n\n\t$0 <version>\n\n";
124        exit
125}
Note: See TracBrowser for help on using the repository browser.