File Coverage

blib/lib/Podman/Image.pm
Criterion Covered Total %
statement 39 39 100.0
branch n/a
condition 2 4 50.0
subroutine 8 8 100.0
pod 3 4 75.0
total 52 55 94.5


line stmt bran cond sub pod time code
1             package Podman::Image;
2              
3 5     5   504734 use Mojo::Base 'Podman::Client';
  5         27  
  5         36  
4              
5 5     5   5492 use Archive::Tar;
  5         191179  
  5         698  
6 5     5   48 use Exporter qw(import);
  5         20  
  5         127  
7 5     5   25 use Mojo::File qw(path tempfile);
  5         9  
  5         2744  
8              
9             our @EXPORT_OK = qw(build pull);
10              
11             has 'name' => sub { return '' };
12              
13             sub build {
14 1     1 0 5056 my ($name, $file, %options) = @_;
15              
16 1         8 my $self = __PACKAGE__->new;
17              
18 1         21 my $dir = path($file)->dirname;
19 1         326 my @files = map { $_->basename } @{path($dir)->list({dir => 1})->to_array};
  3         457  
  1         3  
20              
21 1         43 chdir $dir;
22 1         66 my $archive = Archive::Tar->new();
23 1         67 $archive->add_files(@files);
24              
25 1         3306 my $archive_file = tempfile;
26 1         920 $archive->write($archive_file);
27              
28 1         3162 $self->post(
29             'build',
30             data => $archive_file,
31             parameters => {'file' => path($file)->basename, 't' => $name, %options},
32             headers => {'Content-Type' => 'application/x-tar'},
33             );
34 1         106 $self->get(sprintf "images/%s/exists", $name);
35              
36 1         34 return $self->name($name);
37             }
38              
39             sub pull {
40 1     1 1 29107 my ($name, $tag, %options) = @_;
41              
42 1         80 my $self = __PACKAGE__->new;
43              
44 1   50     46 my $reference = sprintf "%s:%s", $name, $tag // 'latest';
45              
46 1         56 $self->post('images/pull', parameters => {reference => $reference, tlsVerify => 1, %options});
47 1         56 $self->get(sprintf "images/%s/exists", $name);
48              
49 1         35 return $self->name($name);
50             }
51              
52             sub inspect {
53 1     1 1 5124 my $self = shift;
54              
55 1         4 my $data = $self->get(sprintf "images/%s/json", $self->name)->json;
56 1         311 my $tag = (split /:/, $data->{RepoTags}->[0])[1];
57              
58 1         13 return {Tag => $tag, Id => $data->{Id}, Created => $data->{Created}, Size => $data->{Size}};
59             }
60              
61             sub remove {
62 1     1 1 1547 my ($self, $force) = @_;
63              
64 1   50     4 $self->delete('images', parameters => {images => $self->name, force => $force // 0});
65              
66 1         26 return 1;
67             }
68              
69             1;
70              
71             __END__