diff --git a/src/backend/BSAptly.pm b/src/backend/BSAptly.pm index 674abda89c98ed5bef1d848d4c39d606a002c14f..d9f40e27ab577ddd2d0cd45040bff9f8239998b3 100755 --- a/src/backend/BSAptly.pm +++ b/src/backend/BSAptly.pm @@ -114,10 +114,6 @@ sub obs2aptly_exec { # Aptly configuration helpers -sub aptly_distro_get_config($prefix, $distro) { - return $BSConfig::aptly_config->{$prefix}{$distro}; -} - sub aptly_project_get_config($projid) { return $aptly_config_projects{$projid}; } @@ -171,22 +167,24 @@ sub obs_project_repos($proj) { return \%ret; } -sub aptly_publish_repo($prefix, $distribution) { +sub aptly_publish_repo($projid, $repoid) { # Given a prefix and distribution, publish a set of multi-component # repositories. A repository is included only if: - # * it's defined in the aptly config for this prefix/distribution. + # * it's defined in the aptly config. # * the publish flag is enabled on OBS for the related project/repository. - # Note that, as this included multiple OBS repositories, the archs defined - # for each one might differ. So the union of all the enabled archs is used + # Note that, as this included multiple OBS repositories, the arches defined + # for each one might differ. So the union of all the enabled arches is used # when publishing. - my %archs; + my %arches; my @to_publish; - my $distro_config = aptly_distro_get_config($prefix, $distribution); - my $distro_components = $distro_config->{'components'}; + my $repo_config = aptly_repo_get_config($projid, $repoid); + my $repo_components = $repo_config->{'components'}; + my $prefix = $repo_config->{'prefix'}; + my $distribution = $repo_config->{'distribution'}; - foreach my $component (keys %$distro_components) { - my $component_config = $distro_components->{$component}; + foreach my $component (keys %$repo_components) { + my $component_config = $repo_components->{$component}; my $projid = $component_config->{'project'}; my $repoid = $component_config->{'repository'}; my $obs_proj = obs_get_project($projid); @@ -197,45 +195,50 @@ sub aptly_publish_repo($prefix, $distribution) { push @to_publish, "$projid/$repoid//$component"; foreach my $arch (@{ $obs_repo->{'arch'} }) { if (BSUtil::enabled($repoid, $obs_proj->{'publish'}, 1, $arch)) { - $archs{$arch} = 1; + $arches{$arch} = 1; } } } - if (!%archs) { + if (!%arches) { return 0; } - my $gpgkey = $distro_config->{'gpg-key'} || $BSConfig::aptly_defconfig->{'gpg-key'}; + my $gpgkey = $repo_config->{'gpg-key'} || $BSConfig::aptly_defconfig->{'gpg-key'}; my @args = ('publish', 'create', 'repo', - (map { "--architecture=".Build::Deb::basearch($_) } (('source'), keys %archs)), + (map { + "--architecture=".Build::Deb::basearch($_) + } (('source'), keys %arches)), "--distribution=$distribution", '--skip-contents', '--skip-bz2', $prefix, @to_publish); push @args, "--gpg-key=$gpgkey" if $gpgkey; - return aptlyctl_exec($distro_config->{'aptly-server'}, @args); + return aptlyctl_exec($repo_config->{'aptly-server'}, @args); } # Aptly publish command wrappers -sub aptly_publish_drop_check($prefix, $distribution) { - my $distro_config = aptly_distro_get_config($prefix, $distribution); - my @args = ('publish', 'drop', '--ignore-if-missing', $prefix, $distribution); - return aptlyctl_exec($distro_config->{'aptly-server'}, @args); +sub aptly_publish_drop_check($projid, $repoid) { + my $repo_config = aptly_repo_get_config($projid, $repoid); + my @args = ('publish', 'drop', '--ignore-if-missing', + $repo_config->{'prefix'}, + $repo_config->{'distribution'}); + return aptlyctl_exec($repo_config->{'aptly-server'}, @args); } -sub aptly_publish_update($prefix, $distribution) { +sub aptly_publish_update($projid, $repoid) { # Update an already published repository distribution - my $distro_config = aptly_distro_get_config($prefix, $distribution); - my $gpgkey = $distro_config->{'gpg-key'} || $BSConfig::aptly_defconfig->{'gpg-key'}; + my $repo_config = aptly_repo_get_config($projid, $repoid); + my $gpgkey = $repo_config->{'gpg-key'} || $BSConfig::aptly_defconfig->{'gpg-key'}; my @args = ('publish', 'update', '--skip-contents', '--skip-bz2', - $prefix, $distribution); + $repo_config->{'prefix'}, + $repo_config->{'distribution'}); push @args, "--gpg-key=$gpgkey" if $gpgkey; - return aptlyctl_exec($distro_config->{'aptly-server'}, @args); + return aptlyctl_exec($repo_config->{'aptly-server'}, @args); } # Aptly snapshot command wrappers @@ -255,13 +258,16 @@ sub aptly_snapshot_exists($projid, $repoid, $timestamp) { return aptlyctl_exec($repo_config->{'aptly-server'}, @args) == 0; } -sub aptly_distro_snapshot($prefix, $distribution, $timestamp) { - # Create snapshots for all the repositories in an aptly prefix/distribution. - my $distro_config = aptly_distro_get_config($prefix, $distribution); - my $distro_components = $distro_config->{'components'}; +sub aptly_distro_snapshot($projid, $repoid, $timestamp) { + # Create snapshots for all the repositories for the project/repository. - foreach my $component (keys %$distro_components) { - my $component_config = $distro_components->{$component}; + my $repo_config = aptly_repo_get_config($projid, $repoid); + my $repo_components = $repo_config->{'components'}; + my $prefix = $repo_config->{'prefix'}; + my $distribution = $repo_config->{'distribution'}; + + foreach my $component (keys %$repo_components) { + my $component_config = $repo_components->{$component}; my $projid = $component_config->{'project'}; my $repoid = $component_config->{'repository'}; my $obs_proj = obs_get_project($projid); @@ -273,16 +279,18 @@ sub aptly_distro_snapshot($prefix, $distribution, $timestamp) { } } -sub aptly_publish_snapshot($prefix, $distribution, $timestamp) { - # Publish snapshots for the repositories in an aptly prefix/distribution. - my %archs; +sub aptly_publish_snapshot($projid, $repoid, $timestamp) { + # Publish snapshots for the repositories in a corresponding aptly prefix/distribution. + my %arches; my @to_publish; - my $distro_config = aptly_distro_get_config($prefix, $distribution); - my $distro_components = $distro_config->{'components'}; + my $repo_config = aptly_repo_get_config($projid, $repoid); + my $repo_components = $repo_config->{'components'}; + my $prefix = $repo_config->{'prefix'}; + my $distribution = $repo_config->{'distribution'}; - foreach my $component (keys %$distro_components) { - my $component_config = $distro_components->{$component}; + foreach my $component (keys %$repo_components) { + my $component_config = $repo_components->{$component}; my $projid = $component_config->{'project'}; my $repoid = $component_config->{'repository'}; my $obs_proj = obs_get_project($projid); @@ -294,25 +302,27 @@ sub aptly_publish_snapshot($prefix, $distribution, $timestamp) { push @to_publish, "$projid/$repoid/$timestamp//$component"; foreach my $arch (@{ $obs_repo->{'arch'} }) { if (BSUtil::enabled($repoid, $obs_proj->{'publish'}, 1, $arch)) { - $archs{$arch} = 1; + $arches{$arch} = 1; } } } - if (!%archs) { + if (!%arches) { return 0; } - my $gpgkey = $distro_config->{'gpg-key'} || $BSConfig::aptly_defconfig->{'gpg-key'}; + my $gpgkey = $repo_config->{'gpg-key'} || $BSConfig::aptly_defconfig->{'gpg-key'}; my @args = ('publish', 'create', 'snapshot', - (map { "--architecture=".Build::Deb::basearch($_) } (('source'), keys %archs)), + (map { + "--architecture=".Build::Deb::basearch($_) + } (('source'), keys %arches)), "--distribution=$distribution/snapshots/$timestamp", '--skip-contents', '--skip-bz2', $prefix, @to_publish); push @args, "--gpg-key=$gpgkey" if $gpgkey; - return aptlyctl_exec($distro_config->{'aptly-server'}, @args); + return aptlyctl_exec($repo_config->{'aptly-server'}, @args); } # Aptly repo command wrappers @@ -345,20 +355,20 @@ sub aptly_putproject($proj, $oldproj, $proj_config) { foreach my $repoid (keys %{ $oldrepos }) { my $repo_config = $proj_config->{$repoid}; if (!$newrepos->{$repoid}) { - #aptly_publish_drop_check($repo_config->{'prefix'}, $repo_config->{'distribution'}); + #aptly_publish_drop_check($proj->{'name'}, $repoid); aptly_repo_drop($proj->{'name'}, $repoid); - aptly_publish_repo($repo_config->{'prefix'}, $repo_config->{'distribution'}); + aptly_publish_repo($proj->{'name'}, $repoid); } } foreach my $repoid (keys %{ $newrepos }) { my $repo_config = $proj_config->{$repoid}; - #aptly_publish_drop_check($repo_config->{'prefix'}, $repo_config->{'distribution'}); + #aptly_publish_drop_check($proj->{'name'}, $repoid); if (!$oldrepos->{$repoid}) { my $component = aptly_repo_get_component($proj->{'name'}, $repoid); aptly_repo_create($proj->{'name'}, $repoid, $repo_config->{'distribution'}, $component); } - aptly_publish_repo($repo_config->{'prefix'}, $repo_config->{'distribution'}); + aptly_publish_repo($proj->{'name'}, $repoid); } } @@ -367,16 +377,16 @@ sub aptly_delproject($proj, $proj_config) { foreach my $repoid (keys %{ $repos }) { my $repo_config = $proj_config->{$repoid}; - aptly_publish_drop_check($repo_config->{'prefix'}, $repo_config->{'distribution'}); + aptly_publish_drop_check($proj->{'name'}, $repoid); aptly_repo_drop($proj->{'name'}, $repoid); - aptly_publish_repo($repo_config->{'prefix'}, $repo_config->{'distribution'}); + aptly_publish_repo($proj->{'name'}, $repoid); } } sub aptly_update_repo($projid, $repoid, $config, $extrep) { my $repo_config = aptly_repo_get_config($projid, $repoid); return obs2aptly_exec($repo_config->{'aptly-server'}, "$projid/$repoid", $extrep) - || aptly_publish_update($config->{'prefix'}, $config->{'distribution'}); + || aptly_publish_update($projid, $repoid); } 1; diff --git a/src/backend/bs_published_hook_aptly_snapshot b/src/backend/bs_published_hook_aptly_snapshot index 047b87908078db934ffcb51ab475f415b72672a1..77b23deb3dbb7e8f30162464f92a0d191361e30d 100755 --- a/src/backend/bs_published_hook_aptly_snapshot +++ b/src/backend/bs_published_hook_aptly_snapshot @@ -28,26 +28,21 @@ sub distribution_basename { } sub do_distro_snapshot { - my ($prefix, $distribution, $timestamp) = @_; - my $distro_config = BSAptly::aptly_distro_get_config($prefix, $distribution); - die("can't find aptly configuration for distribution $prefix/$distribution\n") if !$distro_config; - BSAptly::aptly_distro_snapshot($prefix, $distribution, $timestamp); - BSAptly::aptly_publish_snapshot($prefix, $distribution, $timestamp); + my ($projid, $repoid, $timestamp) = @_; + my $repo_config = BSAptly::aptly_repo_get_config($projid, $repoid); + die("can't find aptly configuration for distribution $projid/$repoid\n") if !$repo_config; + BSAptly::aptly_distro_snapshot($projid, $repoid, $timestamp); + BSAptly::aptly_publish_snapshot($projid, $repoid, $timestamp); } getopts('t:'); my ($projid, $repoid) = $ARGV[0] =~ /(.*)\/(.*)/; -my @suffixes = ('', '-security', '-updates'); my $timestamp = $opt_t || strftime "%Y%m%dT%H%M%SZ", gmtime; die("bad project/repo parameter: $projid, $repoid\n") if !$projid || !$repoid; -my $distro_config = BSAptly::aptly_repo_get_config($projid, $repoid); -die("can't find related aptly distribution for $projid/$repoid\n") if !$distro_config; -my $prefix = $distro_config->{'prefix'}; -my $distribution = distribution_basename($distro_config->{'distribution'}); +my $repo_config = BSAptly::aptly_repo_get_config($projid, $repoid); +die("can't find related aptly distribution for $projid/$repoid\n") if !$repo_config; -foreach my $suffix (@suffixes) { - do_distro_snapshot($prefix, $distribution.$suffix, $timestamp); -} +do_distro_snapshot($projid, $repoid, $timestamp);