... |
... |
@@ -29,7 +29,6 @@ setlocale(LC_ALL, "C"); |
29
|
29
|
|
30
|
30
|
my $htdocsdir = "$FindBin::Bin/htdocs";
|
31
|
31
|
my $config = LoadFile("$FindBin::Bin/config.yml");
|
32
|
|
-my %htdocsfiles;
|
33
|
32
|
my $releases_dir = $config->{releases_dir};
|
34
|
33
|
$releases_dir = "$FindBin::Bin/$releases_dir" unless $releases_dir =~ m/^\//;
|
35
|
34
|
my @check_errors;
|
... |
... |
@@ -51,12 +50,6 @@ sub get_tmpdir { |
51
|
50
|
: ());
|
52
|
51
|
}
|
53
|
52
|
|
54
|
|
-sub build_targets_by_os {
|
55
|
|
- exit_error "Unknown build target for OS $_[0]" unless $config->{build_targets}{$_[0]};
|
56
|
|
- my $r = $config->{build_targets}{$_[0]};
|
57
|
|
- return ref $r eq 'ARRAY' ? @$r : ($r);
|
58
|
|
-}
|
59
|
|
-
|
60
|
53
|
sub get_nbprocs {
|
61
|
54
|
return $ENV{NUM_PROCS} if defined $ENV{NUM_PROCS};
|
62
|
55
|
if (-f '/proc/cpuinfo') {
|
... |
... |
@@ -80,19 +73,11 @@ sub setup_martools { |
80
|
73
|
}
|
81
|
74
|
|
82
|
75
|
sub write_htdocs {
|
83
|
|
- my ($channel, $file, $content) = @_;
|
|
76
|
+ my ($channel, $dir, $file, $content) = @_;
|
84
|
77
|
mkdir $htdocsdir unless -d $htdocsdir;
|
85
|
78
|
mkdir "$htdocsdir/$channel" unless -d "$htdocsdir/$channel";
|
86
|
|
- write_file("$htdocsdir/$channel/$file", $content);
|
87
|
|
- $htdocsfiles{$channel}->{$file} = 1;
|
88
|
|
-}
|
89
|
|
-
|
90
|
|
-sub clean_htdocs {
|
91
|
|
- my ($channel) = @_;
|
92
|
|
- opendir(my $d, "$htdocsdir/$channel");
|
93
|
|
- my @files = grep { ! $htdocsfiles{$channel}->{$_} } readdir $d;
|
94
|
|
- closedir $d;
|
95
|
|
- unlink map { "$htdocsdir/$channel/$_" } @files;
|
|
79
|
+ mkdir "$htdocsdir/$channel/$dir" unless -d "$htdocsdir/$channel/$dir";
|
|
80
|
+ write_file("$htdocsdir/$channel/$dir/$file", $content);
|
96
|
81
|
}
|
97
|
82
|
|
98
|
83
|
sub get_sha512_hex_of_file {
|
... |
... |
@@ -418,24 +403,31 @@ sub write_responses { |
418
|
403
|
my $versions_str = join('+', @$versions);
|
419
|
404
|
foreach my $os (keys %oses) {
|
420
|
405
|
my $resp = get_response($config, $versions, $os);
|
421
|
|
- write_htdocs($channel, "$versions_str-$os.xml", $resp);
|
|
406
|
+ write_htdocs($channel, $os, "$versions_str-$os.xml", $resp);
|
422
|
407
|
foreach my $from_version (keys %from_versions) {
|
423
|
408
|
$resp = get_response($config, $versions, $os, $from_version);
|
424
|
|
- write_htdocs($channel, "$from_version-$versions_str-$os.xml", $resp);
|
|
409
|
+ write_htdocs($channel, $os, "$from_version-$versions_str-$os.xml", $resp);
|
425
|
410
|
}
|
|
411
|
+ write_htdocs($channel, $os, 'no-update.xml',
|
|
412
|
+ '<?xml version="1.0" encoding="UTF-8"?>'
|
|
413
|
+ . "\n<updates></updates>\n");
|
426
|
414
|
}
|
427
|
|
- write_htdocs($channel, 'no-update.xml',
|
428
|
|
- '<?xml version="1.0" encoding="UTF-8"?>'
|
429
|
|
- . "\n<updates></updates>\n");
|
430
|
415
|
}
|
431
|
416
|
|
432
|
417
|
sub write_htaccess {
|
433
|
418
|
my ($config, $channel) = @_;
|
434
|
|
- my $flags = "[last]";
|
435
|
|
- my $htaccess = "RewriteEngine On\n";
|
436
|
|
- $htaccess .= $config->{htaccess_rewrite_rules}{$channel} // '';
|
|
419
|
+
|
|
420
|
+ my $htaccess_main = "RewriteEngine On\n";
|
|
421
|
+ $htaccess_main .= $config->{htaccess_rewrite_rules}{$channel} // '';
|
437
|
422
|
my $versions = as_array($config->{channels}{$channel});
|
438
|
423
|
my $versions_str = join('+', @$versions);
|
|
424
|
+ foreach my $os (sort keys %{$config->{build_targets}}) {
|
|
425
|
+ foreach my $bt (@{ as_array($config->{build_targets}{$os}) }) {
|
|
426
|
+ $htaccess_main .= "RewriteRule ^$bt/(.*) $os/\$1 [last]\n";
|
|
427
|
+ }
|
|
428
|
+ }
|
|
429
|
+ write_htdocs($channel, '.', '.htaccess', $htaccess_main);
|
|
430
|
+
|
439
|
431
|
my (%oses, %from_versions);
|
440
|
432
|
foreach my $version (@$versions) {
|
441
|
433
|
my $files = $config->{versions}{$version}{files};
|
... |
... |
@@ -445,20 +437,20 @@ sub write_htaccess { |
445
|
437
|
$from_versions{$from_version} = 1;
|
446
|
438
|
}
|
447
|
439
|
}
|
448
|
|
- $htaccess .= "RewriteRule ^[^\/]+/$version/ no-update.xml $flags\n";
|
449
|
440
|
}
|
450
|
|
- foreach my $os (sort keys %oses) {
|
451
|
|
- foreach my $bt (build_targets_by_os($os)) {
|
|
441
|
+ foreach my $version (@$versions) {
|
|
442
|
+ my $files = $config->{versions}{$version}{files};
|
|
443
|
+ foreach my $os (sort keys %oses) {
|
|
444
|
+ my $htaccess_os = "RewriteEngine On\n";
|
|
445
|
+ $htaccess_os .= "RewriteRule ^$version/ no-update.xml [last]\n";
|
452
|
446
|
foreach my $from_version (sort keys %from_versions) {
|
453
|
|
- $htaccess .= "RewriteRule ^$bt/$from_version/ALL "
|
454
|
|
- . "$from_version-$versions_str-$os.xml $flags\n";
|
|
447
|
+ $htaccess_os .= "RewriteRule ^$from_version/ "
|
|
448
|
+ . "$from_version-$versions_str-$os.xml [last]\n";
|
455
|
449
|
}
|
456
|
|
- $htaccess .= "RewriteRule ^$bt/[^\/]+/ALL "
|
457
|
|
- . "$versions_str-$os.xml $flags\n";
|
458
|
|
- $htaccess .= "RewriteRule ^$bt/ $versions_str-$os.xml $flags\n";
|
|
450
|
+ $htaccess_os .= "RewriteRule ^[^\/]+/ $versions_str-$os.xml [last]\n";
|
|
451
|
+ write_htdocs($channel, $os, '.htaccess', $htaccess_os);
|
459
|
452
|
}
|
460
|
453
|
}
|
461
|
|
- write_htdocs($channel, '.htaccess', $htaccess);
|
462
|
454
|
}
|
463
|
455
|
|
464
|
456
|
sub write_downloads_json {
|
... |
... |
@@ -472,11 +464,11 @@ sub write_downloads_json { |
472
|
464
|
tag => "$tag",
|
473
|
465
|
downloads => get_version_downloads($config, $version),
|
474
|
466
|
};
|
475
|
|
- write_htdocs($channel, 'downloads.json',
|
|
467
|
+ write_htdocs($channel, '.', 'downloads.json',
|
476
|
468
|
JSON->new->utf8->canonical->encode($data));
|
477
|
469
|
my $pp_downloads = get_perplatform_downloads($config, $version, $tag);
|
478
|
470
|
foreach my $os (keys %{$pp_downloads}) {
|
479
|
|
- write_htdocs($channel, "download-$os.json",
|
|
471
|
+ write_htdocs($channel, '.', "download-$os.json",
|
480
|
472
|
JSON->new->utf8->canonical->encode($pp_downloads->{$os}));
|
481
|
473
|
}
|
482
|
474
|
}
|
... |
... |
@@ -636,11 +628,9 @@ my %actions = ( |
636
|
628
|
exit_error "Wrong arguments" unless @ARGV == 1;
|
637
|
629
|
my $channel = $ARGV[0];
|
638
|
630
|
exit_error "Unknown channel $channel" unless $config->{channels}{$channel};
|
639
|
|
- $htdocsfiles{$channel} = { '.' => 1, '..' => 1 };
|
640
|
631
|
write_responses($config, $channel);
|
641
|
632
|
write_htaccess($config, $channel);
|
642
|
633
|
write_downloads_json($config, $channel);
|
643
|
|
- clean_htdocs($channel);
|
644
|
634
|
},
|
645
|
635
|
gen_incrementals => sub {
|
646
|
636
|
my ($config) = @_;
|