Skip to content

Commit

Permalink
[backend] get rid of push_blob_content() function
Browse files Browse the repository at this point in the history
Instead, add make_blob_entry() to BSContar to create a normal
tar entry and use push_blob().
  • Loading branch information
mlschroe committed Apr 26, 2023
1 parent 96ffc08 commit dd0f266
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 26 deletions.
10 changes: 8 additions & 2 deletions src/backend/BSContar.pm
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@ sub blobid {
return 'sha256:'.Digest::SHA::sha256_hex($_[0]);
}

sub make_blob_entry {
my ($name, $blob, %extra) = @_;
my $blobid = blobid($blob);
my $ent = { %extra, 'name' => $name, 'size' => length($blob), 'data' => $blob, 'blobid' => $blobid };
return ($ent, $blobid);
}

sub checksum_entry {
my ($ent, $ctx) = @_;
my $offset = 0;
Expand Down Expand Up @@ -423,8 +430,7 @@ sub container_from_helm {
push @layercomp, '';
}
# create ent for the config
my $config_ent = { 'name' => 'config.json', 'size' => length($config_json), 'data' => $config_json, 'mtime' => $mtime };
$config_ent->{'mimetype'} = $mt_helm_config;
my ($config_ent) = make_blob_entry('config.json', $config_json, 'mtime' => $mtime, 'mimetype' => $mt_helm_config);
# create ent for the manifest
my $manifest = {
'Layers' => [ $chartbasename ],
Expand Down
24 changes: 7 additions & 17 deletions src/backend/BSPublisher/Registry.pm
Original file line number Diff line number Diff line change
Expand Up @@ -145,17 +145,6 @@ sub push_blob {
return $blobid;
}

sub push_blob_content {
my ($repodir, $content) = @_;
my $blob_id = BSContar::blobid($content);
my $dir = "$repodir/:blobs";
return $blob_id if -e "$dir/$blob_id";
mkdir_p($dir) unless -d $dir;
unlink("$dir/.$blob_id.$$");
writestr("$dir/.$blob_id.$$", "$dir/$blob_id", $content);
return $blob_id;
}

sub push_manifest {
my ($repodir, $mani_json) = @_;
my $mani_id = BSContar::blobid($mani_json);
Expand Down Expand Up @@ -428,17 +417,18 @@ sub update_sigs {
sub create_cosign_manifest {
my ($repodir, $oci, $knownmanifests, $knownblobs, $config, @payload_layers) = @_;

my $config_blobid = push_blob_content($repodir, $config);
my ($config_ent, $config_blobid) = BSContar::make_blob_entry('config.json', $config);
push_blob($repodir, $config_ent);
$knownblobs->{$config_blobid} = 1;
my $config_ent = { 'name' => 'config.json', 'size' => length($config), 'data' => $config, 'blobid' => $config_blobid };
my $config_data = BSContar::create_config_data($config_ent, $oci);
my @layer_data;
while (@payload_layers >= 2) {
my ($payload_layer, $payload) = splice(@payload_layers, 0, 2);
my $payload_blobid = push_blob_content($repodir, $payload);
my ($payload_layer_data, $payload) = splice(@payload_layers, 0, 2);
my ($payload_ent, $payload_blobid) = BSContar::make_blob_entry($payload_layer_data->{'digest'}, $payload);
die unless $payload_blobid eq $payload_layer_data->{'digest'};
push_blob($repodir, $payload_ent);
$knownblobs->{$payload_blobid} = 1;
die unless $payload_blobid eq $payload_layer->{'digest'};
push @layer_data, $payload_layer;
push @layer_data, $payload_layer_data;
}
my $mani = BSContar::create_dist_manifest_data($config_data, \@layer_data, $oci);
my $mani_json = BSContar::create_dist_manifest($mani);
Expand Down
12 changes: 5 additions & 7 deletions src/backend/bs_regpush
Original file line number Diff line number Diff line change
Expand Up @@ -260,18 +260,16 @@ sub manifest_upload_tags {
sub cosign_upload {
my ($tag, $config, @layers) = @_;
my $oci = 1;
my $config_blobid = BSContar::blobid($config);
my $config_ent = { 'name' => 'config.json', 'size' => length($config), 'data' => $config, 'blobid' => $config_blobid };
my ($config_ent, $config_blobid) = BSContar::make_blob_entry('config.json', $config);
blob_upload($config_blobid, $config_ent);
my $config_data = BSContar::create_config_data($config_ent, $oci);
my @layer_data;
while (@layers >= 2) {
my ($payload_layer, $payload) = splice(@layers, 0, 2);
my $payload_blobid = BSContar::blobid($payload);
die unless $payload_blobid eq $payload_layer->{'digest'};
my $payload_ent = { 'name' => $payload_blobid, 'size' => length($payload), 'data' => $payload, 'blobid' => $payload_blobid };
my ($payload_layer_data, $payload) = splice(@layers, 0, 2);
my ($payload_ent, $payload_blobid) = BSContar::make_blob_entry($payload_layer_data->{'digest'}, $payload);
die unless $payload_blobid eq $payload_layer_data->{'digest'};
blob_upload($payload_blobid, $payload_ent);
push @layer_data, $payload_layer;
push @layer_data, $payload_layer_data;
}
my $mani = BSContar::create_dist_manifest_data($config_data, \@layer_data, $oci);
my $mani_json = BSContar::create_dist_manifest_list($mani);
Expand Down

0 comments on commit dd0f266

Please sign in to comment.