← Index
NYTProf Performance Profile   « line view »
For /usr/sbin/pkg_info
  Run on Fri Aug 4 10:12:01 2017
Reported on Fri Aug 4 10:12:17 2017

Filename/usr/libdata/perl5/OpenBSD/PackageRepository.pm
StatementsExecuted 68269 statements in 1.09s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
968221709ms709msOpenBSD::PackageRepository::HTTPorFTP::::CORE:readlineOpenBSD::PackageRepository::HTTPorFTP::CORE:readline (opcode)
111224ms1.05sOpenBSD::PackageRepository::HTTPorFTP::::get_http_listOpenBSD::PackageRepository::HTTPorFTP::get_http_list
96722157.4ms72.2msOpenBSD::PackageRepository::::add_to_list OpenBSD::PackageRepository::add_to_list
193392133.7ms33.7msOpenBSD::PackageRepository::HTTPorFTP::::CORE:matchOpenBSD::PackageRepository::HTTPorFTP::CORE:match (opcode)
975317114.9ms14.9msOpenBSD::PackageRepository::::CORE:match OpenBSD::PackageRepository::CORE:match (opcode)
21111.3ms454msOpenBSD::PackageRepository::Distant::::open_pipe OpenBSD::PackageRepository::Distant::open_pipe
2119.37ms9.37msOpenBSD::PackageRepository::Distant::::CORE:open OpenBSD::PackageRepository::Distant::CORE:open (opcode)
9658117.10ms7.10msOpenBSD::PackageRepository::HTTPorFTP::::CORE:substOpenBSD::PackageRepository::HTTPorFTP::CORE:subst (opcode)
2113.10ms7.30msOpenBSD::PackageRepository::::wipe_info OpenBSD::PackageRepository::wipe_info
2112.46ms432msOpenBSD::PackageRepository::::uncompress OpenBSD::PackageRepository::uncompress
2112.23ms1.05sOpenBSD::PackageRepository::::available OpenBSD::PackageRepository::available
2112.20ms1.20sOpenBSD::PackageRepository::::stemlist OpenBSD::PackageRepository::stemlist
1111.80ms3.70msOpenBSD::PackageRepository::::BEGIN@30 OpenBSD::PackageRepository::BEGIN@30
1111.53ms1.82msOpenBSD::PackageLocator::::BEGIN@24.12 OpenBSD::PackageLocator::BEGIN@24.12
2111.32ms1.32msOpenBSD::PackageRepository::::CORE:waitpid OpenBSD::PackageRepository::CORE:waitpid (opcode)
1111.12ms1.12msOpenBSD::PackageRepository::HTTPorFTP::::CORE:openOpenBSD::PackageRepository::HTTPorFTP::CORE:open (opcode)
421622µs622µsOpenBSD::PackageRepository::::did_it_fork OpenBSD::PackageRepository::did_it_fork
321426µs1.12msOpenBSD::PackageRepository::::parse_problems OpenBSD::PackageRepository::parse_problems
411232µs289msOpenBSD::PackageRepository::::close OpenBSD::PackageRepository::close
111231µs505µsOpenBSD::PackageRepository::Local::::list OpenBSD::PackageRepository::Local::list
111173µs1.29msOpenBSD::PackageRepository::HTTPorFTP::::open_read_ftpOpenBSD::PackageRepository::HTTPorFTP::open_read_ftp
111148µs154µsOpenBSD::PackageRepository::::__ANON__[:86] OpenBSD::PackageRepository::__ANON__[:86]
311143µs143µsOpenBSD::PackageRepository::::CORE:unlink OpenBSD::PackageRepository::CORE:unlink (opcode)
421143µs143µsOpenBSD::PackageRepository::Distant::::CORE:close OpenBSD::PackageRepository::Distant::CORE:close (opcode)
1422140µs220µsOpenBSD::PackageRepository::::relative_url OpenBSD::PackageRepository::relative_url
411135µs454msOpenBSD::PackageRepository::::open OpenBSD::PackageRepository::open
311108µs7.03msOpenBSD::PackageRepository::::parse OpenBSD::PackageRepository::parse
31191µs91µsOpenBSD::PackageRepository::::CORE:open OpenBSD::PackageRepository::CORE:open (opcode)
201191µs91µsOpenBSD::PackageRepository::Local::::CORE:ftfile OpenBSD::PackageRepository::Local::CORE:ftfile (opcode)
21184µs84µsOpenBSD::PackageRepository::::check_signed OpenBSD::PackageRepository::check_signed
32170µs100µsOpenBSD::PackageRepository::::make_room OpenBSD::PackageRepository::make_room
52169µs286msOpenBSD::PackageRepository::::CORE:close OpenBSD::PackageRepository::CORE:close (opcode)
11168µs6.41msOpenBSD::PackageRepository::Distant::::parse_url OpenBSD::PackageRepository::Distant::parse_url
11168µs68µsOpenBSD::PackageRepository::HTTPorFTP::::CORE:closeOpenBSD::PackageRepository::HTTPorFTP::CORE:close (opcode)
211166µs66µsOpenBSD::PackageRepository::Local::::CORE:readdir OpenBSD::PackageRepository::Local::CORE:readdir (opcode)
102163µs63µsOpenBSD::PackageRepository::Distant::::baseurl OpenBSD::PackageRepository::Distant::baseurl
42261µs465msOpenBSD::PackageRepository::::find OpenBSD::PackageRepository::find
11160µs1.05sOpenBSD::PackageRepository::HTTPorFTP::::listOpenBSD::PackageRepository::HTTPorFTP::list
11153µs6.58msOpenBSD::PackageRepository::::parse_fullurl OpenBSD::PackageRepository::parse_fullurl
112143µs43µsOpenBSD::PackageRepository::HTTP::::urlscheme OpenBSD::PackageRepository::HTTP::urlscheme
11141µs41µsOpenBSD::PackageRepository::HTTPorFTP::::CORE:waitpidOpenBSD::PackageRepository::HTTPorFTP::CORE:waitpid (opcode)
22140µs157µsOpenBSD::PackageRepository::::unique OpenBSD::PackageRepository::unique
21139µs464msOpenBSD::PackageRepository::HTTPorFTP::::try_until_successOpenBSD::PackageRepository::HTTPorFTP::try_until_success
61139µs39µsOpenBSD::PackageRepository::::CORE:regcomp OpenBSD::PackageRepository::CORE:regcomp (opcode)
11137µs182µsOpenBSD::PackageRepository::Local::::parse_fullurl OpenBSD::PackageRepository::Local::parse_fullurl
121134µs34µsOpenBSD::PackageRepository::::CORE:readline OpenBSD::PackageRepository::CORE:readline (opcode)
21134µs465msOpenBSD::PackageRepository::HTTPorFTP::::findOpenBSD::PackageRepository::HTTPorFTP::find
11131µs31µsOpenBSD::PackageRepository::Local::::CORE:open_dir OpenBSD::PackageRepository::Local::CORE:open_dir (opcode)
21126µs72µsOpenBSD::PackageRepository::Local::::may_exist OpenBSD::PackageRepository::Local::may_exist
21123µs265µsOpenBSD::PackageRepository::::make_error_file OpenBSD::PackageRepository::make_error_file
11122µs1.05sOpenBSD::PackageRepository::HTTP::::obtain_list OpenBSD::PackageRepository::HTTP::obtain_list
53122µs22µsOpenBSD::PackageRepository::::baseurl OpenBSD::PackageRepository::baseurl
11121µs130µsOpenBSD::PackageRepository::HTTPorFTP::::close_read_ftpOpenBSD::PackageRepository::HTTPorFTP::close_read_ftp
21121µs464msOpenBSD::PackageRepository::HTTPorFTP::::__ANON__[:876]OpenBSD::PackageRepository::HTTPorFTP::__ANON__[:876]
11121µs175µsOpenBSD::PackageRepository::::END OpenBSD::PackageRepository::END
31120µs20µsOpenBSD::PackageRepository::HTTPorFTP::::openedOpenBSD::PackageRepository::HTTPorFTP::opened
11118µs22µsOpenBSD::PackageLocator::::BEGIN@18.10 OpenBSD::PackageLocator::BEGIN@18.10
21117µs17µsOpenBSD::PackageRepository::Local::::CORE:fteread OpenBSD::PackageRepository::Local::CORE:fteread (opcode)
21116µs16µsOpenBSD::PackageRepository::::CORE:substcont OpenBSD::PackageRepository::CORE:substcont (opcode)
11112µs35µsOpenBSD::PackageRepository::::BEGIN@117 OpenBSD::PackageRepository::BEGIN@117
31112µs12µsOpenBSD::PackageRepository::::CORE:subst OpenBSD::PackageRepository::CORE:subst (opcode)
11112µs82µsOpenBSD::PackageRepository::Local::::BEGIN@454 OpenBSD::PackageRepository::Local::BEGIN@454
62111µs11µsOpenBSD::PackageRepository::HTTPorFTP::::maxcountOpenBSD::PackageRepository::HTTPorFTP::maxcount
11110µs18µsOpenBSD::PackageLocator::::BEGIN@19.11 OpenBSD::PackageLocator::BEGIN@19.11
1119µs10µsOpenBSD::PackageRepository::Local::::pkg_db OpenBSD::PackageRepository::Local::pkg_db
1119µs75µsOpenBSD::PackageRepository::::BEGIN@32 OpenBSD::PackageRepository::BEGIN@32
1116µs6µsOpenBSD::PackageRepository::::BEGIN@31 OpenBSD::PackageRepository::BEGIN@31
1116µs6µsOpenBSD::PackageRepository::Local::::BEGIN@471 OpenBSD::PackageRepository::Local::BEGIN@471
2116µs6µsOpenBSD::PackageRepository::::cleanup OpenBSD::PackageRepository::cleanup
3215µs5µsOpenBSD::PackageRepository::Local::::urlscheme OpenBSD::PackageRepository::Local::urlscheme
1115µs5µsOpenBSD::PackageRepository::::BEGIN@33 OpenBSD::PackageRepository::BEGIN@33
2114µs4µsOpenBSD::PackageRepository::::may_exist OpenBSD::PackageRepository::may_exist
2214µs4µsOpenBSD::PackageLocator::::CORE:subst OpenBSD::PackageLocator::CORE:subst (opcode)
1114µs4µsOpenBSD::PackageRepository::::can_be_empty OpenBSD::PackageRepository::can_be_empty
1112µs2µsOpenBSD::PackageRepository::Distant::::CORE:match OpenBSD::PackageRepository::Distant::CORE:match (opcode)
2112µs2µsOpenBSD::PackageLocator::::CORE:match OpenBSD::PackageLocator::CORE:match (opcode)
1112µs2µsOpenBSD::PackageRepository::::http OpenBSD::PackageRepository::http (xsub)
1111µs1µsOpenBSD::PackageRepository::::file OpenBSD::PackageRepository::file (xsub)
111900ns900nsOpenBSD::PackageRepository::Local::::CORE:close OpenBSD::PackageRepository::Local::CORE:close (opcode)
0000s0sOpenBSD::PackageRepository::Distant::::__ANON__[:616] OpenBSD::PackageRepository::Distant::__ANON__[:616]
0000s0sOpenBSD::PackageRepository::Distant::::finish_and_close OpenBSD::PackageRepository::Distant::finish_and_close
0000s0sOpenBSD::PackageRepository::Distant::::pkg_copy OpenBSD::PackageRepository::Distant::pkg_copy
0000s0sOpenBSD::PackageRepository::FTP::::_list OpenBSD::PackageRepository::FTP::_list
0000s0sOpenBSD::PackageRepository::FTP::::get_ftp_list OpenBSD::PackageRepository::FTP::get_ftp_list
0000s0sOpenBSD::PackageRepository::FTP::::obtain_list OpenBSD::PackageRepository::FTP::obtain_list
0000s0sOpenBSD::PackageRepository::FTP::::urlscheme OpenBSD::PackageRepository::FTP::urlscheme
0000s0sOpenBSD::PackageRepository::HTTPS::::urlscheme OpenBSD::PackageRepository::HTTPS::urlscheme
0000s0sOpenBSD::PackageRepository::HTTPorFTP::::__ANON__[:886]OpenBSD::PackageRepository::HTTPorFTP::__ANON__[:886]
0000s0sOpenBSD::PackageRepository::HTTPorFTP::::drop_privileges_and_setup_envOpenBSD::PackageRepository::HTTPorFTP::drop_privileges_and_setup_env
0000s0sOpenBSD::PackageRepository::HTTPorFTP::::grabPlistOpenBSD::PackageRepository::HTTPorFTP::grabPlist
0000s0sOpenBSD::PackageRepository::HTTPorFTP::::grab_objectOpenBSD::PackageRepository::HTTPorFTP::grab_object
0000s0sOpenBSD::PackageRepository::HTTPorFTP::::should_haveOpenBSD::PackageRepository::HTTPorFTP::should_have
0000s0sOpenBSD::PackageRepository::Local::::is_local_file OpenBSD::PackageRepository::Local::is_local_file
0000s0sOpenBSD::PackageRepository::Local::::maxcount OpenBSD::PackageRepository::Local::maxcount
0000s0sOpenBSD::PackageRepository::Local::::may_copy OpenBSD::PackageRepository::Local::may_copy
0000s0sOpenBSD::PackageRepository::Local::::open_pipe OpenBSD::PackageRepository::Local::open_pipe
0000s0sOpenBSD::PackageRepository::Local::::opened OpenBSD::PackageRepository::Local::opened
0000s0sOpenBSD::PackageRepository::::__ANON__[:212] OpenBSD::PackageRepository::__ANON__[:212]
0000s0sOpenBSD::PackageRepository::::dont_cleanup OpenBSD::PackageRepository::dont_cleanup
0000s0sOpenBSD::PackageRepository::::grabPlist OpenBSD::PackageRepository::grabPlist
0000s0sOpenBSD::PackageRepository::::new OpenBSD::PackageRepository::new
0000s0sOpenBSD::PackageRepository::::opened OpenBSD::PackageRepository::opened
0000s0sOpenBSD::PackageRepository::::signify_pipe OpenBSD::PackageRepository::signify_pipe
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# ex:ts=8 sw=4:
2# $OpenBSD: PackageRepository.pm,v 1.145 2017/06/20 18:05:44 espie Exp $
3#
4# Copyright (c) 2003-2010 Marc Espie <espie@openbsd.org>
5#
6# Permission to use, copy, modify, and distribute this software for any
7# purpose with or without fee is hereby granted, provided that the above
8# copyright notice and this permission notice appear in all copies.
9#
10# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18228µs226µs
# spent 22µs (18+4) within OpenBSD::PackageLocator::BEGIN@18.10 which was called: # once (18µs+4µs) by OpenBSD::PackageLocator::BEGIN@24 at line 18
use strict;
# spent 22µs making 1 call to OpenBSD::PackageLocator::BEGIN@18.10 # spent 4µs making 1 call to strict::import
19228µs225µs
# spent 18µs (10+8) within OpenBSD::PackageLocator::BEGIN@19.11 which was called: # once (10µs+8µs) by OpenBSD::PackageLocator::BEGIN@24 at line 19
use warnings;
# spent 18µs making 1 call to OpenBSD::PackageLocator::BEGIN@19.11 # spent 8µs making 1 call to warnings::import
20
21# XXX load extra class, grab match from Base class, and tweak inheritance
22# to get all methods.
23
242184µs11.82ms
# spent 1.82ms (1.53+292µs) within OpenBSD::PackageLocator::BEGIN@24.12 which was called: # once (1.53ms+292µs) by OpenBSD::PackageLocator::BEGIN@24 at line 24
use OpenBSD::PackageRepository::Installed;
# spent 1.82ms making 1 call to OpenBSD::PackageLocator::BEGIN@24.12
2511µs$OpenBSD::PackageRepository::Installed::ISA = qw(OpenBSD::PackageRepository);
26
27package OpenBSD::PackageRepository;
2817µsour @ISA=(qw(OpenBSD::PackageRepositoryBase));
29
302141µs13.70ms
# spent 3.70ms (1.80+1.90) within OpenBSD::PackageRepository::BEGIN@30 which was called: # once (1.80ms+1.90ms) by OpenBSD::PackageLocator::BEGIN@24 at line 30
use OpenBSD::PackageLocation;
# spent 3.70ms making 1 call to OpenBSD::PackageRepository::BEGIN@30
31223µs16µs
# spent 6µs within OpenBSD::PackageRepository::BEGIN@31 which was called: # once (6µs+0s) by OpenBSD::PackageLocator::BEGIN@24 at line 31
use OpenBSD::Paths;
# spent 6µs making 1 call to OpenBSD::PackageRepository::BEGIN@31
32226µs2141µs
# spent 75µs (9+66) within OpenBSD::PackageRepository::BEGIN@32 which was called: # once (9µs+66µs) by OpenBSD::PackageLocator::BEGIN@24 at line 32
use OpenBSD::Error;
# spent 75µs making 1 call to OpenBSD::PackageRepository::BEGIN@32 # spent 66µs making 1 call to Exporter::import
332442µs15µs
# spent 5µs within OpenBSD::PackageRepository::BEGIN@33 which was called: # once (5µs+0s) by OpenBSD::PackageLocator::BEGIN@24 at line 33
use OpenBSD::Temp;
# spent 5µs making 1 call to OpenBSD::PackageRepository::BEGIN@33
34
35sub make_error_file
36
# spent 265µs (23+241) within OpenBSD::PackageRepository::make_error_file which was called 2 times, avg 132µs/call: # 2 times (23µs+241µs) by OpenBSD::PackageRepository::Distant::open_pipe at line 661, avg 132µs/call
{
3722µs my ($self, $object) = @_;
38212µs2241µs $object->{errors} = OpenBSD::Temp->file;
# spent 241µs making 2 calls to OpenBSD::Temp::file, avg 121µs/call
3929µs if (!defined $object->{errors}) {
40 $self->{state}->fatal("#1 not writable",
41 $OpenBSD::Temp::tempbase);
42 }
43}
44
45sub baseurl
46
# spent 22µs within OpenBSD::PackageRepository::baseurl which was called 5 times, avg 4µs/call: # 2 times (12µs+0s) by OpenBSD::PackageRepository::relative_url at line 371, avg 6µs/call # 2 times (5µs+0s) by OpenBSD::PackageRepository::relative_url at line 374, avg 2µs/call # once (5µs+0s) by OpenBSD::PackageRepository::Local::list at line 558
{
4754µs my $self = shift;
48
49520µs return $self->{path};
50}
51
52sub new
53{
54 my ($class, $baseurl, $state) = @_;
55 my $o = $class->parse(\$baseurl, $state);
56 if ($baseurl ne '') {
57 return undef;
58 }
59 return $o;
60}
61
62sub can_be_empty
63
# spent 4µs within OpenBSD::PackageRepository::can_be_empty which was called: # once (4µs+0s) by OpenBSD::PackageRepository::Local::parse_fullurl at line 486
{
641900ns my $self = shift;
6511µs $self->{empty_okay} = 1;
6614µs return $self;
67}
68
6911µsmy $cache = {};
70
71sub unique
72
# spent 157µs (40+117) within OpenBSD::PackageRepository::unique which was called 2 times, avg 79µs/call: # once (26µs+74µs) by OpenBSD::PackageRepository::parse_fullurl at line 98 # once (15µs+44µs) by OpenBSD::PackageRepository::Local::parse_fullurl at line 489
{
7322µs my ($class, $o) = @_;
7422µs return $o unless defined $o;
75216µs282µs if (defined $cache->{$o->url}) {
# spent 82µs making 2 calls to OpenBSD::PackageRepositoryBase::url, avg 41µs/call
76 return $cache->{$o->url};
77 }
7827µs236µs $cache->{$o->url} = $o;
# spent 36µs making 2 calls to OpenBSD::PackageRepositoryBase::url, avg 18µs/call
7928µs return $o;
80}
81
82
# spent 154µs (148+6) within OpenBSD::PackageRepository::__ANON__[/usr/libdata/perl5/OpenBSD/PackageRepository.pm:86] which was called: # once (148µs+6µs) by OpenBSD::PackageRepository::END at line 88
my $cleanup = sub {
83123µs for my $repo (values %$cache) {
842117µs26µs $repo->cleanup;
# spent 6µs making 2 calls to OpenBSD::PackageRepository::cleanup, avg 3µs/call
85 }
8613µs};
87
# spent 175µs (21+154) within OpenBSD::PackageRepository::END which was called: # once (21µs+154µs) by main::RUNTIME at line 0 of /usr/sbin/pkg_info
END {
88113µs1154µs &$cleanup;
89}
90
9114µs15µsOpenBSD::Handler->register($cleanup);
# spent 5µs making 1 call to OpenBSD::Handler::register
92
93sub parse_fullurl
94
# spent 6.58ms (53µs+6.53) within OpenBSD::PackageRepository::parse_fullurl which was called: # once (53µs+6.53ms) by OpenBSD::PackageRepository::parse at line 126
{
9511µs my ($class, $r, $state) = @_;
96
9716µs118µs $class->strip_urlscheme($r) or return undef;
# spent 18µs making 1 call to OpenBSD::PackageRepositoryBase::strip_urlscheme
98144µs26.51ms return $class->unique($class->parse_url($r, $state));
# spent 6.41ms making 1 call to OpenBSD::PackageRepository::Distant::parse_url # spent 99µs making 1 call to OpenBSD::PackageRepository::unique
99}
100
101sub dont_cleanup
102{
103}
104
105sub ftp() { 'OpenBSD::PackageRepository::FTP' }
106sub http() { 'OpenBSD::PackageRepository::HTTP' }
107sub https() { 'OpenBSD::PackageRepository::HTTPS' }
108sub scp() { 'OpenBSD::PackageRepository::SCP' }
109sub file() { 'OpenBSD::PackageRepository::Local' }
110sub installed() { 'OpenBSD::PackageRepository::Installed' }
111
112sub parse
113
# spent 7.03ms (108µs+6.92) within OpenBSD::PackageRepository::parse which was called 3 times, avg 2.34ms/call: # 3 times (108µs+6.92ms) by OpenBSD::PackageLocator::add_default at line 50 of OpenBSD/PackageLocator.pm, avg 2.34ms/call
{
11433µs my ($class, $r, $state) = @_;
115
116 {
11752.12ms258µs
# spent 35µs (12+22) within OpenBSD::PackageRepository::BEGIN@117 which was called: # once (12µs+22µs) by OpenBSD::PackageLocator::BEGIN@24 at line 117
no warnings qw(uninitialized); # in case installpath is empty
# spent 35µs making 1 call to OpenBSD::PackageRepository::BEGIN@117 # spent 22µs making 1 call to warnings::unimport
118360µs6148µs $$r =~ s/^installpath(\:|$)/$state->installpath.$1/e;
# spent 120µs making 1 call to OpenBSD::Auto::__ANON__[OpenBSD/Error.pm:28] # spent 16µs making 2 calls to OpenBSD::PackageRepository::CORE:substcont, avg 8µs/call # spent 12µs making 3 calls to OpenBSD::PackageRepository::CORE:subst, avg 4µs/call
119 }
120
12135µs my $u = $$r;
12235µs return undef if $u eq '';
123
124
125
126251µs106.59ms if ($u =~ m/^ftp\:/io) {
# spent 6.58ms making 1 call to OpenBSD::PackageRepository::parse_fullurl # spent 8µs making 8 calls to OpenBSD::PackageRepository::CORE:match, avg 1µs/call # spent 2µs making 1 call to OpenBSD::PackageRepository::http
127 return $class->ftp->parse_fullurl($r, $state);
128 } elsif ($u =~ m/^http\:/io) {
129# require OpenBSD::PackageRepository::HTTP;
130
131 return $class->http->parse_fullurl($r, $state);
132 } elsif ($u =~ m/^https\:/io) {
133 return $class->https->parse_fullurl($r, $state);
134 } elsif ($u =~ m/^scp\:/io) {
135 return undef if $state->defines("NO_SCP");
136
137 require OpenBSD::PackageRepository::SCP;
138
139 return $class->scp->parse_fullurl($r, $state);
140 } elsif ($u =~ m/^file\:/io) {
141 return $class->file->parse_fullurl($r, $state);
142 } elsif ($u =~ m/^inst\:$/io) {
143 return $class->installed->parse_fullurl($r, $state);
144 } else {
14514µs1700ns if ($$r =~ m/^([a-z0-9][a-z0-9.]+\.[a-z0-9.]+)(\:|$)/
# spent 700ns making 1 call to OpenBSD::PackageRepository::CORE:match
146 && !-d $1) {
147 $$r =~ s//http:\/\/$1\/%m$2/;
148 return $class->http->parse_fullurl($r, $state);
149 }
150120µs2183µs return $class->file->parse_fullurl($r, $state);
# spent 182µs making 1 call to OpenBSD::PackageRepository::Local::parse_fullurl # spent 1µs making 1 call to OpenBSD::PackageRepository::file
151 }
152}
153
154sub available
155
# spent 1.05s (2.23ms+1.05) within OpenBSD::PackageRepository::available which was called 2 times, avg 526ms/call: # 2 times (2.23ms+1.05s) by OpenBSD::PackageRepository::stemlist at line 166, avg 526ms/call
{
15622µs my $self = shift;
157
15822.23ms21.05s return @{$self->list};
# spent 1.05s making 1 call to OpenBSD::PackageRepository::HTTPorFTP::list # spent 505µs making 1 call to OpenBSD::PackageRepository::Local::list
159}
160
161sub stemlist
162
# spent 1.20s (2.20ms+1.20) within OpenBSD::PackageRepository::stemlist which was called 2 times, avg 600ms/call: # 2 times (2.20ms+1.20s) by OpenBSD::Search::PartialStem::match at line 166 of OpenBSD/Search.pm, avg 600ms/call
{
16322µs my $self = shift;
16424µs if (!defined $self->{stemlist}) {
16522µs require OpenBSD::PackageName;
16621.98ms21.05s my @l = $self->available;
# spent 1.05s making 2 calls to OpenBSD::PackageRepository::available, avg 526ms/call
16724µs if (@l == 0 && !$self->{empty_okay}) {
168 $self->{state}->errsay("#1: #2", $self->url,
169 $self->{no_such_dir} ? "no such dir" : "empty");
170 }
1712279µs2147ms $self->{stemlist} = OpenBSD::PackageName::avail2stems(@l);
# spent 147ms making 2 calls to OpenBSD::PackageName::avail2stems, avg 73.3ms/call
172 }
173211µs return $self->{stemlist};
174}
175
176sub wipe_info
177
# spent 7.30ms (3.10+4.19) within OpenBSD::PackageRepository::wipe_info which was called 2 times, avg 3.65ms/call: # 2 times (3.10ms+4.19ms) by OpenBSD::PackageLocation::wipe_info at line 209 of OpenBSD/PackageLocation.pm, avg 3.65ms/call
{
17822µs my ($self, $pkg) = @_;
179
1802123µs require File::Path;
181
18223µs my $dir = $pkg->{dir};
183216µs if (defined $dir) {
184 OpenBSD::Error->rmtree($dir);
185 OpenBSD::Temp->reclaim($dir);
186 delete $pkg->{dir};
187 }
188}
189
190# by default, all objects may exist
191sub may_exist
192
# spent 4µs within OpenBSD::PackageRepository::may_exist which was called 2 times, avg 2µs/call: # 2 times (4µs+0s) by OpenBSD::PackageRepository::open at line 247, avg 2µs/call
{
19327µs return 1;
194}
195
196# by default, we don't track opened files for this key
197
198sub opened
199{
200 undef;
201}
202
203# hint: 0 premature close, 1 real error. undef, normal !
204
205sub close
206
# spent 289ms (232µs+289) within OpenBSD::PackageRepository::close which was called 4 times, avg 72.2ms/call: # 4 times (232µs+289ms) by OpenBSD::PackageRepositoryBase::close_now at line 134 of OpenBSD/PackageRepository/Installed.pm, avg 72.2ms/call
{
20744µs my ($self, $object, $hint) = @_;
208454µs4573ms close($object->{fh}) if defined $object->{fh};
# spent 286ms making 2 calls to OpenBSD::PackageRepository::CORE:close, avg 143ms/call # spent 286ms making 2 calls to IO::Uncompress::Base::close, avg 143ms/call
209412µs if (defined $object->{pid2}) {
210 local $SIG{ALRM} = sub {
211 kill HUP => $object->{pid2};
212268µs };
213217µs alarm(30);
21421.35ms21.32ms waitpid($object->{pid2}, 0);
# spent 1.32ms making 2 calls to OpenBSD::PackageRepository::CORE:waitpid, avg 660µs/call
215224µs alarm(0);
216 }
217 $self->parse_problems($object->{errors}, $hint, $object)
218422µs2738µs if defined $object->{errors};
# spent 738µs making 2 calls to OpenBSD::PackageRepository::parse_problems, avg 369µs/call
21946µs undef $object->{errors};
220424µs4249µs $object->deref;
# spent 249µs making 4 calls to OpenBSD::PackageLocation::deref, avg 62µs/call
221}
222
223sub make_room
224
# spent 100µs (70+31) within OpenBSD::PackageRepository::make_room which was called 3 times, avg 33µs/call: # 2 times (43µs+20µs) by OpenBSD::PackageRepository::open at line 250, avg 31µs/call # once (26µs+11µs) by OpenBSD::PackageRepository::HTTPorFTP::list at line 893
{
22533µs my $self = shift;
226
227 # kill old files if too many
228311µs320µs my $already = $self->opened;
# spent 20µs making 3 calls to OpenBSD::PackageRepository::HTTPorFTP::opened, avg 7µs/call
22934µs if (defined $already) {
230 # gc old objects
231321µs37µs if (@$already >= $self->maxcount) {
# spent 7µs making 3 calls to OpenBSD::PackageRepository::HTTPorFTP::maxcount, avg 2µs/call
232 @$already = grep { defined $_->{fh} } @$already;
233 }
234310µs35µs while (@$already >= $self->maxcount) {
# spent 5µs making 3 calls to OpenBSD::PackageRepository::HTTPorFTP::maxcount, avg 2µs/call
235 my $o = shift @$already;
236 $self->close_now($o);
237 }
238 }
239311µs return $already;
240}
241
242# open method that tracks opened files per-host.
243sub open
244
# spent 454ms (135µs+454) within OpenBSD::PackageRepository::open which was called 4 times, avg 113ms/call: # 4 times (135µs+454ms) by OpenBSD::PackageLocation::_opened at line 79 of OpenBSD/PackageLocation.pm, avg 113ms/call
{
24543µs my ($self, $object) = @_;
246
247426µs477µs return unless $self->may_exist($object->{name});
# spent 72µs making 2 calls to OpenBSD::PackageRepository::Local::may_exist, avg 36µs/call # spent 4µs making 2 calls to OpenBSD::PackageRepository::may_exist, avg 2µs/call
248
249 # kill old files if too many
25027µs263µs my $already = $self->make_room;
# spent 63µs making 2 calls to OpenBSD::PackageRepository::make_room, avg 31µs/call
251218µs local $SIG{'PIPE'} = 'DEFAULT';
252216µs2454ms my $fh = $self->open_pipe($object);
# spent 454ms making 2 calls to OpenBSD::PackageRepository::Distant::open_pipe, avg 227ms/call
25322µs if (!defined $fh) {
254 return;
255 }
25626µs $object->{fh} = $fh;
25727µs if (defined $already) {
258 push @$already, $object;
259 }
260246µs return $fh;
261}
262
263sub find
264
# spent 465ms (61µs+465) within OpenBSD::PackageRepository::find which was called 4 times, avg 116ms/call: # 2 times (21µs+464ms) by OpenBSD::PackageRepository::HTTPorFTP::__ANON__[/usr/libdata/perl5/OpenBSD/PackageRepository.pm:876] at line 876, avg 232ms/call # 2 times (40µs+213µs) by OpenBSD::PackageRepositoryList::do_something at line 61 of OpenBSD/PackageRepositoryList.pm, avg 127µs/call
{
26543µs my ($repository, $name) = @_;
266417µs4128µs my $self = $repository->new_location($name);
# spent 128µs making 4 calls to OpenBSD::PackageRepositoryBase::new_location, avg 32µs/call
267
268446µs4464ms if ($self->contents) {
# spent 464ms making 4 calls to OpenBSD::PackageLocation::contents, avg 116ms/call
269 return $self;
270 }
271}
272
273sub grabPlist
274{
275 my ($repository, $name, $code) = @_;
276 my $self = $repository->new_location($name);
277
278 return $self->grabPlist($code);
279}
280
281sub parse_problems
282
# spent 1.12ms (426µs+693µs) within OpenBSD::PackageRepository::parse_problems which was called 3 times, avg 373µs/call: # 2 times (280µs+459µs) by OpenBSD::PackageRepository::close at line 218, avg 369µs/call # once (147µs+234µs) by OpenBSD::PackageRepository::HTTPorFTP::list at line 900
{
28336µs my ($self, $filename, $hint, $object) = @_;
2843131µs391µs CORE::open(my $fh, '<', $filename) or return;
# spent 91µs making 3 calls to OpenBSD::PackageRepository::CORE:open, avg 30µs/call
285
286323µs3114µs my $baseurl = $self->url;
# spent 114µs making 3 calls to OpenBSD::PackageRepositoryBase::url, avg 38µs/call
28732µs my $url = $baseurl;
288312µs279µs if (defined $object) {
# spent 79µs making 2 calls to OpenBSD::PackageLocation::url, avg 39µs/call
289 $url = $object->url;
290 }
29133µs my $notyet = 1;
29232µs my $broken = 0;
29332µs my $signify_error = 0;
29436µs $self->{last_error} = 0;
295371µs1234µs while(<$fh>) {
# spent 34µs making 12 calls to OpenBSD::PackageRepository::CORE:readline, avg 3µs/call
296953µs930µs next if m/^(?:200|220|221|226|229|230|227|250|331|500|150)[\s\-]/o;
# spent 30µs making 9 calls to OpenBSD::PackageRepository::CORE:match, avg 3µs/call
297930µs96µs next if m/^EPSV command not understood/o;
# spent 6µs making 9 calls to OpenBSD::PackageRepository::CORE:match, avg 711ns/call
298967µs942µs next if m/^Trying [\da-f\.\:]+\.\.\./o;
# spent 42µs making 9 calls to OpenBSD::PackageRepository::CORE:match, avg 5µs/call
299692µs1255µs next if m/^Requesting \Q$baseurl\E/;
# spent 39µs making 6 calls to OpenBSD::PackageRepository::CORE:regcomp, avg 6µs/call # spent 16µs making 6 calls to OpenBSD::PackageRepository::CORE:match, avg 3µs/call
300310µs32µs next if m/^Remote system type is\s+/o;
# spent 2µs making 3 calls to OpenBSD::PackageRepository::CORE:match, avg 733ns/call
301313µs32µs next if m/^Connected to\s+/o;
# spent 2µs making 3 calls to OpenBSD::PackageRepository::CORE:match, avg 733ns/call
302310µs33µs next if m/^remote\:\s+/o;
# spent 3µs making 3 calls to OpenBSD::PackageRepository::CORE:match, avg 867ns/call
303312µs34µs next if m/^Using binary mode to transfer files/o;
# spent 4µs making 3 calls to OpenBSD::PackageRepository::CORE:match, avg 1µs/call
304316µs38µs next if m/^Retrieving\s+/o;
# spent 8µs making 3 calls to OpenBSD::PackageRepository::CORE:match, avg 3µs/call
305312µs34µs next if m/^Success?fully retrieved file/o;
# spent 4µs making 3 calls to OpenBSD::PackageRepository::CORE:match, avg 1µs/call
306318µs37µs next if m/^\d+\s+bytes\s+received\s+in/o;
# spent 7µs making 3 calls to OpenBSD::PackageRepository::CORE:match, avg 2µs/call
307213µs21µs next if m/^ftp: connect to address.*: No route to host/o;
# spent 1µs making 2 calls to OpenBSD::PackageRepository::CORE:match, avg 600ns/call
308213µs23µs if (m/^ftp: Writing -: Broken pipe/o) {
# spent 3µs making 2 calls to OpenBSD::PackageRepository::CORE:match, avg 2µs/call
30922µs $broken = 1;
31023µs next;
311 }
312 # http error
313 if (m/^ftp: Error retrieving file: 404/o) {
314 if (!defined $object) {
315 $self->{no_such_dir} = 1;
316 next;
317 } else {
318 $self->{lasterror} = 404;
319 }
320 # ignore errors for stable packages
321 next if $self->can_be_empty;
322 }
323
324 if (defined $hint && $hint == 0) {
325 next if m/^ftp: -: short write/o;
326 next if m/^ftp: local: -: Broken pipe/o;
327 next if m/^421\s+/o;
328 }
329 # not retrieving the file => always the same message
330 # so it's superfluous
331 next if m/^signify:/ && $self->{lasterror};
332 if ($notyet) {
333 $self->{state}->errprint("#1: ", $url);
334 if (defined $object) {
335 $object->{error_reported} = 1;
336 }
337 $notyet = 0;
338 }
339 if (m/^signify:/) {
340 $signify_error = 1;
341 s/.*unsigned .*archive.*/unsigned package (signify(1) doesn't see old-style signatures)/;
342 }
343 if (m/^421\s+/o ||
344 m/^ftp: connect: Connection timed out/o ||
345 m/^ftp: Can't connect or login to host/o) {
346 $self->{lasterror} = 421;
347 }
348 if (m/^550\s+/o) {
349 $self->{lasterror} = 550;
350 }
351 $self->{state}->errprint("#1", $_);
352 }
35333µs if ($broken) {
354 unless ($signify_error || defined $hint && $hint == 0) {
355 $self->{state}->errprint('#1', "ftp: Broken pipe");
356 }
357 }
358325µs314µs CORE::close($fh);
# spent 14µs making 3 calls to OpenBSD::PackageRepository::CORE:close, avg 5µs/call
359344µs349µs OpenBSD::Temp->reclaim($filename);
# spent 49µs making 3 calls to OpenBSD::Temp::reclaim, avg 16µs/call
3603183µs3143µs unlink $filename;
# spent 143µs making 3 calls to OpenBSD::PackageRepository::CORE:unlink, avg 48µs/call
361}
362
363sub cleanup
364224µs
# spent 6µs within OpenBSD::PackageRepository::cleanup which was called 2 times, avg 3µs/call: # 2 times (6µs+0s) by OpenBSD::PackageRepository::__ANON__[/usr/libdata/perl5/OpenBSD/PackageRepository.pm:86] at line 84, avg 3µs/call
{
365 # nothing to do
366}
367
368sub relative_url
369
# spent 220µs (140+80) within OpenBSD::PackageRepository::relative_url which was called 14 times, avg 16µs/call: # 12 times (122µs+68µs) by OpenBSD::PackageRepositoryBase::url at line 122 of OpenBSD/PackageRepository/Installed.pm, avg 16µs/call # 2 times (18µs+12µs) by OpenBSD::PackageRepository::Local::may_exist at line 539, avg 15µs/call
{
3701412µs my ($self, $name) = @_;
3711470µs641µs if (defined $name) {
# spent 29µs making 4 calls to OpenBSD::PackageRepository::Distant::baseurl, avg 7µs/call # spent 12µs making 2 calls to OpenBSD::PackageRepository::baseurl, avg 6µs/call
372 return $self->baseurl.$name.".tgz";
373 } else {
374860µs839µs return $self->baseurl;
# spent 34µs making 6 calls to OpenBSD::PackageRepository::Distant::baseurl, avg 6µs/call # spent 5µs making 2 calls to OpenBSD::PackageRepository::baseurl, avg 2µs/call
375 }
376}
377
378sub add_to_list
379
# spent 72.2ms (57.4+14.8) within OpenBSD::PackageRepository::add_to_list which was called 9672 times, avg 7µs/call: # 9658 times (57.3ms+14.7ms) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 919, avg 7µs/call # 14 times (63µs+15µs) by OpenBSD::PackageRepository::Local::list at line 562, avg 6µs/call
{
38096727.80ms my ($self, $list, $filename) = @_;
381967287.7ms967214.8ms if ($filename =~ m/^(.*\-\d.*)\.tgz$/o) {
# spent 14.8ms making 9672 calls to OpenBSD::PackageRepository::CORE:match, avg 2µs/call
382 push(@$list, $1);
383 }
384}
385
386sub did_it_fork
387
# spent 622µs within OpenBSD::PackageRepository::did_it_fork which was called 4 times, avg 156µs/call: # 2 times (427µs+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 702, avg 213µs/call # 2 times (196µs+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 676, avg 98µs/call
{
3884186µs my ($self, $pid) = @_;
38945µs if (!defined $pid) {
390 $self->{state}->fatal("Cannot fork: #1", $!);
391 }
3924210µs if ($pid == 0) {
393 delete $SIG{'WINCH'};
394 delete $SIG{'CONT'};
395 delete $SIG{'INFO'};
396 }
397}
398
399sub uncompress
400
# spent 432ms (2.46+429) within OpenBSD::PackageRepository::uncompress which was called 2 times, avg 216ms/call: # 2 times (2.46ms+429ms) by OpenBSD::PackageRepository::Distant::open_pipe at line 713, avg 216ms/call
{
40123µs my $self = shift;
40228µs my $object = shift;
4032722µs require IO::Uncompress::Gunzip;
4042186µs2363ms my $fh = IO::Uncompress::Gunzip->new(@_, MultiStream => 1);
# spent 363ms making 2 calls to IO::Uncompress::Gunzip::new, avg 181ms/call
40529µs my $result = "";
40626µs if ($object->{is_signed}) {
407210µs28µs my $h = $fh->getHeaderInfo;
# spent 8µs making 2 calls to IO::Uncompress::Base::getHeaderInfo, avg 4µs/call
40824µs if ($h) {
409214µs for my $line (split /\n/, $h->{Comment}) {
4108120µs1447µs if ($line =~ m/^key=.*\/(.*)\.sec$/) {
# spent 47µs making 14 calls to OpenBSD::PackageRepository::CORE:match, avg 3µs/call
411 $result .= "\@signer $1\n";
412 } elsif ($line =~ m/^date=(.*)$/) {
413 $result .= "\@digital-signature signify2:$1:external\n";
414 }
415 }
416 } else {
417 $fh->close;
418 return undef;
419 }
420 }
421215µs $object->{extra_content} = $result;
422212µs return $fh;
423}
424
425sub signify_pipe
426{
427 my $self = shift;
428 my $object = shift;
429 CORE::open STDERR, ">>", $object->{errors};
430 exec {OpenBSD::Paths->signify}
431 ("signify",
432 "-zV",
433 @_)
434 or $self->{state}->fatal("Can't run #1: #2",
435 OpenBSD::Paths->signify, $!);
436}
437
438sub check_signed
439
# spent 84µs within OpenBSD::PackageRepository::check_signed which was called 2 times, avg 42µs/call: # 2 times (84µs+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 700, avg 42µs/call
{
44029µs my ($self, $object) = @_;
44123µs if ($object->{repository}{trusted}) {
442 return 0;
443 }
44425µs if ($self->{state}{signature_style} eq 'new') {
445228µs $object->{is_signed} = 1;
446248µs return 1;
447 } else {
448 return 0;
449 }
450}
451
452package OpenBSD::PackageRepository::Local;
45314µsour @ISA=qw(OpenBSD::PackageRepository);
454278µs2151µs
# spent 82µs (12+70) within OpenBSD::PackageRepository::Local::BEGIN@454 which was called: # once (12µs+70µs) by OpenBSD::PackageLocator::BEGIN@24 at line 454
use OpenBSD::Error;
# spent 82µs making 1 call to OpenBSD::PackageRepository::Local::BEGIN@454 # spent 70µs making 1 call to Exporter::import
455
456sub is_local_file
457{
458 return 1;
459}
460
461sub urlscheme
462
# spent 5µs within OpenBSD::PackageRepository::Local::urlscheme which was called 3 times, avg 2µs/call: # 2 times (3µs+0s) by OpenBSD::PackageRepositoryBase::url at line 122 of OpenBSD/PackageRepository/Installed.pm, avg 2µs/call # once (2µs+0s) by OpenBSD::PackageRepositoryBase::strip_urlscheme at line 100 of OpenBSD/PackageRepository/Installed.pm
{
463311µs return 'file';
464}
465
4661700nsmy $pkg_db;
467
468sub pkg_db
469
# spent 10µs (9+1) within OpenBSD::PackageRepository::Local::pkg_db which was called: # once (9µs+1µs) by OpenBSD::PackageRepository::Local::parse_fullurl at line 483
{
47011µs if (!defined $pkg_db) {
47122.88ms16µs
# spent 6µs within OpenBSD::PackageRepository::Local::BEGIN@471 which was called: # once (6µs+0s) by OpenBSD::PackageLocator::BEGIN@24 at line 471
use OpenBSD::Paths;
# spent 6µs making 1 call to OpenBSD::PackageRepository::Local::BEGIN@471
47217µs11µs $pkg_db = $ENV{"PKG_DBDIR"} || OpenBSD::Paths->pkgdb;
# spent 1µs making 1 call to OpenBSD::Paths::pkgdb
473 }
47414µs return $pkg_db;
475}
476
477sub parse_fullurl
478
# spent 182µs (37+144) within OpenBSD::PackageRepository::Local::parse_fullurl which was called: # once (37µs+144µs) by OpenBSD::PackageRepository::parse at line 150
{
4791800ns my ($class, $r, $state) = @_;
480
48115µs135µs my $ok = $class->strip_urlscheme($r);
# spent 35µs making 1 call to OpenBSD::PackageRepositoryBase::strip_urlscheme
48214µs137µs my $o = $class->parse_url($r, $state);
# spent 37µs making 1 call to OpenBSD::PackageRepositoryBase::parse_url
48317µs110µs if (!$ok && $o->{path} eq $class->pkg_db."/") {
# spent 10µs making 1 call to OpenBSD::PackageRepository::Local::pkg_db
484 return $class->installed->new(0, $state);
485 } else {
48614µs14µs if ($o->{path} eq './') {
# spent 4µs making 1 call to OpenBSD::PackageRepository::can_be_empty
487 $o->can_be_empty;
488 }
48917µs158µs return $class->unique($o);
# spent 58µs making 1 call to OpenBSD::PackageRepository::unique
490 }
491}
492
493# wrapper around copy, that sometimes does not copy
494sub may_copy
495{
496 my ($self, $object, $destdir) = @_;
497 my $src = $self->relative_url($object->{name});
498 require File::Spec;
499 my (undef, undef, $base) = File::Spec->splitpath($src);
500 my $dest = File::Spec->catfile($destdir, $base);
501 if (File::Spec->canonpath($dest) eq File::Spec->canonpath($src)) {
502 return;
503 }
504 if (-f $dest) {
505 my ($ddev, $dino) = (stat $dest)[0,1];
506 my ($sdev, $sino) = (stat $src)[0, 1];
507 if ($ddev == $sdev and $sino == $dino) {
508 return;
509 }
510 }
511 $self->{state}->copy_file($src, $destdir);
512}
513
514sub open_pipe
515{
516 my ($self, $object) = @_;
517 if (defined $ENV{'PKG_CACHE'}) {
518 $self->may_copy($object, $ENV{'PKG_CACHE'});
519 }
520 my $name = $self->relative_url($object->{name});
521 if ($self->check_signed($object)) {
522 $self->make_error_file($object);
523 my $pid = open(my $fh, "-|");
524 $self->did_it_fork($pid);
525 if ($pid) {
526 $object->{pid} = $pid;
527 return $self->uncompress($object, $fh);
528 } else {
529 $self->signify_pipe($object, "-x", $name);
530 }
531 } else {
532 return $self->uncompress($object, $name);
533 }
534}
535
536sub may_exist
537
# spent 72µs (26+46) within OpenBSD::PackageRepository::Local::may_exist which was called 2 times, avg 36µs/call: # 2 times (26µs+46µs) by OpenBSD::PackageRepository::open at line 247, avg 36µs/call
{
53822µs my ($self, $name) = @_;
539237µs446µs return -r $self->relative_url($name);
# spent 29µs making 2 calls to OpenBSD::PackageRepository::relative_url, avg 15µs/call # spent 17µs making 2 calls to OpenBSD::PackageRepository::Local::CORE:fteread, avg 8µs/call
540}
541
5421900nsmy $local = [];
543
544sub opened
545{
546 return $local;
547}
548
549sub maxcount
550{
551 return 3;
552}
553
554sub list
555
# spent 505µs (231+274) within OpenBSD::PackageRepository::Local::list which was called: # once (231µs+274µs) by OpenBSD::PackageRepository::available at line 158
{
5561900ns my $self = shift;
55711µs my $l = [];
55815µs15µs my $dname = $self->baseurl;
# spent 5µs making 1 call to OpenBSD::PackageRepository::baseurl
559141µs131µs opendir(my $dir, $dname) or return $l;
# spent 31µs making 1 call to OpenBSD::PackageRepository::Local::CORE:open_dir
5601140µs2166µs while (my $e = readdir $dir) {
# spent 66µs making 21 calls to OpenBSD::PackageRepository::Local::CORE:readdir, avg 3µs/call
56120154µs2091µs next unless -f "$dname/$e";
# spent 91µs making 20 calls to OpenBSD::PackageRepository::Local::CORE:ftfile, avg 5µs/call
5621440µs1479µs $self->add_to_list($l, $e);
# spent 79µs making 14 calls to OpenBSD::PackageRepository::add_to_list, avg 6µs/call
563 }
56416µs1900ns close($dir);
# spent 900ns making 1 call to OpenBSD::PackageRepository::Local::CORE:close
565121µs return $l;
566}
567
568package OpenBSD::PackageRepository::Distant;
56913µsour @ISA=qw(OpenBSD::PackageRepository);
570
571sub baseurl
572
# spent 63µs within OpenBSD::PackageRepository::Distant::baseurl which was called 10 times, avg 6µs/call: # 6 times (34µs+0s) by OpenBSD::PackageRepository::relative_url at line 374, avg 6µs/call # 4 times (29µs+0s) by OpenBSD::PackageRepository::relative_url at line 371, avg 7µs/call
{
5731010µs my $self = shift;
574
5751069µs return "//$self->{host}$self->{path}";
576}
577
578sub parse_url
579
# spent 6.41ms (68µs+6.34) within OpenBSD::PackageRepository::Distant::parse_url which was called: # once (68µs+6.34ms) by OpenBSD::PackageRepository::parse_fullurl at line 98
{
5801900ns my ($class, $r, $state) = @_;
581 # same heuristics as ftp(1):
582 # find host part, rest is parsed as a local url
58319µs12µs if (my ($host, $path) = $$r =~ m/^\/\/(.*?)(\/.*)$/) {
584
5851900ns $$r = $path;
58616µs16.34ms my $o = $class->SUPER::parse_url($r, $state);
# spent 6.34ms making 1 call to OpenBSD::PackageRepositoryBase::parse_url
587141µs $o->{host} = $host;
58811µs if (defined $o->{release}) {
589 $o->can_be_empty;
590 $$r = $class->urlscheme."://$o->{host}$o->{release}:$$r";
591 }
592114µs return $o;
593 } else {
594 return undef;
595 }
596}
597
5981700nsmy $buffsize = 2 * 1024 * 1024;
599
600sub pkg_copy
601{
602 my ($self, $in, $object) = @_;
603
604 my $name = $object->{name};
605 my $dir = $object->{cache_dir};
606
607 my ($copy, $filename) = OpenBSD::Temp::permanent_file($dir, $name) or die "Can't write copy to cache";
608 chmod((0666 & ~umask), $filename);
609 $object->{tempname} = $filename;
610 my $handler = sub {
611 my ($sig) = @_;
612 unlink $filename;
613 close($in);
614 $SIG{$sig} = 'DEFAULT';
615 kill $sig, $$;
616 };
617
618 my $nonempty = 0;
619 my $error = 0;
620 {
621
622 local $SIG{'PIPE'} = $handler;
623 local $SIG{'INT'} = $handler;
624 local $SIG{'HUP'} = $handler;
625 local $SIG{'QUIT'} = $handler;
626 local $SIG{'KILL'} = $handler;
627 local $SIG{'TERM'} = $handler;
628
629 my ($buffer, $n);
630 # copy stuff over
631 do {
632 $n = sysread($in, $buffer, $buffsize);
633 if (!defined $n) {
634 $self->{state}->fatal("Error reading: #1", $!);
635 }
636 if ($n > 0) {
637 $nonempty = 1;
638 }
639 if (!$error) {
640 my $r = syswrite $copy, $buffer;
641 if (!defined $r || $r < $n) {
642 $error = 1;
643 }
644 }
645 syswrite STDOUT, $buffer;
646 } while ($n != 0);
647 close($copy);
648 }
649
650 if ($nonempty && !$error) {
651 rename $filename, "$dir/$name.tgz";
652 } else {
653 unlink $filename;
654 }
655 close($in);
656}
657
658sub open_pipe
659
# spent 454ms (11.3+442) within OpenBSD::PackageRepository::Distant::open_pipe which was called 2 times, avg 227ms/call: # 2 times (11.3ms+442ms) by OpenBSD::PackageRepository::open at line 252, avg 227ms/call
{
66022µs my ($self, $object) = @_;
661211µs2265µs $self->make_error_file($object);
# spent 265µs making 2 calls to OpenBSD::PackageRepository::make_error_file, avg 132µs/call
66223µs my $d = $ENV{'PKG_CACHE'};
66322µs if (defined $d) {
664 $object->{cache_dir} = $d;
665 if (! -d -w $d) {
666 $self->{state}->fatal("bad PKG_CACHE directory #1", $d);
667 }
668 $object->{cache_dir} = $d;
669 }
67023µs $object->{parent} = $$;
671
67222µs my ($rdfh, $wrfh);
673
674236µs pipe($rdfh, $wrfh);
67529.89ms my $pid2 = fork();
6762342µs2196µs $self->did_it_fork($pid2);
# spent 196µs making 2 calls to OpenBSD::PackageRepository::did_it_fork, avg 98µs/call
67723µs if ($pid2) {
678234µs $object->{pid2} = $pid2;
6792184µs2113µs close($wrfh);
# spent 113µs making 2 calls to OpenBSD::PackageRepository::Distant::CORE:close, avg 56µs/call
680 } else {
681 open STDERR, '>>', $object->{errors};
682 open(STDOUT, '>&', $wrfh);
683 close($rdfh);
684 close($wrfh);
685 if (defined $d) {
686 my $pid3 = open(my $in, "-|");
687 $self->did_it_fork($pid3);
688 if ($pid3) {
689 $self->dont_cleanup;
690 $self->pkg_copy($in, $object);
691 } else {
692 $self->grab_object($object);
693 }
694 } else {
695 $self->grab_object($object);
696 }
697 exit(0);
698 }
699
700252µs284µs if ($self->check_signed($object)) {
# spent 84µs making 2 calls to OpenBSD::PackageRepository::check_signed, avg 42µs/call
70129.80ms29.37ms my $pid = open(my $fh, "-|");
# spent 9.37ms making 2 calls to OpenBSD::PackageRepository::Distant::CORE:open, avg 4.68ms/call
7022267µs2427µs $self->did_it_fork($pid);
# spent 427µs making 2 calls to OpenBSD::PackageRepository::did_it_fork, avg 213µs/call
70324µs if ($pid) {
704273µs $object->{pid} = $pid;
705280µs230µs close($rdfh);
# spent 30µs making 2 calls to OpenBSD::PackageRepository::Distant::CORE:close, avg 15µs/call
706 } else {
707 open(STDIN, '<&', $rdfh) or
708 $self->{state}->fatal("Bad dup: #1", $!);
709 close($rdfh);
710 $self->signify_pipe($object);
711 }
712
7132198µs2432ms return $self->uncompress($object, $fh);
# spent 432ms making 2 calls to OpenBSD::PackageRepository::uncompress, avg 216ms/call
714 } else {
715 return $self->uncompress($object, $rdfh);
716 }
717}
718
719sub finish_and_close
720{
721 my ($self, $object) = @_;
722 if (defined $object->{cache_dir}) {
723 while (defined $object->next) {
724 }
725 }
726 $self->SUPER::finish_and_close($object);
727}
728
729package OpenBSD::PackageRepository::HTTPorFTP;
73014µsour @ISA=qw(OpenBSD::PackageRepository::Distant);
731
73211µsour %distant = ();
733
734sub drop_privileges_and_setup_env
735{
736 my $self = shift;
737 my $user = '_pkgfetch';
738 if ($< == 0) {
739 # we can't cache anything, we happen after the fork,
740 # right before exec
741 if (my (undef, undef, $uid, $gid) = getpwnam($user)) {
742 $( = $gid;
743 $) = "$gid $gid";
744 $< = $uid;
745 $> = $uid;
746 } else {
747 $self->{state}->fatal("Couldn't change identity: can't find #1 user", $user);
748 }
749 } else {
750 ($user) = getpwuid($<);
751 }
752 # create sanitized env for ftp
753 my %newenv = (
754 HOME => '/var/empty',
755 USER => $user,
756 LOGNAME => $user,
757 SHELL => '/bin/sh',
758 LC_ALL => 'C', # especially, laundry error messages
759 PATH => '/bin:/usr/bin'
760 );
761
762 # copy selected stuff;
763 for my $k (qw(
764 TERM
765 FTPMODE
766 FTPSERVER
767 FTPSERVERPORT
768 ftp_proxy
769 http_proxy
770 http_cookies
771 ALL_PROXY
772 FTP_PROXY
773 HTTPS_PROXY
774 HTTP_PROXY
775 NO_PROXY)) {
776 if (exists $ENV{$k}) {
777 $newenv{$k} = $ENV{$k};
778 }
779 }
780 # don't forget to swap!
781 %ENV = %newenv;
782}
783
784
785sub grab_object
786{
787 my ($self, $object) = @_;
788 my ($ftp, @extra) = split(/\s+/, OpenBSD::Paths->ftp);
789 $self->drop_privileges_and_setup_env;
790 exec {$ftp}
791 $ftp,
792 @extra,
793 "-o",
794 "-", $self->url($object->{name})
795 or $self->{state}->fatal("Can't run #1: #2", OpenBSD::Paths->ftp, $!);
796}
797
798sub open_read_ftp
799
# spent 1.29ms (173µs+1.12) within OpenBSD::PackageRepository::HTTPorFTP::open_read_ftp which was called: # once (173µs+1.12ms) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 911
{
80011µs my ($self, $cmd, $errors) = @_;
80111.25ms11.12ms my $child_pid = open(my $fh, '-|');
# spent 1.12ms making 1 call to OpenBSD::PackageRepository::HTTPorFTP::CORE:open
80219µs if ($child_pid) {
80318µs $self->{pipe_pid} = $child_pid;
804164µs return $fh;
805 } else {
806 open STDERR, '>>', $errors if defined $errors;
807
808 $self->drop_privileges_and_setup_env;
809 exec($cmd)
810 or $self->{state}->fatal("Can't run #1: #2", $cmd, $!);
811 }
812}
813
814sub close_read_ftp
815
# spent 130µs (21+109) within OpenBSD::PackageRepository::HTTPorFTP::close_read_ftp which was called: # once (21µs+109µs) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 922
{
81611µs my ($self, $fh) = @_;
817177µs168µs close($fh);
818166µs141µs waitpid $self->{pipe_pid}, 0;
819}
820
821sub maxcount
822
# spent 11µs within OpenBSD::PackageRepository::HTTPorFTP::maxcount which was called 6 times, avg 2µs/call: # 3 times (7µs+0s) by OpenBSD::PackageRepository::make_room at line 231, avg 2µs/call # 3 times (5µs+0s) by OpenBSD::PackageRepository::make_room at line 234, avg 2µs/call
{
823618µs return 1;
824}
825
826sub opened
827
# spent 20µs within OpenBSD::PackageRepository::HTTPorFTP::opened which was called 3 times, avg 7µs/call: # 3 times (20µs+0s) by OpenBSD::PackageRepository::make_room at line 228, avg 7µs/call
{
82834µs my $self = $_[0];
82934µs my $k = $self->{host};
83036µs if (!defined $distant{$k}) {
831 $distant{$k} = [];
832 }
833312µs return $distant{$k};
834}
835
836sub should_have
837{
838 my ($self, $pkgname) = @_;
839 if (defined $self->{lasterror} && $self->{lasterror} == 421) {
840 return (defined $self->{list}) &&
841 grep { $_ eq $pkgname } @{$self->{list}};
842 } else {
843 return 0;
844 }
845}
846
847sub try_until_success
848
# spent 464ms (39µs+464) within OpenBSD::PackageRepository::HTTPorFTP::try_until_success which was called 2 times, avg 232ms/call: # 2 times (39µs+464ms) by OpenBSD::PackageRepository::HTTPorFTP::find at line 876, avg 232ms/call
{
84922µs my ($self, $pkgname, $code) = @_;
850
85124µs for (my $retry = 5; $retry <= 160; $retry *= 2) {
85222µs undef $self->{lasterror};
853211µs2464ms my $o = &$code;
854213µs if (defined $o) {
855 return $o;
856 }
857 if (defined $self->{lasterror} &&
858 ($self->{lasterror} == 550 || $self->{lasterror} == 404)) {
859 last;
860 }
861 if ($self->should_have($pkgname)) {
862 $self->errsay("Temporary error, sleeping #1 seconds",
863 $retry);
864 sleep($retry);
865 }
866 }
867 return undef;
868}
869
870sub find
871
# spent 465ms (34µs+464) within OpenBSD::PackageRepository::HTTPorFTP::find which was called 2 times, avg 232ms/call: # 2 times (34µs+464ms) by OpenBSD::PackageRepositoryList::do_something at line 61 of OpenBSD/PackageRepositoryList.pm, avg 232ms/call
{
87222µs my ($self, $pkgname, @extra) = @_;
873
874 return $self->try_until_success($pkgname,
875
# spent 464ms (21µs+464) within OpenBSD::PackageRepository::HTTPorFTP::__ANON__[/usr/libdata/perl5/OpenBSD/PackageRepository.pm:876] which was called 2 times, avg 232ms/call: # 2 times (21µs+464ms) by OpenBSD::PackageRepository::HTTPorFTP::try_until_success at line 853, avg 232ms/call
sub {
876457µs4929ms return $self->SUPER::find($pkgname, @extra); });
# spent 464ms making 2 calls to OpenBSD::PackageRepository::HTTPorFTP::try_until_success, avg 232ms/call # spent 464ms making 2 calls to OpenBSD::PackageRepository::find, avg 232ms/call
877
878}
879
880sub grabPlist
881{
882 my ($self, $pkgname, @extra) = @_;
883
884 return $self->try_until_success($pkgname,
885 sub {
886 return $self->SUPER::grabPlist($pkgname, @extra); });
887}
888
889sub list
890
# spent 1.05s (60µs+1.05) within OpenBSD::PackageRepository::HTTPorFTP::list which was called: # once (60µs+1.05s) by OpenBSD::PackageRepository::available at line 158
{
89111µs my ($self) = @_;
89212µs if (!defined $self->{list}) {
893113µs138µs $self->make_room;
# spent 38µs making 1 call to OpenBSD::PackageRepository::make_room
894115µs1255µs my $error = OpenBSD::Temp->file;
# spent 255µs making 1 call to OpenBSD::Temp::file
8951900ns if (!defined $error) {
896 $self->{state}->fatal("#1 not writable",
897 $OpenBSD::Temp::tempbase);
898 }
89919µs11.05s $self->{list} = $self->obtain_list($error);
# spent 1.05s making 1 call to OpenBSD::PackageRepository::HTTP::obtain_list
900114µs1381µs $self->parse_problems($error);
# spent 381µs making 1 call to OpenBSD::PackageRepository::parse_problems
901 }
90215µs return $self->{list};
903}
904
905sub get_http_list
906
# spent 1.05s (224ms+823ms) within OpenBSD::PackageRepository::HTTPorFTP::get_http_list which was called: # once (224ms+823ms) by OpenBSD::PackageRepository::HTTP::obtain_list at line 937
{
9071900ns my ($self, $error) = @_;
908
90914µs123µs my $fullname = $self->url;
# spent 23µs making 1 call to OpenBSD::PackageRepositoryBase::url
91011µs my $l = [];
911130µs21.31ms my $fh = $self->open_read_ftp(OpenBSD::Paths->ftp." -o - $fullname",
# spent 1.29ms making 1 call to OpenBSD::PackageRepository::HTTPorFTP::open_read_ftp # spent 12µs making 1 call to OpenBSD::Paths::ftp
912 $error) or return;
9131318ms1318ms while(<$fh>) {
91496817.00ms chomp;
9159681494ms19362418ms for my $pkg (m/\<A\s+HREF=\"(.*?\.tgz)\"\>/gio) {
# spent 391ms making 9681 calls to OpenBSD::PackageRepository::HTTPorFTP::CORE:readline, avg 40µs/call # spent 26.9ms making 9681 calls to OpenBSD::PackageRepository::HTTPorFTP::CORE:match, avg 3µs/call
916965847.5ms96586.80ms $pkg = $1 if $pkg =~ m|^.*/(.*)$|;
# spent 6.80ms making 9658 calls to OpenBSD::PackageRepository::HTTPorFTP::CORE:match, avg 704ns/call
917 # decode uri-encoding; from URI::Escape
918965851.9ms96587.10ms $pkg =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
# spent 7.10ms making 9658 calls to OpenBSD::PackageRepository::HTTPorFTP::CORE:subst, avg 735ns/call
919965831.7ms965872.1ms $self->add_to_list($l, $pkg);
# spent 72.1ms making 9658 calls to OpenBSD::PackageRepository::add_to_list, avg 7µs/call
920 }
921 }
922124µs1130µs $self->close_read_ftp($fh);
923114µs return $l;
924}
925
926package OpenBSD::PackageRepository::HTTP;
92714µsour @ISA=qw(OpenBSD::PackageRepository::HTTPorFTP);
928
929sub urlscheme
930
# spent 43µs within OpenBSD::PackageRepository::HTTP::urlscheme which was called 11 times, avg 4µs/call: # 10 times (41µs+0s) by OpenBSD::PackageRepositoryBase::url at line 122 of OpenBSD/PackageRepository/Installed.pm, avg 4µs/call # once (2µs+0s) by OpenBSD::PackageRepositoryBase::strip_urlscheme at line 100 of OpenBSD/PackageRepository/Installed.pm
{
9311146µs return 'http';
932}
933
934sub obtain_list
935
# spent 1.05s (22µs+1.05) within OpenBSD::PackageRepository::HTTP::obtain_list which was called: # once (22µs+1.05s) by OpenBSD::PackageRepository::HTTPorFTP::list at line 899
{
93611µs my ($self, $error) = @_;
937117µs11.05s return $self->get_http_list($error);
938}
939
940package OpenBSD::PackageRepository::HTTPS;
94114µsour @ISA=qw(OpenBSD::PackageRepository::HTTP);
942
943sub urlscheme
944{
945 return 'https';
946}
947
948package OpenBSD::PackageRepository::FTP;
94915µsour @ISA=qw(OpenBSD::PackageRepository::HTTPorFTP);
950
951sub urlscheme
952{
953 return 'ftp';
954}
955
956sub _list
957{
958 my ($self, $cmd, $error) = @_;
959 my $l =[];
960 my $fh = $self->open_read_ftp($cmd, $error) or return;
961 while(<$fh>) {
962 chomp;
963 next if m/^\d\d\d\s+\S/;
964 if (m/No such file or directory|Failed to change directory/i) {
965 $self->{no_such_dir} = 1;
966 }
967 next unless m/^(?:\.\/)?(\S+\.tgz)\s*$/;
968 $self->add_to_list($l, $1);
969 }
970 $self->close_read_ftp($fh);
971 return $l;
972}
973
974sub get_ftp_list
975{
976 my ($self, $error) = @_;
977
978 my $fullname = $self->url;
979 return $self->_list("echo 'nlist'| ".OpenBSD::Paths->ftp
980 ." $fullname", $error);
981}
982
983sub obtain_list
984{
985 my ($self, $error) = @_;
986 if (defined $ENV{'ftp_proxy'} && $ENV{'ftp_proxy'} ne '') {
987 return $self->get_http_list($error);
988 } else {
989 return $self->get_ftp_list($error);
990 }
991}
992
99319µs1;
 
# spent 2µs within OpenBSD::PackageLocator::CORE:match which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by OpenBSD::PackageLocator::find at line 95 of OpenBSD/PackageLocator.pm, avg 1µs/call
sub OpenBSD::PackageLocator::CORE:match; # opcode
# spent 4µs within OpenBSD::PackageLocator::CORE:subst which was called 2 times, avg 2µs/call: # once (2µs+0s) by OpenBSD::PackageLocator::add_default at line 49 of OpenBSD/PackageLocator.pm # once (2µs+0s) by OpenBSD::PackageLocator::add_default at line 48 of OpenBSD/PackageLocator.pm
sub OpenBSD::PackageLocator::CORE:subst; # opcode
# spent 286ms (69µs+286) within OpenBSD::PackageRepository::CORE:close which was called 5 times, avg 57.3ms/call: # 3 times (14µs+0s) by OpenBSD::PackageRepository::parse_problems at line 358, avg 5µs/call # 2 times (55µs+286ms) by OpenBSD::PackageRepository::close at line 208, avg 143ms/call
sub OpenBSD::PackageRepository::CORE:close; # opcode
# spent 14.9ms within OpenBSD::PackageRepository::CORE:match which was called 9753 times, avg 2µs/call: # 9672 times (14.8ms+0s) by OpenBSD::PackageRepository::add_to_list at line 381, avg 2µs/call # 14 times (47µs+0s) by OpenBSD::PackageRepository::uncompress at line 410, avg 3µs/call # 9 times (42µs+0s) by OpenBSD::PackageRepository::parse_problems at line 298, avg 5µs/call # 9 times (30µs+0s) by OpenBSD::PackageRepository::parse_problems at line 296, avg 3µs/call # 9 times (6µs+0s) by OpenBSD::PackageRepository::parse_problems at line 297, avg 711ns/call # 8 times (8µs+0s) by OpenBSD::PackageRepository::parse at line 126, avg 1µs/call # 6 times (16µs+0s) by OpenBSD::PackageRepository::parse_problems at line 299, avg 3µs/call # 3 times (8µs+0s) by OpenBSD::PackageRepository::parse_problems at line 304, avg 3µs/call # 3 times (7µs+0s) by OpenBSD::PackageRepository::parse_problems at line 306, avg 2µs/call # 3 times (4µs+0s) by OpenBSD::PackageRepository::parse_problems at line 303, avg 1µs/call # 3 times (4µs+0s) by OpenBSD::PackageRepository::parse_problems at line 305, avg 1µs/call # 3 times (3µs+0s) by OpenBSD::PackageRepository::parse_problems at line 302, avg 867ns/call # 3 times (2µs+0s) by OpenBSD::PackageRepository::parse_problems at line 301, avg 733ns/call # 3 times (2µs+0s) by OpenBSD::PackageRepository::parse_problems at line 300, avg 733ns/call # 2 times (3µs+0s) by OpenBSD::PackageRepository::parse_problems at line 308, avg 2µs/call # 2 times (1µs+0s) by OpenBSD::PackageRepository::parse_problems at line 307, avg 600ns/call # once (700ns+0s) by OpenBSD::PackageRepository::parse at line 145
sub OpenBSD::PackageRepository::CORE:match; # opcode
# spent 91µs within OpenBSD::PackageRepository::CORE:open which was called 3 times, avg 30µs/call: # 3 times (91µs+0s) by OpenBSD::PackageRepository::parse_problems at line 284, avg 30µs/call
sub OpenBSD::PackageRepository::CORE:open; # opcode
# spent 34µs within OpenBSD::PackageRepository::CORE:readline which was called 12 times, avg 3µs/call: # 12 times (34µs+0s) by OpenBSD::PackageRepository::parse_problems at line 295, avg 3µs/call
sub OpenBSD::PackageRepository::CORE:readline; # opcode
# spent 39µs within OpenBSD::PackageRepository::CORE:regcomp which was called 6 times, avg 6µs/call: # 6 times (39µs+0s) by OpenBSD::PackageRepository::parse_problems at line 299, avg 6µs/call
sub OpenBSD::PackageRepository::CORE:regcomp; # opcode
# spent 12µs within OpenBSD::PackageRepository::CORE:subst which was called 3 times, avg 4µs/call: # 3 times (12µs+0s) by OpenBSD::PackageRepository::parse at line 118, avg 4µs/call
sub OpenBSD::PackageRepository::CORE:subst; # opcode
# spent 16µs within OpenBSD::PackageRepository::CORE:substcont which was called 2 times, avg 8µs/call: # 2 times (16µs+0s) by OpenBSD::PackageRepository::parse at line 118, avg 8µs/call
sub OpenBSD::PackageRepository::CORE:substcont; # opcode
# spent 143µs within OpenBSD::PackageRepository::CORE:unlink which was called 3 times, avg 48µs/call: # 3 times (143µs+0s) by OpenBSD::PackageRepository::parse_problems at line 360, avg 48µs/call
sub OpenBSD::PackageRepository::CORE:unlink; # opcode
# spent 1.32ms within OpenBSD::PackageRepository::CORE:waitpid which was called 2 times, avg 660µs/call: # 2 times (1.32ms+0s) by OpenBSD::PackageRepository::close at line 214, avg 660µs/call
sub OpenBSD::PackageRepository::CORE:waitpid; # opcode
# spent 143µs within OpenBSD::PackageRepository::Distant::CORE:close which was called 4 times, avg 36µs/call: # 2 times (113µs+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 679, avg 56µs/call # 2 times (30µs+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 705, avg 15µs/call
sub OpenBSD::PackageRepository::Distant::CORE:close; # opcode
# spent 2µs within OpenBSD::PackageRepository::Distant::CORE:match which was called: # once (2µs+0s) by OpenBSD::PackageRepository::Distant::parse_url at line 583
sub OpenBSD::PackageRepository::Distant::CORE:match; # opcode
# spent 9.37ms within OpenBSD::PackageRepository::Distant::CORE:open which was called 2 times, avg 4.68ms/call: # 2 times (9.37ms+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 701, avg 4.68ms/call
sub OpenBSD::PackageRepository::Distant::CORE:open; # opcode
# spent 68µs within OpenBSD::PackageRepository::HTTPorFTP::CORE:close which was called: # once (68µs+0s) by OpenBSD::PackageRepository::HTTPorFTP::close_read_ftp at line 817
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:close; # opcode
# spent 33.7ms within OpenBSD::PackageRepository::HTTPorFTP::CORE:match which was called 19339 times, avg 2µs/call: # 9681 times (26.9ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 915, avg 3µs/call # 9658 times (6.80ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 916, avg 704ns/call
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:match; # opcode
# spent 1.12ms within OpenBSD::PackageRepository::HTTPorFTP::CORE:open which was called: # once (1.12ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::open_read_ftp at line 801
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:open; # opcode
# spent 709ms within OpenBSD::PackageRepository::HTTPorFTP::CORE:readline which was called 9682 times, avg 73µs/call: # 9681 times (391ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 915, avg 40µs/call # once (318ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 913
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:readline; # opcode
# spent 7.10ms within OpenBSD::PackageRepository::HTTPorFTP::CORE:subst which was called 9658 times, avg 735ns/call: # 9658 times (7.10ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 918, avg 735ns/call
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:subst; # opcode
# spent 41µs within OpenBSD::PackageRepository::HTTPorFTP::CORE:waitpid which was called: # once (41µs+0s) by OpenBSD::PackageRepository::HTTPorFTP::close_read_ftp at line 818
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:waitpid; # opcode
# spent 900ns within OpenBSD::PackageRepository::Local::CORE:close which was called: # once (900ns+0s) by OpenBSD::PackageRepository::Local::list at line 564
sub OpenBSD::PackageRepository::Local::CORE:close; # opcode
# spent 17µs within OpenBSD::PackageRepository::Local::CORE:fteread which was called 2 times, avg 8µs/call: # 2 times (17µs+0s) by OpenBSD::PackageRepository::Local::may_exist at line 539, avg 8µs/call
sub OpenBSD::PackageRepository::Local::CORE:fteread; # opcode
# spent 91µs within OpenBSD::PackageRepository::Local::CORE:ftfile which was called 20 times, avg 5µs/call: # 20 times (91µs+0s) by OpenBSD::PackageRepository::Local::list at line 561, avg 5µs/call
sub OpenBSD::PackageRepository::Local::CORE:ftfile; # opcode
# spent 31µs within OpenBSD::PackageRepository::Local::CORE:open_dir which was called: # once (31µs+0s) by OpenBSD::PackageRepository::Local::list at line 559
sub OpenBSD::PackageRepository::Local::CORE:open_dir; # opcode
# spent 66µs within OpenBSD::PackageRepository::Local::CORE:readdir which was called 21 times, avg 3µs/call: # 21 times (66µs+0s) by OpenBSD::PackageRepository::Local::list at line 560, avg 3µs/call
sub OpenBSD::PackageRepository::Local::CORE:readdir; # opcode
# spent 1µs within OpenBSD::PackageRepository::file which was called: # once (1µs+0s) by OpenBSD::PackageRepository::parse at line 150
sub OpenBSD::PackageRepository::file; # xsub
# spent 2µs within OpenBSD::PackageRepository::http which was called: # once (2µs+0s) by OpenBSD::PackageRepository::parse at line 126
sub OpenBSD::PackageRepository::http; # xsub