SILENT KILLERPanel

Current Path: > > usr > local > share > perl5 > CPAN


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //usr/local/share/perl5/CPAN

NameTypeSizeLast ModifiedActions
API Directory - -
Exception Directory - -
FTP Directory - -
HTTP Directory - -
Kwalify Directory - -
LWP Directory - -
Meta Directory - -
Plugin Directory - -
Admin.pm File 7791 bytes November 27 2018 02:51:46.
Author.pm File 6842 bytes September 22 2018 19:39:13.
Bundle.pm File 10144 bytes May 19 2020 08:43:52.
CacheMgr.pm File 7664 bytes March 01 2020 16:07:13.
Complete.pm File 6023 bytes September 22 2018 19:39:13.
Debug.pm File 2102 bytes August 17 2016 05:38:12.
DeferredCode.pm File 189 bytes September 08 2012 09:00:31.
Distribution.pm File 183259 bytes April 03 2022 19:00:28.
Distroprefs.pm File 11990 bytes March 01 2020 17:11:25.
Distrostatus.pm File 972 bytes September 08 2012 09:00:31.
FTP.pm File 49847 bytes April 03 2022 18:19:14.
FirstTime.pm File 74773 bytes April 03 2022 18:19:14.
HandleConfig.pm File 24183 bytes April 03 2022 18:19:14.
Index.pm File 22236 bytes April 03 2022 18:19:14.
InfoObj.pm File 6909 bytes November 24 2013 14:12:21.
Kwalify.pm File 3428 bytes September 08 2012 09:00:31.
Mirrors.pm File 18250 bytes May 23 2020 17:14:15.
Module.pm File 22390 bytes September 22 2018 19:39:13.
Nox.pm File 953 bytes August 17 2016 05:38:12.
Plugin.pm File 3219 bytes May 19 2020 08:43:52.
Prompt.pm File 567 bytes September 08 2012 09:00:31.
Queue.pm File 7124 bytes May 19 2020 08:43:52.
Shell.pm File 73684 bytes May 23 2020 17:14:15.
Tarzip.pm File 16640 bytes May 19 2020 08:43:52.
URL.pm File 588 bytes September 08 2012 09:00:31.
Version.pm File 4398 bytes September 22 2018 19:39:13.

Reading File: //usr/local/share/perl5/CPAN/Kwalify.pm

=head1 NAME

CPAN::Kwalify - Interface between CPAN.pm and Kwalify.pm

=head1 SYNOPSIS

  use CPAN::Kwalify;
  validate($schema_name, $data, $file, $doc);

=head1 DESCRIPTION

=over

=item _validate($schema_name, $data, $file, $doc)

$schema_name is the name of a supported schema. Currently only
C<distroprefs> is supported. $data is the data to be validated. $file
is the absolute path to the file the data are coming from. $doc is the
index of the document within $doc that is to be validated. The last
two arguments are only there for better error reporting.

Relies on being called from within CPAN.pm.

Dies if something fails. Does not return anything useful.

=item yaml($schema_name)

Returns the YAML text of that schema. Dies if something fails.

=back

=head1 AUTHOR

Andreas Koenig C<< <andk@cpan.org> >>

=head1 LICENSE

This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

See L<http://www.perl.com/perl/misc/Artistic.html>



=cut


use strict;

package CPAN::Kwalify;
use vars qw($VERSION $VAR1);
$VERSION = "5.50";

use File::Spec ();

my %vcache = ();

my $schema_loaded = {};

sub _validate {
    my($schema_name,$data,$abs,$y) = @_;
    my $yaml_module = CPAN->_yaml_module;
    if (
        $CPAN::META->has_inst($yaml_module)
        &&
        $CPAN::META->has_inst("Kwalify")
       ) {
        my $load = UNIVERSAL::can($yaml_module,"Load");
        unless ($schema_loaded->{$schema_name}) {
            eval {
                my $schema_yaml = yaml($schema_name);
                $schema_loaded->{$schema_name} = $load->($schema_yaml);
            };
            if ($@) {
                # we know that YAML.pm 0.62 cannot parse the schema,
                # so we try a fallback
                my $content = do {
                    my $path = __FILE__;
                    $path =~ s/\.pm$//;
                    $path = File::Spec->catfile($path, "$schema_name.dd");
                    local *FH;
                    open FH, $path or die "Could not open '$path': $!";
                    local $/;
                    <FH>;
                };
                $VAR1 = undef;
                eval $content;
                if (my $err = $@) {
                    die "parsing of '$schema_name.dd' failed: $err";
                }
                $schema_loaded->{$schema_name} = $VAR1;
            }
        }
    }
    if (my $schema = $schema_loaded->{$schema_name}) {
        my $mtime = (stat $abs)[9];
        for my $k (keys %{$vcache{$abs}}) {
            delete $vcache{$abs}{$k} unless $k eq $mtime;
        }
        return if $vcache{$abs}{$mtime}{$y}++;
        eval { Kwalify::validate($schema, $data) };
        if (my $err = $@) {
            my $info = {}; yaml($schema_name, info => $info);
            die "validation of distropref '$abs'[$y] against schema '$info->{path}' failed: $err";
        }
    }
}

sub _clear_cache {
    %vcache = ();
}

sub yaml {
    my($schema_name, %opt) = @_;
    my $content = do {
        my $path = __FILE__;
        $path =~ s/\.pm$//;
        $path = File::Spec->catfile($path, "$schema_name.yml");
        if ($opt{info}) {
            $opt{info}{path} = $path;
        }
        local *FH;
        open FH, $path or die "Could not open '$path': $!";
        local $/;
        <FH>;
    };
    return $content;
}

1;

# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# End:


SILENT KILLER Tool