... |
... |
@@ -113,9 +113,9 @@ sub get_version_files { |
113
|
113
|
foreach my $file (readdir $d) {
|
114
|
114
|
next unless -f "$vdir/$file";
|
115
|
115
|
if ($file !~ m/incremental\.mar$/ &&
|
116
|
|
- $file =~ m/^$appname-(.+)-${version}_(.+)\.mar$/) {
|
117
|
|
- my ($os, $lang) = ($1, $2);
|
118
|
|
- $files->{$os}{$lang}{complete} = {
|
|
116
|
+ $file =~ m/^$appname-(.+)-${version}_ALL\.mar$/) {
|
|
117
|
+ my $os = $1;
|
|
118
|
+ $files->{$os}{complete} = {
|
119
|
119
|
type => 'complete',
|
120
|
120
|
URL => "$download_url/$file",
|
121
|
121
|
size => -s "$vdir/$file",
|
... |
... |
@@ -126,9 +126,9 @@ sub get_version_files { |
126
|
126
|
};
|
127
|
127
|
next;
|
128
|
128
|
}
|
129
|
|
- if ($file =~ m/^$appname-(.+)--(.+)-${version}_(.+)\.incremental\.mar$/) {
|
130
|
|
- my ($os, $from_version, $lang) = ($1, $2, $3);
|
131
|
|
- $files->{$os}{$lang}{partial}{$from_version} = {
|
|
129
|
+ if ($file =~ m/^$appname-(.+)--(.+)-${version}_ALL\.incremental\.mar$/) {
|
|
130
|
+ my ($os, $from_version) = ($1, $2);
|
|
131
|
+ $files->{$os}{partial}{$from_version} = {
|
132
|
132
|
type => 'partial',
|
133
|
133
|
URL => "$download_url/$file",
|
134
|
134
|
size => -s "$vdir/$file",
|
... |
... |
@@ -235,14 +235,14 @@ sub extract_mar { |
235
|
235
|
}
|
236
|
236
|
|
237
|
237
|
sub mar_filename {
|
238
|
|
- my ($config, $appname, $version, $os, $lang) = @_;
|
239
|
|
- version_dir($config, $version) . "/$appname-$os-${version}_$lang.mar";
|
|
238
|
+ my ($config, $appname, $version, $os) = @_;
|
|
239
|
+ version_dir($config, $version) . "/$appname-$os-${version}_ALL.mar";
|
240
|
240
|
}
|
241
|
241
|
|
242
|
242
|
sub create_incremental_mar {
|
243
|
|
- my ($config, $pm, $from_version, $new_version, $os, $lang, $channel) = @_;
|
|
243
|
+ my ($config, $pm, $from_version, $new_version, $os, $channel) = @_;
|
244
|
244
|
my $appname = $config->{appname_marfile};
|
245
|
|
- my $mar_file = "$appname-$os--${from_version}-${new_version}_$lang.incremental.mar";
|
|
245
|
+ my $mar_file = "$appname-$os--${from_version}-${new_version}_ALL.incremental.mar";
|
246
|
246
|
my $mar_file_path = version_dir($config, $new_version) . '/' . $mar_file;
|
247
|
247
|
if ($ENV{MAR_SKIP_EXISTING} && -f $mar_file_path) {
|
248
|
248
|
print "Skipping $mar_file\n";
|
... |
... |
@@ -253,7 +253,7 @@ sub create_incremental_mar { |
253
|
253
|
my $finished_file = sub {
|
254
|
254
|
exit_error "Error creating $mar_file" unless $_[1] == 0;
|
255
|
255
|
print "Finished $mar_file\n";
|
256
|
|
- $config->{versions}{$new_version}{files}{$os}{$lang}{partial}{$from_version} = {
|
|
256
|
+ $config->{versions}{$new_version}{files}{$os}{partial}{$from_version} = {
|
257
|
257
|
type => 'partial',
|
258
|
258
|
URL => "$download_url/$mar_file",
|
259
|
259
|
size => -s $mar_file_path,
|
... |
... |
@@ -267,9 +267,9 @@ sub create_incremental_mar { |
267
|
267
|
my $tmpdir = get_tmpdir($config);
|
268
|
268
|
my $mar_c_from = get_config($config, $from_version, $os, 'mar_compression');
|
269
|
269
|
my $mar_c_new = get_config($config, $new_version, $os, 'mar_compression');
|
270
|
|
- extract_mar(mar_filename($config, $appname, $from_version, $os, $lang),
|
|
270
|
+ extract_mar(mar_filename($config, $appname, $from_version, $os),
|
271
|
271
|
"$tmpdir/A", $mar_c_from);
|
272
|
|
- extract_mar(mar_filename($config, $appname, $new_version, $os, $lang),
|
|
272
|
+ extract_mar(mar_filename($config, $appname, $new_version, $os),
|
273
|
273
|
"$tmpdir/B", $mar_c_new);
|
274
|
274
|
# bug 26054: make sure previous macOS version is code signed
|
275
|
275
|
if (!$ENV{NO_CODESIGNATURE} && ($os eq 'macos')
|
... |
... |
@@ -306,10 +306,8 @@ sub create_incremental_mars_for_version { |
306
|
306
|
get_version_files($config, $from_version);
|
307
|
307
|
my $from_v = $config->{versions}{$from_version};
|
308
|
308
|
foreach my $os (keys %{$v->{files}}) {
|
309
|
|
- foreach my $lang (keys %{$v->{files}{$os}}) {
|
310
|
|
- next unless defined $from_v->{files}{$os}{$lang}{complete};
|
311
|
|
- create_incremental_mar($config, $pm, $from_version, $version, $os, $lang, $channel);
|
312
|
|
- }
|
|
309
|
+ next unless defined $from_v->{files}{$os}{complete};
|
|
310
|
+ create_incremental_mar($config, $pm, $from_version, $version, $os, $channel);
|
313
|
311
|
}
|
314
|
312
|
}
|
315
|
313
|
$pm->wait_all_children;
|
... |
... |
@@ -333,31 +331,29 @@ sub get_buildinfos { |
333
|
331
|
setup_martools;
|
334
|
332
|
my $files = $config->{versions}{$version}{files};
|
335
|
333
|
foreach my $os (keys %$files) {
|
336
|
|
- foreach my $lang (keys %{$files->{$os}}) {
|
337
|
|
- next unless $files->{$os}{$lang}{complete};
|
338
|
|
- my $tmpdir = get_tmpdir($config);
|
339
|
|
- my $mar_compression = get_config($config, $version, $os, 'mar_compression');
|
340
|
|
- extract_mar(
|
341
|
|
- mar_filename($config, $config->{appname_marfile}, $version, $os, $lang),
|
342
|
|
- "$tmpdir",
|
343
|
|
- $mar_compression);
|
344
|
|
- my $appfile = "$tmpdir/application.ini" if -f "$tmpdir/application.ini";
|
345
|
|
- $appfile = "$tmpdir/Contents/Resources/application.ini"
|
346
|
|
- if -f "$tmpdir/Contents/Resources/application.ini";
|
347
|
|
- exit_error "Could not find application.ini" unless $appfile;
|
348
|
|
- foreach my $line (read_file($appfile)) {
|
349
|
|
- if ($line =~ m/^BuildID=(.*)$/) {
|
350
|
|
- $config->{versions}{$version}{buildID} = $1;
|
351
|
|
- return;
|
352
|
|
- }
|
|
334
|
+ next unless $files->{$os}{complete};
|
|
335
|
+ my $tmpdir = get_tmpdir($config);
|
|
336
|
+ my $mar_compression = get_config($config, $version, $os, 'mar_compression');
|
|
337
|
+ extract_mar(
|
|
338
|
+ mar_filename($config, $config->{appname_marfile}, $version, $os),
|
|
339
|
+ "$tmpdir",
|
|
340
|
+ $mar_compression);
|
|
341
|
+ my $appfile = "$tmpdir/application.ini" if -f "$tmpdir/application.ini";
|
|
342
|
+ $appfile = "$tmpdir/Contents/Resources/application.ini"
|
|
343
|
+ if -f "$tmpdir/Contents/Resources/application.ini";
|
|
344
|
+ exit_error "Could not find application.ini" unless $appfile;
|
|
345
|
+ foreach my $line (read_file($appfile)) {
|
|
346
|
+ if ($line =~ m/^BuildID=(.*)$/) {
|
|
347
|
+ $config->{versions}{$version}{buildID} = $1;
|
|
348
|
+ return;
|
353
|
349
|
}
|
354
|
|
- exit_error "Could not extract buildID from application.ini";
|
355
|
350
|
}
|
|
351
|
+ exit_error "Could not extract buildID from application.ini";
|
356
|
352
|
}
|
357
|
353
|
}
|
358
|
354
|
|
359
|
355
|
sub get_response {
|
360
|
|
- my ($config, $versions, $os, $lang, $from_version) = @_;
|
|
356
|
+ my ($config, $versions, $os, $from_version) = @_;
|
361
|
357
|
my $res;
|
362
|
358
|
my $writer = XML::Writer->new(OUTPUT => \$res, ENCODING => 'UTF-8');
|
363
|
359
|
$writer->xmlDecl;
|
... |
... |
@@ -384,13 +380,13 @@ sub get_response { |
384
|
380
|
defined $minversion ? ( minSupportedOSVersion => $minversion ) : (),
|
385
|
381
|
defined $mininstruc ? ( minSupportedInstructionSet => $mininstruc ) : (),
|
386
|
382
|
);
|
387
|
|
- if (my $patch = $config->{versions}{$version}{files}{$os}{$lang}{complete}) {
|
|
383
|
+ if (my $patch = $config->{versions}{$version}{files}{$os}{complete}) {
|
388
|
384
|
my @sorted_patch = map { $_ => $patch->{$_} } sort keys %$patch;
|
389
|
385
|
$writer->startTag('patch', @sorted_patch);
|
390
|
386
|
$writer->endTag('patch');
|
391
|
387
|
}
|
392
|
388
|
if ($from_version) {
|
393
|
|
- if (my $patch = $config->{versions}{$version}{files}{$os}{$lang}{partial}{$from_version}) {
|
|
389
|
+ if (my $patch = $config->{versions}{$version}{files}{$os}{partial}{$from_version}) {
|
394
|
390
|
my @sorted_patch = map { $_ => $patch->{$_} } sort keys %$patch;
|
395
|
391
|
$writer->startTag('patch', @sorted_patch);
|
396
|
392
|
$writer->endTag('patch');
|
... |
... |
@@ -407,38 +403,25 @@ sub get_response { |
407
|
403
|
sub write_responses {
|
408
|
404
|
my ($config, $channel) = @_;
|
409
|
405
|
my $versions = as_array($config->{channels}{$channel});
|
410
|
|
- my (%oses, %langs, %from_versions);
|
|
406
|
+ my (%oses, %from_versions);
|
411
|
407
|
foreach my $version (@$versions) {
|
412
|
408
|
get_version_files($config, $version);
|
413
|
409
|
get_buildinfos($config, $version);
|
414
|
410
|
my $files = $config->{versions}{$version}{files};
|
415
|
|
- my $migrate_archs = $config->{versions}{$version}{migrate_archs} // {};
|
416
|
|
- foreach my $old_os (keys %$migrate_archs) {
|
417
|
|
- my $new_os = $migrate_archs->{$old_os};
|
418
|
|
- foreach my $lang (keys %{$files->{$new_os}}) {
|
419
|
|
- $files->{$old_os}{$lang}{complete} =
|
420
|
|
- $files->{$new_os}{$lang}{complete};
|
421
|
|
- }
|
422
|
|
- }
|
423
|
411
|
foreach my $os (keys %$files) {
|
424
|
412
|
$oses{$os} = 1;
|
425
|
|
- foreach my $lang (keys %{$files->{$os}}) {
|
426
|
|
- $langs{$lang} = 1;
|
427
|
|
- foreach my $from_version (keys %{$files->{$os}{$lang}{partial}}) {
|
428
|
|
- $from_versions{$from_version} = 1;
|
429
|
|
- }
|
|
413
|
+ foreach my $from_version (keys %{$files->{$os}{partial}}) {
|
|
414
|
+ $from_versions{$from_version} = 1;
|
430
|
415
|
}
|
431
|
416
|
}
|
432
|
417
|
}
|
433
|
418
|
my $versions_str = join('+', @$versions);
|
434
|
419
|
foreach my $os (keys %oses) {
|
435
|
|
- foreach my $lang (keys %langs) {
|
436
|
|
- my $resp = get_response($config, $versions, $os, $lang);
|
437
|
|
- write_htdocs($channel, "$versions_str-$os-$lang.xml", $resp);
|
438
|
|
- foreach my $from_version (keys %from_versions) {
|
439
|
|
- $resp = get_response($config, $versions, $os, $lang, $from_version);
|
440
|
|
- write_htdocs($channel, "$from_version-$versions_str-$os-$lang.xml", $resp);
|
441
|
|
- }
|
|
420
|
+ my $resp = get_response($config, $versions, $os);
|
|
421
|
+ write_htdocs($channel, "$versions_str-$os.xml", $resp);
|
|
422
|
+ foreach my $from_version (keys %from_versions) {
|
|
423
|
+ $resp = get_response($config, $versions, $os, $from_version);
|
|
424
|
+ write_htdocs($channel, "$from_version-$versions_str-$os.xml", $resp);
|
442
|
425
|
}
|
443
|
426
|
}
|
444
|
427
|
write_htdocs($channel, 'no-update.xml',
|
... |
... |
@@ -453,38 +436,26 @@ sub write_htaccess { |
453
|
436
|
$htaccess .= $config->{htaccess_rewrite_rules}{$channel} // '';
|
454
|
437
|
my $versions = as_array($config->{channels}{$channel});
|
455
|
438
|
my $versions_str = join('+', @$versions);
|
456
|
|
- my (%oses, %langs, %from_versions);
|
457
|
|
- my $migrate_langs;
|
|
439
|
+ my (%oses, %from_versions);
|
458
|
440
|
foreach my $version (@$versions) {
|
459
|
|
- $migrate_langs = $config->{versions}{$version}{migrate_langs}
|
460
|
|
- if $config->{versions}{$version}{migrate_langs};
|
461
|
441
|
my $files = $config->{versions}{$version}{files};
|
462
|
442
|
foreach my $os (keys %$files) {
|
463
|
443
|
$oses{$os} = 1;
|
464
|
|
- foreach my $lang (keys %{$files->{$os}}) {
|
465
|
|
- $langs{$lang} = 1;
|
466
|
|
- foreach my $from_version (keys %{$files->{$os}{$lang}{partial}}) {
|
467
|
|
- $from_versions{$from_version} = 1;
|
468
|
|
- }
|
|
444
|
+ foreach my $from_version (keys %{$files->{$os}{partial}}) {
|
|
445
|
+ $from_versions{$from_version} = 1;
|
469
|
446
|
}
|
470
|
447
|
}
|
471
|
448
|
$htaccess .= "RewriteRule ^[^\/]+/$version/ no-update.xml $flags\n";
|
472
|
449
|
}
|
473
|
450
|
foreach my $os (sort keys %oses) {
|
474
|
451
|
foreach my $bt (build_targets_by_os($os)) {
|
475
|
|
- foreach my $lang (sort keys %langs) {
|
476
|
|
- foreach my $from_version (sort keys %from_versions) {
|
477
|
|
- $htaccess .= "RewriteRule ^$bt/$from_version/$lang "
|
478
|
|
- . "$from_version-$versions_str-$os-$lang.xml $flags\n";
|
479
|
|
- }
|
480
|
|
- $htaccess .= "RewriteRule ^$bt/[^\/]+/$lang "
|
481
|
|
- . "$versions_str-$os-$lang.xml $flags\n";
|
|
452
|
+ foreach my $from_version (sort keys %from_versions) {
|
|
453
|
+ $htaccess .= "RewriteRule ^$bt/$from_version/ALL "
|
|
454
|
+ . "$from_version-$versions_str-$os.xml $flags\n";
|
482
|
455
|
}
|
483
|
|
- foreach my $lang (sort keys %$migrate_langs) {
|
484
|
|
- $htaccess .= "RewriteRule ^$bt/[^\/]+/$lang "
|
485
|
|
- . "$versions_str-$os-$migrate_langs->{$lang}.xml $flags\n";
|
486
|
|
- }
|
487
|
|
- $htaccess .= "RewriteRule ^$bt/ $versions_str-$os-ALL.xml $flags\n";
|
|
456
|
+ $htaccess .= "RewriteRule ^$bt/[^\/]+/ALL "
|
|
457
|
+ . "$versions_str-$os.xml $flags\n";
|
|
458
|
+ $htaccess .= "RewriteRule ^$bt/ $versions_str-$os.xml $flags\n";
|
488
|
459
|
}
|
489
|
460
|
}
|
490
|
461
|
write_htdocs($channel, '.htaccess', $htaccess);
|
... |
... |
@@ -567,28 +538,26 @@ sub check_update_responses_channel { |
567
|
538
|
my $channel_versions = as_array($config->{channels}{$channel});
|
568
|
539
|
my ($channel_version) = @$channel_versions;
|
569
|
540
|
foreach my $build_target (build_targets_list()) {
|
570
|
|
- foreach my $lang (qw(en-US de)) {
|
571
|
|
- my $url = "$base_url/$channel/$build_target/1.0/$lang";
|
572
|
|
- my $dom = get_remote_xml($url);
|
573
|
|
- if ($dom) {
|
574
|
|
- my $version = check_get_version($dom);
|
575
|
|
- log_step($url, 'version', $version eq $channel_version,
|
576
|
|
- "expected: $channel_version received: $version");
|
577
|
|
- }
|
578
|
|
- $url = "$base_url/$channel/$build_target/$channel_version/$lang";
|
|
541
|
+ my $url = "$base_url/$channel/$build_target/1.0/ALL";
|
|
542
|
+ my $dom = get_remote_xml($url);
|
|
543
|
+ if ($dom) {
|
|
544
|
+ my $version = check_get_version($dom);
|
|
545
|
+ log_step($url, 'version', $version eq $channel_version,
|
|
546
|
+ "expected: $channel_version received: $version");
|
|
547
|
+ }
|
|
548
|
+ $url = "$base_url/$channel/$build_target/$channel_version/ALL";
|
|
549
|
+ $dom = get_remote_xml($url);
|
|
550
|
+ log_step($url, 'no_update', check_no_update($dom)) if $dom;
|
|
551
|
+ my @inc = @{$config->{versions}{$channel_version}{incremental_from}}
|
|
552
|
+ if $config->{versions}{$channel_version}{incremental_from};
|
|
553
|
+ foreach my $inc_from (@inc) {
|
|
554
|
+ my $url = "$base_url/$channel/$build_target/$inc_from/ALL";
|
579
|
555
|
$dom = get_remote_xml($url);
|
580
|
|
- log_step($url, 'no_update', check_no_update($dom)) if $dom;
|
581
|
|
- my @inc = @{$config->{versions}{$channel_version}{incremental_from}}
|
582
|
|
- if $config->{versions}{$channel_version}{incremental_from};
|
583
|
|
- foreach my $inc_from (@inc) {
|
584
|
|
- my $url = "$base_url/$channel/$build_target/$inc_from/$lang";
|
585
|
|
- $dom = get_remote_xml($url);
|
586
|
|
- next unless $dom;
|
587
|
|
- my $version = check_get_version($dom);
|
588
|
|
- log_step($url, 'version', $version eq $channel_version,
|
589
|
|
- "expected: $channel_version received: $version");
|
590
|
|
- log_step($url, 'has_incremental', check_has_incremental($dom));
|
591
|
|
- }
|
|
556
|
+ next unless $dom;
|
|
557
|
+ my $version = check_get_version($dom);
|
|
558
|
+ log_step($url, 'version', $version eq $channel_version,
|
|
559
|
+ "expected: $channel_version received: $version");
|
|
560
|
+ log_step($url, 'has_incremental', check_has_incremental($dom));
|
592
|
561
|
}
|
593
|
562
|
}
|
594
|
563
|
}
|