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,55 +7,37 @@ use LWP::UserAgent; | ||
7 | 7 | ||
8 | $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0; | 8 | $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0; |
9 | 9 | ||
10 | +# hash with repos data | ||
11 | +our $info = {}; | ||
12 | + | ||
10 | sub copr_monitor_url { | 13 | sub copr_monitor_url { |
11 | my ( $user, $repo ) = @_; | 14 | my ( $user, $repo ) = @_; |
12 | return "http://copr.fedoraproject.org/api/coprs/$user/$repo/monitor/"; | 15 | return "http://copr.fedoraproject.org/api/coprs/$user/$repo/monitor/"; |
13 | } | 16 | } |
14 | 17 | ||
15 | sub copr_info { | 18 | sub copr_info { |
19 | + my ( $user, $repo, $branch ) = @_; | ||
20 | + | ||
16 | my $ua = LWP::UserAgent->new; | 21 | my $ua = LWP::UserAgent->new; |
17 | $ua->timeout(300); | 22 | $ua->timeout(300); |
18 | $ua->env_proxy; | 23 | $ua->env_proxy; |
19 | $ua->ssl_opts(SSL_verify_mode => 0x00); | 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 | my $json = JSON->new->allow_nonref; | 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 | my $package = $_->{'pkg_name'}; | 33 | my $package = $_->{'pkg_name'}; |
32 | my $status = $_->{'results'}{'epel-7-x86_64'}{'status'}; | 34 | my $status = $_->{'results'}{'epel-7-x86_64'}{'status'}; |
33 | my $version = $_->{'results'}{'epel-7-x86_64'}{'pkg_version'}; | 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 | foreach my $key (keys %{$info}) { | 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 | my $version = $1 if $spec->decoded_content =~ /^Version:\s*([^\s]+)\s*$/m; | 41 | my $version = $1 if $spec->decoded_content =~ /^Version:\s*([^\s]+)\s*$/m; |
60 | if($version =~ /%\{version\}/) { | 42 | if($version =~ /%\{version\}/) { |
61 | $version = $1 if $spec->decoded_content =~ /define version\s*([^\s]+)\s*$/m; | 43 | $version = $1 if $spec->decoded_content =~ /define version\s*([^\s]+)\s*$/m; |
@@ -64,14 +46,14 @@ sub copr_info { | @@ -64,14 +46,14 @@ sub copr_info { | ||
64 | my $release = 'no_release'; | 46 | my $release = 'no_release'; |
65 | $release = $1 if $spec->decoded_content =~ /^Release:\s*([^\s]+)\s*$/m; | 47 | $release = $1 if $spec->decoded_content =~ /^Release:\s*([^\s]+)\s*$/m; |
66 | $version = "$version-$release"; | 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 | sub compare_versions { | 54 | sub compare_versions { |
74 | - my $info = copr_info(); | 55 | + copr_info('softwarepublico', 'v4', 'stable-4.x'); |
56 | + copr_info('softwarepublico', 'v5', 'master'); | ||
75 | my $match = {}; | 57 | my $match = {}; |
76 | foreach my $key (keys %{$info}) { | 58 | foreach my $key (keys %{$info}) { |
77 | if($info->{$key}->{'v5_version'} eq $info->{$key}->{git_version_master}) { | 59 | if($info->{$key}->{'v5_version'} eq $info->{$key}->{git_version_master}) { |
@@ -86,12 +68,13 @@ sub compare_versions { | @@ -86,12 +68,13 @@ sub compare_versions { | ||
86 | } | 68 | } |
87 | 69 | ||
88 | sub info2html { | 70 | sub info2html { |
89 | - my $info = copr_info(); | 71 | + copr_info('softwarepublico', 'v4', 'stable-4.x'); |
72 | + copr_info('softwarepublico', 'v5', 'master'); | ||
90 | my $table_entries=""; | 73 | my $table_entries=""; |
91 | foreach my $key (keys %{$info}) { | 74 | foreach my $key (keys %{$info}) { |
92 | my $fill_v4_row; | 75 | my $fill_v4_row; |
93 | my $fill_v5_row; | 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 | $fill_v4_row = "success"; | 78 | $fill_v4_row = "success"; |
96 | } | 79 | } |
97 | else { | 80 | else { |
@@ -107,7 +90,7 @@ sub info2html { | @@ -107,7 +90,7 @@ sub info2html { | ||
107 | 90 | ||
108 | $table_entries .= "<tr> | 91 | $table_entries .= "<tr> |
109 | <td><b>$key</b></td> | 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 | <td class=\"$fill_v4_row\">$info->{$key}->{'v4_version'}</td> | 94 | <td class=\"$fill_v4_row\">$info->{$key}->{'v4_version'}</td> |
112 | <td>$info->{$key}->{'git_version_master'}</td> | 95 | <td>$info->{$key}->{'git_version_master'}</td> |
113 | <td class=\"$fill_v5_row\">$info->{$key}->{'v5_version'}</td> | 96 | <td class=\"$fill_v5_row\">$info->{$key}->{'v5_version'}</td> |
@@ -147,7 +130,8 @@ sub serve_html { | @@ -147,7 +130,8 @@ sub serve_html { | ||
147 | }; | 130 | }; |
148 | 131 | ||
149 | sub serve_json { | 132 | sub serve_json { |
150 | - my $info = copr_info(); | 133 | + copr_info('softwarepublico', 'v4', 'stable-4.x'); |
134 | + copr_info('softwarepublico', 'v5', 'master'); | ||
151 | my $json = JSON->new->allow_nonref; | 135 | my $json = JSON->new->allow_nonref; |
152 | my $json_info = $json->encode($info); | 136 | my $json_info = $json->encode($info); |
153 | return [ | 137 | return [ |
t/app.t
@@ -4,7 +4,11 @@ use Test::More; | @@ -4,7 +4,11 @@ use Test::More; | ||
4 | 4 | ||
5 | BEGIN { use_ok('CoprStatus'); } | 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 | ok(ref($info), 'HASH'); | 12 | ok(ref($info), 'HASH'); |
9 | foreach my $key (keys %{$info}) { | 13 | foreach my $key (keys %{$info}) { |
10 | ok(ref($info->{$key}), 'HASH'); | 14 | ok(ref($info->{$key}), 'HASH'); |
@@ -24,10 +28,21 @@ foreach my $key (keys %{$match}) { | @@ -24,10 +28,21 @@ foreach my $key (keys %{$match}) { | ||
24 | 28 | ||
25 | my $table = CoprStatus::info2html(); | 29 | my $table = CoprStatus::info2html(); |
26 | like($table, qr/danger|success/m); | 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 | like($html, qr/SPB Copr Status/m); | 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 | my $test_url = "http://copr.fedoraproject.org/api/coprs/foo/bar/monitor/"; | 46 | my $test_url = "http://copr.fedoraproject.org/api/coprs/foo/bar/monitor/"; |
32 | is($monitor_url, $test_url); | 47 | is($monitor_url, $test_url); |
33 | 48 |