Commit 0bc07ad858492f8eaf50d99483fe7dcc49aafd2f
1 parent
c76b6f4c
Exists in
master
and in
2 other branches
Refactor copr_info subroutine
Showing
2 changed files
with
37 additions
and
38 deletions
Show diff stats
lib/CoprStatus.pm
... | ... | @@ -7,55 +7,37 @@ use LWP::UserAgent; |
7 | 7 | |
8 | 8 | $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0; |
9 | 9 | |
10 | +# hash with repos data | |
11 | +our $info = {}; | |
12 | + | |
10 | 13 | sub copr_monitor_url { |
11 | 14 | my ( $user, $repo ) = @_; |
12 | 15 | return "http://copr.fedoraproject.org/api/coprs/$user/$repo/monitor/"; |
13 | 16 | } |
14 | 17 | |
15 | 18 | sub copr_info { |
19 | + my ( $user, $repo, $branch ) = @_; | |
20 | + | |
16 | 21 | my $ua = LWP::UserAgent->new; |
17 | 22 | $ua->timeout(300); |
18 | 23 | $ua->env_proxy; |
19 | 24 | $ua->ssl_opts(SSL_verify_mode => 0x00); |
20 | 25 | |
21 | - my $result_v4 = $ua->get(copr_monitor_url("softwarepublico", "v4")); | |
22 | - my $result_v5 = $ua->get(copr_monitor_url("softwarepublico", "v5")); | |
26 | + my $result = $ua->get(copr_monitor_url($user, $repo)); | |
23 | 27 | |
24 | 28 | my $json = JSON->new->allow_nonref; |
25 | 29 | |
26 | - my $dec_result_v4 = $json->decode($result_v4->decoded_content); | |
27 | - my $dec_result_v5 = $json->decode($result_v5->decoded_content); | |
28 | - my $info = {}; | |
30 | + my $dec_result = $json->decode($result->decoded_content); | |
29 | 31 | |
30 | - foreach(@{$dec_result_v4->{'packages'}}) { | |
32 | + foreach(@{$dec_result->{'packages'}}) { | |
31 | 33 | my $package = $_->{'pkg_name'}; |
32 | 34 | my $status = $_->{'results'}{'epel-7-x86_64'}{'status'}; |
33 | 35 | my $version = $_->{'results'}{'epel-7-x86_64'}{'pkg_version'}; |
34 | - $info->{$package}->{'v4_version'} = $version if $status eq "succeeded"; | |
35 | - } | |
36 | - | |
37 | - foreach(@{$dec_result_v5->{'packages'}}) { | |
38 | - my $package = $_->{'pkg_name'}; | |
39 | - my $status = $_->{'results'}{'epel-7-x86_64'}{'status'}; | |
40 | - my $version = $_->{'results'}{'epel-7-x86_64'}{'pkg_version'}; | |
41 | - $info->{$package}->{'v5_version'} = $version if $status eq "succeeded"; | |
42 | - } | |
43 | - | |
44 | - foreach my $key (keys %{$info}) { | |
45 | - my $spec = $ua->get("https://softwarepublico.gov.br/gitlab/softwarepublico/softwarepublico/raw/master/src/pkg-rpm/$key/$key.spec"); | |
46 | - my $version = $1 if $spec->decoded_content =~ /^Version:\s*([^\s]+)\s*$/m; | |
47 | - if($version =~ /%\{version\}/) { | |
48 | - $version = $1 if $spec->decoded_content =~ /define version\s*([^\s]+)\s*$/m; | |
49 | - } | |
50 | - | |
51 | - my $release = 'no_release'; | |
52 | - $release = $1 if $spec->decoded_content =~ /^Release:\s*([^\s]+)\s*$/m; | |
53 | - $version = "$version-$release"; | |
54 | - $info->{$key}->{'git_version_master'} = $version; | |
36 | + $info->{$package}->{$repo."_version"} = $version if $status eq "succeeded"; | |
55 | 37 | } |
56 | 38 | |
57 | 39 | foreach my $key (keys %{$info}) { |
58 | - my $spec = $ua->get("https://softwarepublico.gov.br/gitlab/softwarepublico/softwarepublico/raw/stable-4.x/src/pkg-rpm/$key/$key.spec"); | |
40 | + my $spec = $ua->get("https://softwarepublico.gov.br/gitlab/softwarepublico/softwarepublico/raw/$branch/src/pkg-rpm/$key/$key.spec"); | |
59 | 41 | my $version = $1 if $spec->decoded_content =~ /^Version:\s*([^\s]+)\s*$/m; |
60 | 42 | if($version =~ /%\{version\}/) { |
61 | 43 | $version = $1 if $spec->decoded_content =~ /define version\s*([^\s]+)\s*$/m; |
... | ... | @@ -64,14 +46,14 @@ sub copr_info { |
64 | 46 | my $release = 'no_release'; |
65 | 47 | $release = $1 if $spec->decoded_content =~ /^Release:\s*([^\s]+)\s*$/m; |
66 | 48 | $version = "$version-$release"; |
67 | - $info->{$key}->{'git_version_stable_4'} = $version; | |
49 | + $info->{$key}->{'git_version_'.$branch} = $version; | |
68 | 50 | } |
69 | 51 | |
70 | - return $info; | |
71 | 52 | } |
72 | 53 | |
73 | 54 | sub compare_versions { |
74 | - my $info = copr_info(); | |
55 | + copr_info('softwarepublico', 'v4', 'stable-4.x'); | |
56 | + copr_info('softwarepublico', 'v5', 'master'); | |
75 | 57 | my $match = {}; |
76 | 58 | foreach my $key (keys %{$info}) { |
77 | 59 | if($info->{$key}->{'v5_version'} eq $info->{$key}->{git_version_master}) { |
... | ... | @@ -86,12 +68,13 @@ sub compare_versions { |
86 | 68 | } |
87 | 69 | |
88 | 70 | sub info2html { |
89 | - my $info = copr_info(); | |
71 | + copr_info('softwarepublico', 'v4', 'stable-4.x'); | |
72 | + copr_info('softwarepublico', 'v5', 'master'); | |
90 | 73 | my $table_entries=""; |
91 | 74 | foreach my $key (keys %{$info}) { |
92 | 75 | my $fill_v4_row; |
93 | 76 | my $fill_v5_row; |
94 | - if($info->{$key}->{'v4_version'} eq $info->{$key}->{git_version_stable_4}) { | |
77 | + if($info->{$key}->{'v4_version'} eq $info->{$key}->{'git_version_stable-4.x'}) { | |
95 | 78 | $fill_v4_row = "success"; |
96 | 79 | } |
97 | 80 | else { |
... | ... | @@ -107,7 +90,7 @@ sub info2html { |
107 | 90 | |
108 | 91 | $table_entries .= "<tr> |
109 | 92 | <td><b>$key</b></td> |
110 | - <td>$info->{$key}->{'git_version_stable_4'}</td> | |
93 | + <td>$info->{$key}->{'git_version_stable-4.x'}</td> | |
111 | 94 | <td class=\"$fill_v4_row\">$info->{$key}->{'v4_version'}</td> |
112 | 95 | <td>$info->{$key}->{'git_version_master'}</td> |
113 | 96 | <td class=\"$fill_v5_row\">$info->{$key}->{'v5_version'}</td> |
... | ... | @@ -147,7 +130,8 @@ sub serve_html { |
147 | 130 | }; |
148 | 131 | |
149 | 132 | sub serve_json { |
150 | - my $info = copr_info(); | |
133 | + copr_info('softwarepublico', 'v4', 'stable-4.x'); | |
134 | + copr_info('softwarepublico', 'v5', 'master'); | |
151 | 135 | my $json = JSON->new->allow_nonref; |
152 | 136 | my $json_info = $json->encode($info); |
153 | 137 | return [ | ... | ... |
t/app.t
... | ... | @@ -4,7 +4,11 @@ use Test::More; |
4 | 4 | |
5 | 5 | BEGIN { use_ok('CoprStatus'); } |
6 | 6 | |
7 | -my $info = CoprStatus::copr_info(); | |
7 | +CoprStatus::copr_info('softwarepubico', 'v4', 'stable-4.x'); | |
8 | +CoprStatus::copr_info('softwarepubico', 'v5', 'master'); | |
9 | + | |
10 | +my $info = $CoprStatus::info; | |
11 | + | |
8 | 12 | ok(ref($info), 'HASH'); |
9 | 13 | foreach my $key (keys %{$info}) { |
10 | 14 | ok(ref($info->{$key}), 'HASH'); |
... | ... | @@ -24,10 +28,21 @@ foreach my $key (keys %{$match}) { |
24 | 28 | |
25 | 29 | my $table = CoprStatus::info2html(); |
26 | 30 | like($table, qr/danger|success/m); |
27 | -my $html = CoprStatus::build_html(); | |
31 | + | |
32 | +my $data = { | |
33 | + title => "SPB Copr Status", | |
34 | + table_entries => $table | |
35 | +}; | |
36 | + | |
37 | +my $template = Text::Template->new( | |
38 | + TYPE => 'FILE', | |
39 | + SOURCE => 'template.html.tt' | |
40 | +); | |
41 | + | |
42 | +my $html = CoprStatus::build_html($data, $template); | |
28 | 43 | like($html, qr/SPB Copr Status/m); |
29 | 44 | |
30 | -my $monitor_url = copr_monitor_url("foo", "bar"); | |
45 | +my $monitor_url = CoprStatus::copr_monitor_url("foo", "bar"); | |
31 | 46 | my $test_url = "http://copr.fedoraproject.org/api/coprs/foo/bar/monitor/"; |
32 | 47 | is($monitor_url, $test_url); |
33 | 48 | ... | ... |