@CPAN::InfoObj::ISA
=
qw(CPAN::Debug)
;
$VERSION
)
;
$VERSION
=
"5.5"
;
sub
ro {
my
$self
=
shift
;
exists
$self
->{RO} and
return
$self
->{RO};
}
sub
cpan_userid {
my
$self
=
shift
;
my
$ro
=
$self
->ro;
if
(
$ro
) {
return
$ro
->{CPAN_USERID} ||
"N/A"
;
}
else
{
$self
->debug(
"ID[$self->{ID}]"
);
return
"N/A"
;
}
}
sub
id {
shift
->{ID}; }
sub
new {
my
$this
=
bless
{},
shift
;
%$this
=
@_
;
$this
}
sub
safe_chdir {
my
(
$self
,
$todir
) =
@_
;
Carp::confess(
"safe_chdir called without todir argument"
)
unless
defined
$todir
and
length
$todir
;
if
(
chdir
$todir
) {
$self
->debug(
sprintf
"changed directory to %s"
, CPAN::anycwd())
if
$CPAN::DEBUG
;
}
else
{
if
(-e
$todir
) {
unless
(-x
$todir
) {
unless
(
chmod
0755,
$todir
) {
my
$cwd
= CPAN::anycwd();
$CPAN::Frontend
->mywarn(
"I have neither the -x permission nor the "
.
"permission to change the permission; cannot "
.
"chdir to '$todir'\n"
);
$CPAN::Frontend
->mysleep(5);
$CPAN::Frontend
->mydie(
qq{Could not chdir from cwd[$cwd] }
.
qq{to todir[$todir]: $!}
);
}
}
}
else
{
$CPAN::Frontend
->mydie(
"Directory '$todir' has gone. Cannot continue.\n"
);
}
if
(
chdir
$todir
) {
$self
->debug(
sprintf
"changed directory to %s"
, CPAN::anycwd())
if
$CPAN::DEBUG
;
}
else
{
my
$cwd
= CPAN::anycwd();
$CPAN::Frontend
->mydie(
qq{Could not chdir from cwd[$cwd] }
.
qq{to todir[$todir] (a chmod has been issued): $!}
);
}
}
}
sub
set {
my
(
$self
,
%att
) =
@_
;
my
$class
=
ref
$self
;
unless
(
$self
->id) {
CPAN->debug(
"Bug? Empty ID, rejecting"
);
return
;
}
my
$ro
=
$self
->{RO} =
$CPAN::META
->{readonly}{
$class
}{
$self
->id} ||= {};
while
(
my
(
$k
,
$v
) =
each
%att
) {
$ro
->{
$k
} =
$v
;
}
}
sub
as_glimpse {
my
(
$self
) =
@_
;
my
(
@m
);
my
$class
=
ref
(
$self
);
$class
=~ s/^CPAN:://;
my
$id
=
$self
->can(
"pretty_id"
) ?
$self
->pretty_id :
$self
->{ID};
push
@m
,
sprintf
"%-15s %s\n"
,
$class
,
$id
;
join
""
,
@m
;
}
sub
as_string {
my
(
$self
) =
@_
;
my
(
@m
);
my
$class
=
ref
(
$self
);
$class
=~ s/^CPAN:://;
push
@m
,
$class
,
" id = $self->{ID}\n"
;
my
$ro
;
unless
(
$ro
=
$self
->ro) {
if
(
substr
(
$self
->{ID},-1,1) eq
"."
) {
$ro
= +{};
}
else
{
$CPAN::Frontend
->mywarn(
"Unknown object $self->{ID}\n"
);
$CPAN::Frontend
->mysleep(5);
return
;
}
}
for
(
sort
keys
%$ro
) {
my
$extra
=
""
;
if
(
$_
eq
"CPAN_USERID"
) {
$extra
.=
" ("
;
$extra
.=
$self
->fullname;
my
$email
;
if
(
$email
=
$CPAN::META
->instance(
"CPAN::Author"
,
$self
->cpan_userid
)->email) {
$extra
.=
" <$email>"
;
}
else
{
$extra
.=
" <no email>"
;
}
$extra
.=
")"
;
}
elsif
(
$_
eq
"FULLNAME"
) {
push
@m
,
sprintf
" %-12s %s\n"
,
$_
,
$self
->fullname;
next
;
}
next
unless
defined
$ro
->{
$_
};
push
@m
,
sprintf
" %-12s %s%s\n"
,
$_
,
$ro
->{
$_
},
$extra
;
}
KEY:
for
(
sort
keys
%$self
) {
next
if
m/^(ID|RO)$/;
unless
(
defined
$self
->{
$_
}) {
delete
$self
->{
$_
};
next
KEY;
}
if
(
ref
(
$self
->{
$_
}) eq
"ARRAY"
) {
push
@m
,
sprintf
" %-12s %s\n"
,
$_
,
"@{$self->{$_}}"
;
}
elsif
(
ref
(
$self
->{
$_
}) eq
"HASH"
) {
my
$value
;
if
(/^CONTAINSMODS$/) {
$value
=
join
(
" "
,
sort
keys
%{
$self
->{
$_
}});
}
elsif
(/^prereq_pm$/) {
my
@value
;
my
$v
=
$self
->{
$_
};
for
my
$x
(
sort
keys
%$v
) {
my
@svalue
;
for
my
$y
(
sort
keys
%{
$v
->{
$x
}}) {
push
@svalue
,
"$y=>$v->{$x}{$y}"
;
}
push
@value
,
"$x\:"
.
join
","
,
@svalue
if
@svalue
;
}
$value
=
join
";"
,
@value
;
}
else
{
$value
=
$self
->{
$_
};
}
push
@m
,
sprintf
(
" %-12s %s\n"
,
$_
,
$value
,
);
}
else
{
push
@m
,
sprintf
" %-12s %s\n"
,
$_
,
$self
->{
$_
};
}
}
join
""
,
@m
,
"\n"
;
}
sub
fullname {
my
(
$self
) =
@_
;
$CPAN::META
->instance(
"CPAN::Author"
,
$self
->cpan_userid)->fullname;
}
sub
dump
{
my
(
$self
,
$what
) =
@_
;
unless
(
$CPAN::META
->has_inst(
"Data::Dumper"
)) {
$CPAN::Frontend
->mydie(
"dump command requires Data::Dumper installed"
);
}
local
$Data::Dumper::Sortkeys
;
$Data::Dumper::Sortkeys
= 1;
my
$out
= Data::Dumper::Dumper(
$what
?
eval
$what
:
$self
);
if
(
length
$out
> 100000) {
my
$fh_pager
= FileHandle->new;
local
(
$SIG
{PIPE}) =
"IGNORE"
;
my
$pager
=
$CPAN::Config
->{
'pager'
} ||
"cat"
;
$fh_pager
->
open
(
"|$pager"
)
or
die
"Could not open pager $pager\: $!"
;
$fh_pager
->
print
(
$out
);
close
$fh_pager
;
}
else
{
$CPAN::Frontend
->myprint(
$out
);
}
}
1;