← Index
NYTProf Performance Profile   « line view »
For /usr/sbin/pkg_info
  Run on Mon Aug 7 09:39:31 2017
Reported on Mon Aug 7 09:40:21 2017

Filename/usr/libdata/perl5/OpenBSD/PackageRepository.pm
StatementsExecuted 76204 statements in 2.57s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
9711211.45s1.45sOpenBSD::PackageRepository::HTTPorFTP::::CORE:readlineOpenBSD::PackageRepository::HTTPorFTP::CORE:readline (opcode)
4011319ms11.7sOpenBSD::PackageRepository::Distant::::open_pipe OpenBSD::PackageRepository::Distant::open_pipe
4011268ms268msOpenBSD::PackageRepository::Distant::::CORE:open OpenBSD::PackageRepository::Distant::CORE:open (opcode)
111224ms1.82sOpenBSD::PackageRepository::HTTPorFTP::::get_http_listOpenBSD::PackageRepository::HTTPorFTP::get_http_list
102212163.2ms79.0msOpenBSD::PackageRepository::::add_to_list OpenBSD::PackageRepository::add_to_list
193972162.4ms62.4msOpenBSD::PackageRepository::HTTPorFTP::::CORE:matchOpenBSD::PackageRepository::HTTPorFTP::CORE:match (opcode)
412139.8ms75.7msOpenBSD::PackageRepository::::parse_problems OpenBSD::PackageRepository::parse_problems
11128.8ms29.0msOpenBSD::PackageLocator::::BEGIN@24.12 OpenBSD::PackageLocator::BEGIN@24.12
1127817125.4ms25.4msOpenBSD::PackageRepository::::CORE:match OpenBSD::PackageRepository::CORE:match (opcode)
401112.9ms12.9msOpenBSD::PackageRepository::::CORE:waitpid OpenBSD::PackageRepository::CORE:waitpid (opcode)
802112.9ms12.9msOpenBSD::PackageRepository::::did_it_fork OpenBSD::PackageRepository::did_it_fork
40119.83ms11.0sOpenBSD::PackageRepository::::uncompress OpenBSD::PackageRepository::uncompress
1118.95ms15.5msOpenBSD::PackageRepository::Local::::list OpenBSD::PackageRepository::Local::list
164118.01ms8.01msOpenBSD::PackageRepository::::CORE:readline OpenBSD::PackageRepository::CORE:readline (opcode)
9687117.26ms7.26msOpenBSD::PackageRepository::HTTPorFTP::::CORE:substOpenBSD::PackageRepository::HTTPorFTP::CORE:subst (opcode)
126116.73ms8.12msOpenBSD::PackageRepository::::relative_url OpenBSD::PackageRepository::relative_url
80215.38ms5.38msOpenBSD::PackageRepository::Distant::::CORE:close OpenBSD::PackageRepository::Distant::CORE:close (opcode)
2115.33ms1.84sOpenBSD::PackageRepository::::available OpenBSD::PackageRepository::available
40115.26ms11.7sOpenBSD::PackageRepository::::open OpenBSD::PackageRepository::open
2115.19ms1.99sOpenBSD::PackageRepository::::stemlist OpenBSD::PackageRepository::stemlist
40114.90ms52.4msOpenBSD::PackageRepository::::wipe_info OpenBSD::PackageRepository::wipe_info
80114.65ms1.08sOpenBSD::PackageRepository::::close OpenBSD::PackageRepository::close
820113.24ms3.24msOpenBSD::PackageRepository::Local::::CORE:ftfile OpenBSD::PackageRepository::Local::CORE:ftfile (opcode)
40112.68ms2.68msOpenBSD::PackageRepository::::check_signed OpenBSD::PackageRepository::check_signed
41112.09ms2.09msOpenBSD::PackageRepository::::CORE:unlink OpenBSD::PackageRepository::CORE:unlink (opcode)
1112.05ms30.3msOpenBSD::PackageRepository::::BEGIN@30 OpenBSD::PackageRepository::BEGIN@30
124211.38ms1.38msOpenBSD::PackageRepository::Distant::::baseurl OpenBSD::PackageRepository::Distant::baseurl
1111.16ms1.16msOpenBSD::PackageRepository::HTTPorFTP::::CORE:openOpenBSD::PackageRepository::HTTPorFTP::CORE:open (opcode)
41211.07ms1.97msOpenBSD::PackageRepository::::make_room OpenBSD::PackageRepository::make_room
41111.02ms1.02msOpenBSD::PackageRepository::::CORE:open OpenBSD::PackageRepository::CORE:open (opcode)
12521939µs939µsOpenBSD::PackageRepository::HTTP::::urlscheme OpenBSD::PackageRepository::HTTP::urlscheme
8121844µs981msOpenBSD::PackageRepository::::CORE:close OpenBSD::PackageRepository::CORE:close (opcode)
82111801µs801µsOpenBSD::PackageRepository::Local::::CORE:readdir OpenBSD::PackageRepository::Local::CORE:readdir (opcode)
4011795µs7.12msOpenBSD::PackageRepository::::make_error_file OpenBSD::PackageRepository::make_error_file
4111710µs710µsOpenBSD::PackageRepository::HTTPorFTP::::openedOpenBSD::PackageRepository::HTTPorFTP::opened
8211339µs339µsOpenBSD::PackageRepository::::CORE:regcomp OpenBSD::PackageRepository::CORE:regcomp (opcode)
8221187µs187µsOpenBSD::PackageRepository::HTTPorFTP::::maxcountOpenBSD::PackageRepository::HTTPorFTP::maxcount
111163µs1.33msOpenBSD::PackageRepository::HTTPorFTP::::open_read_ftpOpenBSD::PackageRepository::HTTPorFTP::open_read_ftp
311110µs6.06msOpenBSD::PackageRepository::::parse OpenBSD::PackageRepository::parse
4011110µs110µsOpenBSD::PackageRepository::::may_exist OpenBSD::PackageRepository::may_exist
11191µs1.82sOpenBSD::PackageRepository::HTTPorFTP::::listOpenBSD::PackageRepository::HTTPorFTP::list
11154µs59µsOpenBSD::PackageRepository::::__ANON__[:86] OpenBSD::PackageRepository::__ANON__[:86]
11151µs5.45msOpenBSD::PackageRepository::Distant::::parse_url OpenBSD::PackageRepository::Distant::parse_url
11150µs60µsOpenBSD::PackageLocator::::BEGIN@18.10 OpenBSD::PackageLocator::BEGIN@18.10
11150µs50µsOpenBSD::PackageRepository::HTTPorFTP::::CORE:closeOpenBSD::PackageRepository::HTTPorFTP::CORE:close (opcode)
11146µs116µsOpenBSD::PackageRepository::HTTPorFTP::::close_read_ftpOpenBSD::PackageRepository::HTTPorFTP::close_read_ftp
11144µs5.60msOpenBSD::PackageRepository::::parse_fullurl OpenBSD::PackageRepository::parse_fullurl
11140µs195µsOpenBSD::PackageRepository::Local::::parse_fullurl OpenBSD::PackageRepository::Local::parse_fullurl
22139µs145µsOpenBSD::PackageRepository::::unique OpenBSD::PackageRepository::unique
11128µs28µsOpenBSD::PackageRepository::Local::::CORE:open_dir OpenBSD::PackageRepository::Local::CORE:open_dir (opcode)
11121µs1.82sOpenBSD::PackageRepository::HTTP::::obtain_list OpenBSD::PackageRepository::HTTP::obtain_list
11120µs20µsOpenBSD::PackageRepository::HTTPorFTP::::CORE:waitpidOpenBSD::PackageRepository::HTTPorFTP::CORE:waitpid (opcode)
11119µs40µsOpenBSD::PackageLocator::::BEGIN@19.11 OpenBSD::PackageLocator::BEGIN@19.11
11117µs103µsOpenBSD::PackageRepository::Local::::BEGIN@454 OpenBSD::PackageRepository::Local::BEGIN@454
11116µs75µsOpenBSD::PackageRepository::::END OpenBSD::PackageRepository::END
21114µs14µsOpenBSD::PackageRepository::::CORE:substcont OpenBSD::PackageRepository::CORE:substcont (opcode)
31114µs14µsOpenBSD::PackageRepository::::CORE:subst OpenBSD::PackageRepository::CORE:subst (opcode)
11113µs40µsOpenBSD::PackageRepository::::BEGIN@117 OpenBSD::PackageRepository::BEGIN@117
32111µs11µsOpenBSD::PackageRepository::::baseurl OpenBSD::PackageRepository::baseurl
1119µs77µsOpenBSD::PackageRepository::::BEGIN@32 OpenBSD::PackageRepository::BEGIN@32
1118µs13µsOpenBSD::PackageRepository::Local::::pkg_db OpenBSD::PackageRepository::Local::pkg_db
1118µs8µsOpenBSD::PackageRepository::Local::::BEGIN@471 OpenBSD::PackageRepository::Local::BEGIN@471
1117µs7µsOpenBSD::PackageRepository::::BEGIN@31 OpenBSD::PackageRepository::BEGIN@31
1116µs6µsOpenBSD::PackageRepository::::BEGIN@33 OpenBSD::PackageRepository::BEGIN@33
3216µs6µsOpenBSD::PackageRepository::Local::::urlscheme OpenBSD::PackageRepository::Local::urlscheme
1115µs5µsOpenBSD::PackageRepository::::can_be_empty OpenBSD::PackageRepository::can_be_empty
2114µs4µsOpenBSD::PackageRepository::::cleanup OpenBSD::PackageRepository::cleanup
1112µs2µsOpenBSD::PackageRepository::Distant::::CORE:match OpenBSD::PackageRepository::Distant::CORE:match (opcode)
1111µs1µ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__[:876]OpenBSD::PackageRepository::HTTPorFTP::__ANON__[:876]
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::::findOpenBSD::PackageRepository::HTTPorFTP::find
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::HTTPorFTP::::try_until_successOpenBSD::PackageRepository::HTTPorFTP::try_until_success
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::::may_exist OpenBSD::PackageRepository::Local::may_exist
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::::find OpenBSD::PackageRepository::find
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.146 2017/08/04 11:53:03 sthen 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
18274µs270µs
# spent 60µs (50+10) within OpenBSD::PackageLocator::BEGIN@18.10 which was called: # once (50µs+10µs) by OpenBSD::PackageLocator::BEGIN@24 at line 18
use strict;
# spent 60µs making 1 call to OpenBSD::PackageLocator::BEGIN@18.10 # spent 10µs making 1 call to strict::import
19246µs262µs
# spent 40µs (19+22) within OpenBSD::PackageLocator::BEGIN@19.11 which was called: # once (19µs+22µs) by OpenBSD::PackageLocator::BEGIN@24 at line 19
use warnings;
# spent 40µs making 1 call to OpenBSD::PackageLocator::BEGIN@19.11 # spent 22µ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
242369µs129.0ms
# spent 29.0ms (28.8+263µs) within OpenBSD::PackageLocator::BEGIN@24.12 which was called: # once (28.8ms+263µs) by OpenBSD::PackageLocator::BEGIN@24 at line 24
use OpenBSD::PackageRepository::Installed;
# spent 29.0ms making 1 call to OpenBSD::PackageLocator::BEGIN@24.12
2512µs$OpenBSD::PackageRepository::Installed::ISA = qw(OpenBSD::PackageRepository);
26
27package OpenBSD::PackageRepository;
2818µsour @ISA=(qw(OpenBSD::PackageRepositoryBase));
29
302231µs130.3ms
# spent 30.3ms (2.05+28.3) within OpenBSD::PackageRepository::BEGIN@30 which was called: # once (2.05ms+28.3ms) by OpenBSD::PackageLocator::BEGIN@24 at line 30
use OpenBSD::PackageLocation;
# spent 30.3ms making 1 call to OpenBSD::PackageRepository::BEGIN@30
31224µs17µs
# spent 7µs within OpenBSD::PackageRepository::BEGIN@31 which was called: # once (7µs+0s) by OpenBSD::PackageLocator::BEGIN@24 at line 31
use OpenBSD::Paths;
# spent 7µs making 1 call to OpenBSD::PackageRepository::BEGIN@31
32228µs2146µs
# spent 77µs (9+68) within OpenBSD::PackageRepository::BEGIN@32 which was called: # once (9µs+68µs) by OpenBSD::PackageLocator::BEGIN@24 at line 32
use OpenBSD::Error;
# spent 77µs making 1 call to OpenBSD::PackageRepository::BEGIN@32 # spent 68µs making 1 call to Exporter::import
332430µs16µs
# spent 6µs within OpenBSD::PackageRepository::BEGIN@33 which was called: # once (6µs+0s) by OpenBSD::PackageLocator::BEGIN@24 at line 33
use OpenBSD::Temp;
# spent 6µs making 1 call to OpenBSD::PackageRepository::BEGIN@33
34
35sub make_error_file
36
# spent 7.12ms (795µs+6.33) within OpenBSD::PackageRepository::make_error_file which was called 40 times, avg 178µs/call: # 40 times (795µs+6.33ms) by OpenBSD::PackageRepository::Distant::open_pipe at line 661, avg 178µs/call
{
374051µs my ($self, $object) = @_;
3840241µs406.33ms $object->{errors} = OpenBSD::Temp->file;
# spent 6.33ms making 40 calls to OpenBSD::Temp::file, avg 158µs/call
394082.1ms if (!defined $object->{errors}) {
40 $self->{state}->fatal("#1 not writable",
41 $OpenBSD::Temp::tempbase);
42 }
43}
44
45sub baseurl
46
# spent 11µs within OpenBSD::PackageRepository::baseurl which was called 3 times, avg 4µs/call: # 2 times (6µs+0s) by OpenBSD::PackageRepository::relative_url at line 374, avg 3µs/call # once (5µs+0s) by OpenBSD::PackageRepository::Local::list at line 558
{
4732µs my $self = shift;
48
49311µ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 5µs within OpenBSD::PackageRepository::can_be_empty which was called: # once (5µ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 145µs (39+106) within OpenBSD::PackageRepository::unique which was called 2 times, avg 73µs/call: # once (23µs+60µs) by OpenBSD::PackageRepository::parse_fullurl at line 98 # once (16µs+46µs) by OpenBSD::PackageRepository::Local::parse_fullurl at line 489
{
7322µs my ($class, $o) = @_;
7422µs return $o unless defined $o;
75215µs271µs if (defined $cache->{$o->url}) {
# spent 71µs making 2 calls to OpenBSD::PackageRepositoryBase::url, avg 36µs/call
76 return $cache->{$o->url};
77 }
7826µs235µs $cache->{$o->url} = $o;
# spent 35µs making 2 calls to OpenBSD::PackageRepositoryBase::url, avg 17µs/call
7928µs return $o;
80}
81
82
# spent 59µs (54+4) within OpenBSD::PackageRepository::__ANON__[/usr/libdata/perl5/OpenBSD/PackageRepository.pm:86] which was called: # once (54µs+4µs) by OpenBSD::PackageRepository::END at line 88
my $cleanup = sub {
83119µs for my $repo (values %$cache) {
84236µs24µs $repo->cleanup;
# spent 4µs making 2 calls to OpenBSD::PackageRepository::cleanup, avg 2µs/call
85 }
8613µs};
87
# spent 75µs (16+59) within OpenBSD::PackageRepository::END which was called: # once (16µs+59µs) by main::RUNTIME at line 0 of /usr/sbin/pkg_info
END {
88114µs159µ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 5.60ms (44µs+5.55) within OpenBSD::PackageRepository::parse_fullurl which was called: # once (44µs+5.55ms) by OpenBSD::PackageRepository::parse at line 126
{
9511µs my ($class, $r, $state) = @_;
96
9715µs120µs $class->strip_urlscheme($r) or return undef;
# spent 20µs making 1 call to OpenBSD::PackageRepositoryBase::strip_urlscheme
98135µs25.53ms return $class->unique($class->parse_url($r, $state));
# spent 5.45ms making 1 call to OpenBSD::PackageRepository::Distant::parse_url # spent 83µ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 6.06ms (110µs+5.95) within OpenBSD::PackageRepository::parse which was called 3 times, avg 2.02ms/call: # 3 times (110µs+5.95ms) by OpenBSD::PackageLocator::add_default at line 50 of OpenBSD/PackageLocator.pm, avg 2.02ms/call
{
11433µs my ($class, $r, $state) = @_;
115
116 {
11752.47ms266µs
# spent 40µs (13+26) within OpenBSD::PackageRepository::BEGIN@117 which was called: # once (13µs+26µs) by OpenBSD::PackageLocator::BEGIN@24 at line 117
no warnings qw(uninitialized); # in case installpath is empty
# spent 40µs making 1 call to OpenBSD::PackageRepository::BEGIN@117 # spent 26µs making 1 call to warnings::unimport
118364µs6150µs $$r =~ s/^installpath(\:|$)/$state->installpath.$1/e;
# spent 121µs making 1 call to OpenBSD::Auto::__ANON__[OpenBSD/Error.pm:28] # spent 14µs making 2 calls to OpenBSD::PackageRepository::CORE:substcont, avg 7µs/call # spent 14µs making 3 calls to OpenBSD::PackageRepository::CORE:subst, avg 5µs/call
119 }
120
12135µs my $u = $$r;
12236µs return undef if $u eq '';
123
124
125
126252µs105.61ms if ($u =~ m/^ftp\:/io) {
# spent 5.60ms making 1 call to OpenBSD::PackageRepository::parse_fullurl # spent 10µs making 8 calls to OpenBSD::PackageRepository::CORE:match, avg 1µs/call # spent 1µ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µs11µs if ($$r =~ m/^([a-z0-9][a-z0-9.]+\.[a-z0-9.]+)(\:|$)/
# spent 1µs 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 }
150113µs2196µs return $class->file->parse_fullurl($r, $state);
# spent 195µ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.84s (5.33ms+1.84) within OpenBSD::PackageRepository::available which was called 2 times, avg 922ms/call: # 2 times (5.33ms+1.84s) by OpenBSD::PackageRepository::stemlist at line 166, avg 922ms/call
{
15622µs my $self = shift;
157
15825.33ms21.84s return @{$self->list};
# spent 1.82s making 1 call to OpenBSD::PackageRepository::HTTPorFTP::list # spent 15.5ms making 1 call to OpenBSD::PackageRepository::Local::list
159}
160
161sub stemlist
162
# spent 1.99s (5.19ms+1.99) within OpenBSD::PackageRepository::stemlist which was called 2 times, avg 996ms/call: # 2 times (5.19ms+1.99s) by OpenBSD::Search::PartialStem::match at line 166 of OpenBSD/Search.pm, avg 996ms/call
{
16322µs my $self = shift;
16424µs if (!defined $self->{stemlist}) {
16522µs require OpenBSD::PackageName;
16624.95ms21.84s my @l = $self->available;
# spent 1.84s making 2 calls to OpenBSD::PackageRepository::available, avg 922ms/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 }
1712484µs2143ms $self->{stemlist} = OpenBSD::PackageName::avail2stems(@l);
# spent 143ms making 2 calls to OpenBSD::PackageName::avail2stems, avg 71.6ms/call
172 }
173211µs return $self->{stemlist};
174}
175
176sub wipe_info
177
# spent 52.4ms (4.90+47.5) within OpenBSD::PackageRepository::wipe_info which was called 40 times, avg 1.31ms/call: # 40 times (4.90ms+47.5ms) by OpenBSD::PackageLocation::wipe_info at line 209 of OpenBSD/PackageLocation.pm, avg 1.31ms/call
{
1784051µs my ($self, $pkg) = @_;
179
18040211µs require File::Path;
181
18240201µs my $dir = $pkg->{dir};
18340232µs if (defined $dir) {
18440791µs4039.2ms OpenBSD::Error->rmtree($dir);
# spent 39.2ms making 40 calls to OpenBSD::Error::rmtree, avg 981µs/call
18540260µs40230µs OpenBSD::Temp->reclaim($dir);
# spent 230µs making 40 calls to OpenBSD::Temp::reclaim, avg 6µs/call
18640271µs delete $pkg->{dir};
187 }
188}
189
190# by default, all objects may exist
191sub may_exist
192
# spent 110µs within OpenBSD::PackageRepository::may_exist which was called 40 times, avg 3µs/call: # 40 times (110µs+0s) by OpenBSD::PackageRepository::open at line 247, avg 3µs/call
{
19340166µ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 1.08s (4.65ms+1.07) within OpenBSD::PackageRepository::close which was called 80 times, avg 13.5ms/call: # 80 times (4.65ms+1.07s) by OpenBSD::PackageRepositoryBase::close_now at line 134 of OpenBSD/PackageRepository/Installed.pm, avg 13.5ms/call
{
2078095µs my ($self, $object, $hint) = @_;
20880681µs801.96s close($object->{fh}) if defined $object->{fh};
# spent 980ms making 40 calls to OpenBSD::PackageRepository::CORE:close, avg 24.5ms/call # spent 980ms making 40 calls to IO::Uncompress::Base::close, avg 24.5ms/call
20980177µs if (defined $object->{pid2}) {
210 local $SIG{ALRM} = sub {
211 kill HUP => $object->{pid2};
212401.86ms };
21340163µs alarm(30);
2144013.2ms4012.9ms waitpid($object->{pid2}, 0);
# spent 12.9ms making 40 calls to OpenBSD::PackageRepository::CORE:waitpid, avg 323µs/call
21540517µs alarm(0);
216 }
217 $self->parse_problems($object->{errors}, $hint, $object)
21880529µs4075.0ms if defined $object->{errors};
# spent 75.0ms making 40 calls to OpenBSD::PackageRepository::parse_problems, avg 1.88ms/call
21980127µs undef $object->{errors};
22080802µs806.33ms $object->deref;
# spent 6.33ms making 80 calls to OpenBSD::PackageLocation::deref, avg 79µs/call
221}
222
223sub make_room
224
# spent 1.97ms (1.07+897µs) within OpenBSD::PackageRepository::make_room which was called 41 times, avg 48µs/call: # 40 times (1.04ms+886µs) by OpenBSD::PackageRepository::open at line 250, avg 48µs/call # once (27µs+11µs) by OpenBSD::PackageRepository::HTTPorFTP::list at line 893
{
2254141µs my $self = shift;
226
227 # kill old files if too many
22841357µs41710µs my $already = $self->opened;
# spent 710µs making 41 calls to OpenBSD::PackageRepository::HTTPorFTP::opened, avg 17µs/call
2294182µs if (defined $already) {
230 # gc old objects
23141302µs41113µs if (@$already >= $self->maxcount) {
# spent 113µs making 41 calls to OpenBSD::PackageRepository::HTTPorFTP::maxcount, avg 3µs/call
232 @$already = grep { defined $_->{fh} } @$already;
233 }
23441182µs4174µs while (@$already >= $self->maxcount) {
# spent 74µs making 41 calls to OpenBSD::PackageRepository::HTTPorFTP::maxcount, avg 2µs/call
235 my $o = shift @$already;
236 $self->close_now($o);
237 }
238 }
23941153µs return $already;
240}
241
242# open method that tracks opened files per-host.
243sub open
244
# spent 11.7s (5.26ms+11.7) within OpenBSD::PackageRepository::open which was called 40 times, avg 292ms/call: # 40 times (5.26ms+11.7s) by OpenBSD::PackageLocation::_opened at line 79 of OpenBSD/PackageLocation.pm, avg 292ms/call
{
2454044µs my ($self, $object) = @_;
246
24740201µs40110µs return unless $self->may_exist($object->{name});
# spent 110µs making 40 calls to OpenBSD::PackageRepository::may_exist, avg 3µs/call
248
249 # kill old files if too many
25040170µs401.93ms my $already = $self->make_room;
# spent 1.93ms making 40 calls to OpenBSD::PackageRepository::make_room, avg 48µs/call
25140554µs local $SIG{'PIPE'} = 'DEFAULT';
25240501µs4011.7s my $fh = $self->open_pipe($object);
# spent 11.7s making 40 calls to OpenBSD::PackageRepository::Distant::open_pipe, avg 292ms/call
2534040µs if (!defined $fh) {
254 return;
255 }
25640914µs $object->{fh} = $fh;
25740315µs if (defined $already) {
258 push @$already, $object;
259 }
260402.23ms return $fh;
261}
262
263sub find
264{
265 my ($repository, $name) = @_;
266 my $self = $repository->new_location($name);
267
268 if ($self->contents) {
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 75.7ms (39.8+35.9) within OpenBSD::PackageRepository::parse_problems which was called 41 times, avg 1.85ms/call: # 40 times (39.5ms+35.5ms) by OpenBSD::PackageRepository::close at line 218, avg 1.88ms/call # once (245µs+405µs) by OpenBSD::PackageRepository::HTTPorFTP::list at line 900
{
28341127µs my ($self, $filename, $hint, $object) = @_;
284411.42ms411.02ms CORE::open(my $fh, '<', $filename) or return;
# spent 1.02ms making 41 calls to OpenBSD::PackageRepository::CORE:open, avg 25µs/call
285
28641352µs411.66ms my $baseurl = $self->url;
# spent 1.66ms making 41 calls to OpenBSD::PackageRepositoryBase::url, avg 40µs/call
2874143µs my $url = $baseurl;
28841239µs406.76ms if (defined $object) {
# spent 6.76ms making 40 calls to OpenBSD::PackageLocation::url, avg 169µs/call
289 $url = $object->url;
290 }
2914146µs my $notyet = 1;
2924135µs my $broken = 0;
2934136µs my $signify_error = 0;
2944163µs $self->{last_error} = 0;
295418.65ms1648.01ms while(<$fh>) {
# spent 8.01ms making 164 calls to OpenBSD::PackageRepository::CORE:readline, avg 49µs/call
2961231.11ms123572µs next if m/^(?:200|220|221|226|229|230|227|250|331|500|150)[\s\-]/o;
# spent 572µs making 123 calls to OpenBSD::PackageRepository::CORE:match, avg 5µs/call
297123472µs123110µs next if m/^EPSV command not understood/o;
# spent 110µs making 123 calls to OpenBSD::PackageRepository::CORE:match, avg 890ns/call
2981231.63ms1231.22ms next if m/^Trying [\da-f\.\:]+\.\.\./o;
# spent 1.22ms making 123 calls to OpenBSD::PackageRepository::CORE:match, avg 10µs/call
2998223.6ms1641.35ms next if m/^Requesting \Q$baseurl\E/;
# spent 1.01ms making 82 calls to OpenBSD::PackageRepository::CORE:match, avg 12µs/call # spent 339µs making 82 calls to OpenBSD::PackageRepository::CORE:regcomp, avg 4µs/call
30041304µs4138µs next if m/^Remote system type is\s+/o;
# spent 38µs making 41 calls to OpenBSD::PackageRepository::CORE:match, avg 937ns/call
30141187µs4142µs next if m/^Connected to\s+/o;
# spent 42µs making 41 calls to OpenBSD::PackageRepository::CORE:match, avg 1µs/call
302415.55ms4142µs next if m/^remote\:\s+/o;
# spent 42µs making 41 calls to OpenBSD::PackageRepository::CORE:match, avg 1µs/call
303415.80ms4140µs next if m/^Using binary mode to transfer files/o;
# spent 40µs making 41 calls to OpenBSD::PackageRepository::CORE:match, avg 971ns/call
30441375µs4143µs next if m/^Retrieving\s+/o;
# spent 43µs making 41 calls to OpenBSD::PackageRepository::CORE:match, avg 1µs/call
305414.40ms414.27ms next if m/^Success?fully retrieved file/o;
# spent 4.27ms making 41 calls to OpenBSD::PackageRepository::CORE:match, avg 104µs/call
30641385µs41238µs next if m/^\d+\s+bytes\s+received\s+in/o;
# spent 238µs making 41 calls to OpenBSD::PackageRepository::CORE:match, avg 6µs/call
3071572µs1511µs next if m/^ftp: connect to address.*: No route to host/o;
# spent 11µs making 15 calls to OpenBSD::PackageRepository::CORE:match, avg 727ns/call
3081586µs1532µs if (m/^ftp: Writing -: Broken pipe/o) {
# spent 32µs making 15 calls to OpenBSD::PackageRepository::CORE:match, avg 2µs/call
3091515µs $broken = 1;
3101528µ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 }
3534148µs if ($broken) {
354 unless ($signify_error || defined $hint && $hint == 0) {
355 $self->{state}->errprint('#1', "ftp: Broken pipe");
356 }
357 }
35841464µs41300µs CORE::close($fh);
# spent 300µs making 41 calls to OpenBSD::PackageRepository::CORE:close, avg 7µs/call
35941837µs418.06ms OpenBSD::Temp->reclaim($filename);
# spent 8.06ms making 41 calls to OpenBSD::Temp::reclaim, avg 196µs/call
360412.71ms412.09ms unlink $filename;
# spent 2.09ms making 41 calls to OpenBSD::PackageRepository::CORE:unlink, avg 51µs/call
361}
362
363sub cleanup
364212µs
# spent 4µs within OpenBSD::PackageRepository::cleanup which was called 2 times, avg 2µs/call: # 2 times (4µs+0s) by OpenBSD::PackageRepository::__ANON__[/usr/libdata/perl5/OpenBSD/PackageRepository.pm:86] at line 84, avg 2µs/call
{
365 # nothing to do
366}
367
368sub relative_url
369
# spent 8.12ms (6.73+1.38) within OpenBSD::PackageRepository::relative_url which was called 126 times, avg 64µs/call: # 126 times (6.73ms+1.38ms) by OpenBSD::PackageRepositoryBase::url at line 122 of OpenBSD/PackageRepository/Installed.pm, avg 64µs/call
{
370126138µs my ($self, $name) = @_;
3711261.22ms801.08ms if (defined $name) {
# spent 1.08ms making 80 calls to OpenBSD::PackageRepository::Distant::baseurl, avg 13µs/call
372 return $self->baseurl.$name.".tgz";
373 } else {
37446381µs46307µs return $self->baseurl;
# spent 302µs making 44 calls to OpenBSD::PackageRepository::Distant::baseurl, avg 7µs/call # spent 6µs making 2 calls to OpenBSD::PackageRepository::baseurl, avg 3µs/call
375 }
376}
377
378sub add_to_list
379
# spent 79.0ms (63.2+15.8) within OpenBSD::PackageRepository::add_to_list which was called 10221 times, avg 8µs/call: # 9687 times (61.1ms+15.4ms) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 919, avg 8µs/call # 534 times (2.11ms+362µs) by OpenBSD::PackageRepository::Local::list at line 562, avg 5µs/call
{
380102218.28ms my ($self, $list, $filename) = @_;
3811022184.9ms1022115.8ms if ($filename =~ m/^(.*\-\d.*)\.tgz$/o) {
# spent 15.8ms making 10221 calls to OpenBSD::PackageRepository::CORE:match, avg 2µs/call
382 push(@$list, $1);
383 }
384}
385
386sub did_it_fork
387
# spent 12.9ms within OpenBSD::PackageRepository::did_it_fork which was called 80 times, avg 161µs/call: # 40 times (6.71ms+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 676, avg 168µs/call # 40 times (6.18ms+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 702, avg 154µs/call
{
38880873µs my ($self, $pid) = @_;
38980111µs if (!defined $pid) {
390 $self->{state}->fatal("Cannot fork: #1", $!);
391 }
392801.70ms if ($pid == 0) {
393 delete $SIG{'WINCH'};
394 delete $SIG{'CONT'};
395 delete $SIG{'INFO'};
396 }
397}
398
399sub uncompress
400
# spent 11.0s (9.83ms+11.0) within OpenBSD::PackageRepository::uncompress which was called 40 times, avg 276ms/call: # 40 times (9.83ms+11.0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 713, avg 276ms/call
{
4014066µs my $self = shift;
4024042µs my $object = shift;
40340896µs require IO::Uncompress::Gunzip;
404406.00ms4011.0s my $fh = IO::Uncompress::Gunzip->new(@_, MultiStream => 1);
# spent 11.0s making 40 calls to IO::Uncompress::Gunzip::new, avg 275ms/call
4054058µs my $result = "";
40640154µs if ($object->{is_signed}) {
40740173µs40197µs my $h = $fh->getHeaderInfo;
# spent 197µs making 40 calls to IO::Uncompress::Base::getHeaderInfo, avg 5µs/call
4084084µs if ($h) {
40940462µs for my $line (split /\n/, $h->{Comment}) {
4101603.90ms2801.97ms if ($line =~ m/^key=.*\/(.*)\.sec$/) {
# spent 1.97ms making 280 calls to OpenBSD::PackageRepository::CORE:match, avg 7µ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 }
42140252µs $object->{extra_content} = $result;
42240220µ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 2.68ms within OpenBSD::PackageRepository::check_signed which was called 40 times, avg 67µs/call: # 40 times (2.68ms+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 700, avg 67µs/call
{
44040337µs my ($self, $object) = @_;
4414086µs if ($object->{repository}{trusted}) {
442 return 0;
443 }
44440109µs if ($self->{state}{signature_style} eq 'new') {
44540711µs $object->{is_signed} = 1;
446401.26ms return 1;
447 } else {
448 return 0;
449 }
450}
451
452package OpenBSD::PackageRepository::Local;
45314µsour @ISA=qw(OpenBSD::PackageRepository);
454280µs2189µs
# spent 103µs (17+86) within OpenBSD::PackageRepository::Local::BEGIN@454 which was called: # once (17µs+86µs) by OpenBSD::PackageLocator::BEGIN@24 at line 454
use OpenBSD::Error;
# spent 103µs making 1 call to OpenBSD::PackageRepository::Local::BEGIN@454 # spent 86µs making 1 call to Exporter::import
455
456sub is_local_file
457{
458 return 1;
459}
460
461sub urlscheme
462
# spent 6µ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 13µs (8+5) within OpenBSD::PackageRepository::Local::pkg_db which was called: # once (8µs+5µs) by OpenBSD::PackageRepository::Local::parse_fullurl at line 483
{
47011µs if (!defined $pkg_db) {
47122.91ms18µs
# spent 8µs within OpenBSD::PackageRepository::Local::BEGIN@471 which was called: # once (8µs+0s) by OpenBSD::PackageLocator::BEGIN@24 at line 471
use OpenBSD::Paths;
# spent 8µs making 1 call to OpenBSD::PackageRepository::Local::BEGIN@471
472110µs15µs $pkg_db = $ENV{"PKG_DBDIR"} || OpenBSD::Paths->pkgdb;
# spent 5µs making 1 call to OpenBSD::Paths::pkgdb
473 }
47414µs return $pkg_db;
475}
476
477sub parse_fullurl
478
# spent 195µs (40+154) within OpenBSD::PackageRepository::Local::parse_fullurl which was called: # once (40µs+154µs) by OpenBSD::PackageRepository::parse at line 150
{
47911µs my ($class, $r, $state) = @_;
480
48117µs140µs my $ok = $class->strip_urlscheme($r);
# spent 40µs making 1 call to OpenBSD::PackageRepositoryBase::strip_urlscheme
48215µs134µs my $o = $class->parse_url($r, $state);
# spent 34µs making 1 call to OpenBSD::PackageRepositoryBase::parse_url
48317µs113µs if (!$ok && $o->{path} eq $class->pkg_db."/") {
# spent 13µs making 1 call to OpenBSD::PackageRepository::Local::pkg_db
484 return $class->installed->new(0, $state);
485 } else {
48615µs15µs if ($o->{path} eq './') {
# spent 5µs making 1 call to OpenBSD::PackageRepository::can_be_empty
487 $o->can_be_empty;
488 }
48918µs163µs return $class->unique($o);
# spent 63µ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{
538 my ($self, $name) = @_;
539 return -r $self->relative_url($name);
540}
541
54211µsmy $local = [];
543
544sub opened
545{
546 return $local;
547}
548
549sub maxcount
550{
551 return 3;
552}
553
554sub list
555
# spent 15.5ms (8.95+6.55) within OpenBSD::PackageRepository::Local::list which was called: # once (8.95ms+6.55ms) by OpenBSD::PackageRepository::available at line 158
{
5561800ns my $self = shift;
55711µs my $l = [];
55815µs15µs my $dname = $self->baseurl;
# spent 5µs making 1 call to OpenBSD::PackageRepository::baseurl
559139µs128µs opendir(my $dir, $dname) or return $l;
# spent 28µs making 1 call to OpenBSD::PackageRepository::Local::CORE:open_dir
56015.80ms821801µs while (my $e = readdir $dir) {
# spent 801µs making 821 calls to OpenBSD::PackageRepository::Local::CORE:readdir, avg 976ns/call
5618205.48ms8203.24ms next unless -f "$dname/$e";
# spent 3.24ms making 820 calls to OpenBSD::PackageRepository::Local::CORE:ftfile, avg 4µs/call
5625341.24ms5342.47ms $self->add_to_list($l, $e);
# spent 2.47ms making 534 calls to OpenBSD::PackageRepository::add_to_list, avg 5µs/call
563 }
564125µs1900ns close($dir);
# spent 900ns making 1 call to OpenBSD::PackageRepository::Local::CORE:close
565138µs return $l;
566}
567
568package OpenBSD::PackageRepository::Distant;
56913µsour @ISA=qw(OpenBSD::PackageRepository);
570
571sub baseurl
572
# spent 1.38ms within OpenBSD::PackageRepository::Distant::baseurl which was called 124 times, avg 11µs/call: # 80 times (1.08ms+0s) by OpenBSD::PackageRepository::relative_url at line 371, avg 13µs/call # 44 times (302µs+0s) by OpenBSD::PackageRepository::relative_url at line 374, avg 7µs/call
{
573124131µs my $self = shift;
574
5751246.34ms return "//$self->{host}$self->{path}";
576}
577
578sub parse_url
579
# spent 5.45ms (51µs+5.40) within OpenBSD::PackageRepository::Distant::parse_url which was called: # once (51µs+5.40ms) 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
58318µs12µs if (my ($host, $path) = $$r =~ m/^\/\/(.*?)(\/.*)$/) {
584
58511µs $$r = $path;
58616µs15.40ms my $o = $class->SUPER::parse_url($r, $state);
# spent 5.40ms making 1 call to OpenBSD::PackageRepositoryBase::parse_url
587123µ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 }
592115µs return $o;
593 } else {
594 return undef;
595 }
596}
597
5981600nsmy $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 11.7s (319ms+11.3) within OpenBSD::PackageRepository::Distant::open_pipe which was called 40 times, avg 292ms/call: # 40 times (319ms+11.3s) by OpenBSD::PackageRepository::open at line 252, avg 292ms/call
{
6604043µs my ($self, $object) = @_;
66140487µs407.12ms $self->make_error_file($object);
# spent 7.12ms making 40 calls to OpenBSD::PackageRepository::make_error_file, avg 178µs/call
6624097µs my $d = $ENV{'PKG_CACHE'};
6634042µ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 }
67040273µs $object->{parent} = $$;
671
6724037µs my ($rdfh, $wrfh);
673
674401.03ms pipe($rdfh, $wrfh);
67540216ms my $pid2 = fork();
676407.14ms406.71ms $self->did_it_fork($pid2);
# spent 6.71ms making 40 calls to OpenBSD::PackageRepository::did_it_fork, avg 168µs/call
6774099µs if ($pid2) {
678401.75ms $object->{pid2} = $pid2;
679403.60ms403.30ms close($wrfh);
# spent 3.30ms making 40 calls to OpenBSD::PackageRepository::Distant::CORE:close, avg 83µ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
700401.11ms402.68ms if ($self->check_signed($object)) {
# spent 2.68ms making 40 calls to OpenBSD::PackageRepository::check_signed, avg 67µs/call
70140276ms40268ms my $pid = open(my $fh, "-|");
# spent 268ms making 40 calls to OpenBSD::PackageRepository::Distant::CORE:open, avg 6.71ms/call
702406.26ms406.18ms $self->did_it_fork($pid);
# spent 6.18ms making 40 calls to OpenBSD::PackageRepository::did_it_fork, avg 154µs/call
7034088µs if ($pid) {
704404.08ms $object->{pid} = $pid;
705402.33ms402.08ms close($rdfh);
# spent 2.08ms making 40 calls to OpenBSD::PackageRepository::Distant::CORE:close, avg 52µ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
713402.95ms4011.0s return $self->uncompress($object, $fh);
# spent 11.0s making 40 calls to OpenBSD::PackageRepository::uncompress, avg 276ms/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.33ms (163µs+1.16) within OpenBSD::PackageRepository::HTTPorFTP::open_read_ftp which was called: # once (163µs+1.16ms) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 911
{
80011µs my ($self, $cmd, $errors) = @_;
80111.30ms11.16ms my $child_pid = open(my $fh, '-|');
# spent 1.16ms making 1 call to OpenBSD::PackageRepository::HTTPorFTP::CORE:open
80216µs if ($child_pid) {
80314µs $self->{pipe_pid} = $child_pid;
804144µ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 116µs (46+70) within OpenBSD::PackageRepository::HTTPorFTP::close_read_ftp which was called: # once (46µs+70µs) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 922
{
81611µs my ($self, $fh) = @_;
817164µs150µs close($fh);
818154µs120µs waitpid $self->{pipe_pid}, 0;
819}
820
821sub maxcount
822
# spent 187µs within OpenBSD::PackageRepository::HTTPorFTP::maxcount which was called 82 times, avg 2µs/call: # 41 times (113µs+0s) by OpenBSD::PackageRepository::make_room at line 231, avg 3µs/call # 41 times (74µs+0s) by OpenBSD::PackageRepository::make_room at line 234, avg 2µs/call
{
82382291µs return 1;
824}
825
826sub opened
827
# spent 710µs within OpenBSD::PackageRepository::HTTPorFTP::opened which was called 41 times, avg 17µs/call: # 41 times (710µs+0s) by OpenBSD::PackageRepository::make_room at line 228, avg 17µs/call
{
8284149µs my $self = $_[0];
82941266µs my $k = $self->{host};
8304185µs if (!defined $distant{$k}) {
831 $distant{$k} = [];
832 }
83341195µ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{
849 my ($self, $pkgname, $code) = @_;
850
851 for (my $retry = 5; $retry <= 160; $retry *= 2) {
852 undef $self->{lasterror};
853 my $o = &$code;
854 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{
872 my ($self, $pkgname, @extra) = @_;
873
874 return $self->try_until_success($pkgname,
875 sub {
876 return $self->SUPER::find($pkgname, @extra); });
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.82s (91µs+1.82) within OpenBSD::PackageRepository::HTTPorFTP::list which was called: # once (91µs+1.82s) by OpenBSD::PackageRepository::available at line 158
{
89111µs my ($self) = @_;
89212µs if (!defined $self->{list}) {
893112µs139µs $self->make_room;
# spent 39µs making 1 call to OpenBSD::PackageRepository::make_room
894116µs1322µs my $error = OpenBSD::Temp->file;
# spent 322µs making 1 call to OpenBSD::Temp::file
8951800ns if (!defined $error) {
896 $self->{state}->fatal("#1 not writable",
897 $OpenBSD::Temp::tempbase);
898 }
899111µs11.82s $self->{list} = $self->obtain_list($error);
# spent 1.82s making 1 call to OpenBSD::PackageRepository::HTTP::obtain_list
900118µs1650µs $self->parse_problems($error);
# spent 650µs making 1 call to OpenBSD::PackageRepository::parse_problems
901 }
902117µs return $self->{list};
903}
904
905sub get_http_list
906
# spent 1.82s (224ms+1.60) within OpenBSD::PackageRepository::HTTPorFTP::get_http_list which was called: # once (224ms+1.60s) by OpenBSD::PackageRepository::HTTP::obtain_list at line 937
{
9071800ns my ($self, $error) = @_;
908
90913µs122µs my $fullname = $self->url;
# spent 22µs making 1 call to OpenBSD::PackageRepositoryBase::url
91011µs my $l = [];
911127µs21.33ms my $fh = $self->open_read_ftp(OpenBSD::Paths->ftp." -o - $fullname",
# spent 1.33ms making 1 call to OpenBSD::PackageRepository::HTTPorFTP::open_read_ftp # spent 7µs making 1 call to OpenBSD::Paths::ftp
912 $error) or return;
91311.02s11.02s while(<$fh>) {
91497106.72ms chomp;
9159710568ms19420483ms for my $pkg (m/\<A[^>]*\s+HREF=\"(.*?\.tgz)\"/gio) {
# spent 429ms making 9710 calls to OpenBSD::PackageRepository::HTTPorFTP::CORE:readline, avg 44µs/call # spent 54.8ms making 9710 calls to OpenBSD::PackageRepository::HTTPorFTP::CORE:match, avg 6µs/call
916968761.6ms96877.59ms $pkg = $1 if $pkg =~ m|^.*/(.*)$|;
# spent 7.59ms making 9687 calls to OpenBSD::PackageRepository::HTTPorFTP::CORE:match, avg 783ns/call
917 # decode uri-encoding; from URI::Escape
918968739.6ms96877.26ms $pkg =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
# spent 7.26ms making 9687 calls to OpenBSD::PackageRepository::HTTPorFTP::CORE:subst, avg 750ns/call
919968732.3ms968776.5ms $self->add_to_list($l, $pkg);
# spent 76.5ms making 9687 calls to OpenBSD::PackageRepository::add_to_list, avg 8µs/call
920 }
921 }
922118µs1116µs $self->close_read_ftp($fh);
923118µs return $l;
924}
925
926package OpenBSD::PackageRepository::HTTP;
92714µsour @ISA=qw(OpenBSD::PackageRepository::HTTPorFTP);
928
929sub urlscheme
930
# spent 939µs within OpenBSD::PackageRepository::HTTP::urlscheme which was called 125 times, avg 8µs/call: # 124 times (937µs+0s) by OpenBSD::PackageRepositoryBase::url at line 122 of OpenBSD/PackageRepository/Installed.pm, avg 8µs/call # once (2µs+0s) by OpenBSD::PackageRepositoryBase::strip_urlscheme at line 100 of OpenBSD/PackageRepository/Installed.pm
{
931125774µs return 'http';
932}
933
934sub obtain_list
935
# spent 1.82s (21µs+1.82) within OpenBSD::PackageRepository::HTTP::obtain_list which was called: # once (21µs+1.82s) by OpenBSD::PackageRepository::HTTPorFTP::list at line 899
{
93611µs my ($self, $error) = @_;
937121µs11.82s 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;
94914µ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
993110µs1;
 
# spent 981ms (844µs+980) within OpenBSD::PackageRepository::CORE:close which was called 81 times, avg 12.1ms/call: # 41 times (300µs+0s) by OpenBSD::PackageRepository::parse_problems at line 358, avg 7µs/call # 40 times (544µs+980ms) by OpenBSD::PackageRepository::close at line 208, avg 24.5ms/call
sub OpenBSD::PackageRepository::CORE:close; # opcode
# spent 25.4ms within OpenBSD::PackageRepository::CORE:match which was called 11278 times, avg 2µs/call: # 10221 times (15.8ms+0s) by OpenBSD::PackageRepository::add_to_list at line 381, avg 2µs/call # 280 times (1.97ms+0s) by OpenBSD::PackageRepository::uncompress at line 410, avg 7µs/call # 123 times (1.22ms+0s) by OpenBSD::PackageRepository::parse_problems at line 298, avg 10µs/call # 123 times (572µs+0s) by OpenBSD::PackageRepository::parse_problems at line 296, avg 5µs/call # 123 times (110µs+0s) by OpenBSD::PackageRepository::parse_problems at line 297, avg 890ns/call # 82 times (1.01ms+0s) by OpenBSD::PackageRepository::parse_problems at line 299, avg 12µs/call # 41 times (4.27ms+0s) by OpenBSD::PackageRepository::parse_problems at line 305, avg 104µs/call # 41 times (238µs+0s) by OpenBSD::PackageRepository::parse_problems at line 306, avg 6µs/call # 41 times (43µs+0s) by OpenBSD::PackageRepository::parse_problems at line 304, avg 1µs/call # 41 times (42µs+0s) by OpenBSD::PackageRepository::parse_problems at line 302, avg 1µs/call # 41 times (42µs+0s) by OpenBSD::PackageRepository::parse_problems at line 301, avg 1µs/call # 41 times (40µs+0s) by OpenBSD::PackageRepository::parse_problems at line 303, avg 971ns/call # 41 times (38µs+0s) by OpenBSD::PackageRepository::parse_problems at line 300, avg 937ns/call # 15 times (32µs+0s) by OpenBSD::PackageRepository::parse_problems at line 308, avg 2µs/call # 15 times (11µs+0s) by OpenBSD::PackageRepository::parse_problems at line 307, avg 727ns/call # 8 times (10µs+0s) by OpenBSD::PackageRepository::parse at line 126, avg 1µs/call # once (1µs+0s) by OpenBSD::PackageRepository::parse at line 145
sub OpenBSD::PackageRepository::CORE:match; # opcode
# spent 1.02ms within OpenBSD::PackageRepository::CORE:open which was called 41 times, avg 25µs/call: # 41 times (1.02ms+0s) by OpenBSD::PackageRepository::parse_problems at line 284, avg 25µs/call
sub OpenBSD::PackageRepository::CORE:open; # opcode
# spent 8.01ms within OpenBSD::PackageRepository::CORE:readline which was called 164 times, avg 49µs/call: # 164 times (8.01ms+0s) by OpenBSD::PackageRepository::parse_problems at line 295, avg 49µs/call
sub OpenBSD::PackageRepository::CORE:readline; # opcode
# spent 339µs within OpenBSD::PackageRepository::CORE:regcomp which was called 82 times, avg 4µs/call: # 82 times (339µs+0s) by OpenBSD::PackageRepository::parse_problems at line 299, avg 4µs/call
sub OpenBSD::PackageRepository::CORE:regcomp; # opcode
# spent 14µs within OpenBSD::PackageRepository::CORE:subst which was called 3 times, avg 5µs/call: # 3 times (14µs+0s) by OpenBSD::PackageRepository::parse at line 118, avg 5µs/call
sub OpenBSD::PackageRepository::CORE:subst; # opcode
# spent 14µs within OpenBSD::PackageRepository::CORE:substcont which was called 2 times, avg 7µs/call: # 2 times (14µs+0s) by OpenBSD::PackageRepository::parse at line 118, avg 7µs/call
sub OpenBSD::PackageRepository::CORE:substcont; # opcode
# spent 2.09ms within OpenBSD::PackageRepository::CORE:unlink which was called 41 times, avg 51µs/call: # 41 times (2.09ms+0s) by OpenBSD::PackageRepository::parse_problems at line 360, avg 51µs/call
sub OpenBSD::PackageRepository::CORE:unlink; # opcode
# spent 12.9ms within OpenBSD::PackageRepository::CORE:waitpid which was called 40 times, avg 323µs/call: # 40 times (12.9ms+0s) by OpenBSD::PackageRepository::close at line 214, avg 323µs/call
sub OpenBSD::PackageRepository::CORE:waitpid; # opcode
# spent 5.38ms within OpenBSD::PackageRepository::Distant::CORE:close which was called 80 times, avg 67µs/call: # 40 times (3.30ms+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 679, avg 83µs/call # 40 times (2.08ms+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 705, avg 52µ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 268ms within OpenBSD::PackageRepository::Distant::CORE:open which was called 40 times, avg 6.71ms/call: # 40 times (268ms+0s) by OpenBSD::PackageRepository::Distant::open_pipe at line 701, avg 6.71ms/call
sub OpenBSD::PackageRepository::Distant::CORE:open; # opcode
# spent 50µs within OpenBSD::PackageRepository::HTTPorFTP::CORE:close which was called: # once (50µs+0s) by OpenBSD::PackageRepository::HTTPorFTP::close_read_ftp at line 817
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:close; # opcode
# spent 62.4ms within OpenBSD::PackageRepository::HTTPorFTP::CORE:match which was called 19397 times, avg 3µs/call: # 9710 times (54.8ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 915, avg 6µs/call # 9687 times (7.59ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 916, avg 783ns/call
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:match; # opcode
# spent 1.16ms within OpenBSD::PackageRepository::HTTPorFTP::CORE:open which was called: # once (1.16ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::open_read_ftp at line 801
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:open; # opcode
# spent 1.45s within OpenBSD::PackageRepository::HTTPorFTP::CORE:readline which was called 9711 times, avg 149µs/call: # 9710 times (429ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 915, avg 44µs/call # once (1.02s+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 913
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:readline; # opcode
# spent 7.26ms within OpenBSD::PackageRepository::HTTPorFTP::CORE:subst which was called 9687 times, avg 750ns/call: # 9687 times (7.26ms+0s) by OpenBSD::PackageRepository::HTTPorFTP::get_http_list at line 918, avg 750ns/call
sub OpenBSD::PackageRepository::HTTPorFTP::CORE:subst; # opcode
# spent 20µs within OpenBSD::PackageRepository::HTTPorFTP::CORE:waitpid which was called: # once (20µ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 3.24ms within OpenBSD::PackageRepository::Local::CORE:ftfile which was called 820 times, avg 4µs/call: # 820 times (3.24ms+0s) by OpenBSD::PackageRepository::Local::list at line 561, avg 4µs/call
sub OpenBSD::PackageRepository::Local::CORE:ftfile; # opcode
# spent 28µs within OpenBSD::PackageRepository::Local::CORE:open_dir which was called: # once (28µs+0s) by OpenBSD::PackageRepository::Local::list at line 559
sub OpenBSD::PackageRepository::Local::CORE:open_dir; # opcode
# spent 801µs within OpenBSD::PackageRepository::Local::CORE:readdir which was called 821 times, avg 976ns/call: # 821 times (801µs+0s) by OpenBSD::PackageRepository::Local::list at line 560, avg 976ns/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 1µs within OpenBSD::PackageRepository::http which was called: # once (1µs+0s) by OpenBSD::PackageRepository::parse at line 126
sub OpenBSD::PackageRepository::http; # xsub