@@ -362,10 +362,13 @@ sub fetch_repodata {
362
362
}
363
363
my @bins = grep {ref ($_ ) eq ' HASH' && defined ($_ -> {' name' })} values %{$rdata || {}};
364
364
for (@bins ) {
365
- if ($_ -> {' path' } =~ / ^\.\.\/ ([^\/\. ][^\/ ]*\/ [^\/\. ][^\/ ]*)$ /s ) {
366
- $_ -> {' location' } = " ${baseurl} build/$prp /$arch /$1 " ; # obsbinlink to package
365
+ my $path = $_ -> {' path' };
366
+ if ($path =~ / ^\.\.\/ ([^\/\. ][^\/ ]*\/ [^\/\. ][^\/ ]*)$ /s ) {
367
+ $_ -> {' location' } = " ${baseurl} build/$prp /$arch /" .PBuild::Util::urlencode($1 ); # obsbinlink to package
368
+ } elsif ($path =~ / ([\000 -\040 <>;\" #\? &\+ =%[\177 -\377 ])/s ) {
369
+ $_ -> {' location' } = " ${baseurl} build/$prp /$arch /_repository/" .PBuild::Util::urlencode($path );
367
370
} else {
368
- $_ -> {' location' } = " ${baseurl} build/$prp /$arch /_repository/$_ ->{' path'} " ;
371
+ $_ -> {' location' } = " ${baseurl} build/$prp /$arch /_repository/$path " ;
369
372
}
370
373
recode_deps($_ ); # recode deps from testcase format to rpm
371
374
}
@@ -407,11 +410,6 @@ sub fetch_gbininfo {
407
410
$bin -> {' hdrmd5' } = $binary -> {' hdrmd5' } if $binary -> {' hdrmd5' };
408
411
$bin -> {' leadsigmd5' } = $binary -> {' leadsigmd5' } if $binary -> {' leadsigmd5' };
409
412
$bin -> {' md5sum' } = $binary -> {' md5sum' } if $binary -> {' md5sum' };
410
- if ($filename =~ / ([\000 -\040 <>;\" #\? &\+ =%[\177 -\377 ])/s ) {
411
- $bin -> {' location' } = $location . PBuild::Util::urlencode($filename );
412
- } else {
413
- $bin -> {' location' } = $location . $filename ;
414
- }
415
413
$bins {$filename } = $bin ;
416
414
}
417
415
$gbininfo -> {$binaryversionlist -> {' package' }} = \%bins ;
@@ -456,30 +454,33 @@ sub fetch_productbinaries_cpioextract {
456
454
}
457
455
458
456
sub fetch_productbinaries {
459
- my ($url , $repodir , $bins , $callback ) = @_ ;
457
+ my ($url , $arch , $opts , $repodir , $bins , $callback ) = @_ ;
458
+ die (" bad obs: reference\n " ) unless $url =~ / ^obs:\/ {1,3}([^\/ ]+\/ [^\/ ]+)(?:\/ ([^\/ ]*))?$ / ;
459
+ my $prp = $1 ;
460
+ $arch = $2 if $2 ;
461
+ die (" please specify the build service url with the --obs option\n " ) unless $opts -> {' obs' };
462
+ my $baseurl = $opts -> {' obs' };
463
+ $baseurl .= ' /' unless $baseurl =~ / \/ $ / ;
464
+ $baseurl .= " build/$prp /$arch /" ;
460
465
# group by package
461
466
my %packages ;
462
- my $location ;
463
- for my $bin (@$bins ) {
464
- my $l = $bin -> {' location' };
465
- die (" fetch_productbinaries: missing location\n " ) unless $l ;
466
- die (" fetch_productbinaries: bad location $l \n " ) unless $l =~ / ^(.+)\/ ([^\/ ]+)\/ ([^\/ ]+)$ / ;
467
- $location = $1 unless defined $location ;
468
- die (" fetch_productbinaries: location conflict\n " ) unless $1 eq $location ;
469
- $packages {$bin -> {' package' }}-> {$bin -> {' fn' }} = $bin ;
470
- }
467
+ $packages {$_ -> {' package' }}-> {$_ -> {' fn' }} = $_ for @$bins ;
471
468
my $ua = create_ua();
472
469
for my $packid (sort keys %packages ) {
473
470
my $files = $packages {$packid };
474
471
die unless %$files ;
475
472
# print "downloading ".keys(%$files). " artifacts from $packid\n";
476
- my $requrl = " $location / " .PBuild::Util::urlencode($packid ).' ?view=cpio' ;
473
+ my $requrl = $baseurl .PBuild::Util::urlencode($packid ).' ?view=cpio' ;
477
474
$requrl .= " &binary=" .PBuild::Util::urlencode($_ , 1) for sort keys %$files ;
478
475
my $tmpcpio = " $repodir /.$$ .binaries.cpio" ;
479
476
Build::Download::download($requrl , $tmpcpio , undef , ' ua' => $ua , ' retry' => 3);
480
477
PBuild::Cpio::cpio_extract($tmpcpio , sub {fetch_productbinaries_cpioextract($_ [0], $_ [1], $repodir , $packid , $files , $callback )});
481
478
unlink ($tmpcpio );
482
479
}
480
+ # set location for all the binaries we missed
481
+ for my $bin (@$bins ) {
482
+ $bin -> {' location' } = $baseurl .PBuild::Util::urlencode(" $bin ->{'package'}/$bin ->{'fn'}" ) unless $bin -> {' filename' };
483
+ }
483
484
return $ua ;
484
485
}
485
486
0 commit comments