mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
Meta.pm: consider FHEM packages in prereqs
git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@18957 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
64f4fc0630
commit
2c2ac7ac62
@ -1053,7 +1053,7 @@ sub CreateSearchList ($$$) {
|
|||||||
$found++;
|
$found++;
|
||||||
$foundKeywords++;
|
$foundKeywords++;
|
||||||
|
|
||||||
push @ret, '<h4>#' . $keyword . '</h4>';
|
push @ret, '<h4># ' . $keyword . '</h4>';
|
||||||
|
|
||||||
my @mAttrs = qw(
|
my @mAttrs = qw(
|
||||||
modules
|
modules
|
||||||
|
230
FHEM/Meta.pm
230
FHEM/Meta.pm
@ -6,7 +6,7 @@ use warnings;
|
|||||||
|
|
||||||
# provide the same hash as for real FHEM modules
|
# provide the same hash as for real FHEM modules
|
||||||
# in FHEM main context
|
# in FHEM main context
|
||||||
our %packages;
|
use vars qw(%packages);
|
||||||
|
|
||||||
# define package
|
# define package
|
||||||
package FHEM::Meta;
|
package FHEM::Meta;
|
||||||
@ -39,15 +39,6 @@ BEGIN {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#TODO this shall be handled by InitMod()
|
|
||||||
# Get our own Metadata
|
|
||||||
my %META;
|
|
||||||
my $ret = __GetMetadata( __FILE__, \%META );
|
|
||||||
return "$@" if ($@);
|
|
||||||
return $ret if ($ret);
|
|
||||||
$packages{Meta} = \%META;
|
|
||||||
use version 0.77; our $VERSION = $packages{Meta}{version};
|
|
||||||
|
|
||||||
# Exported variables
|
# Exported variables
|
||||||
#
|
#
|
||||||
|
|
||||||
@ -579,6 +570,18 @@ my @perlCoreModules = qw(
|
|||||||
Win32::Spawn
|
Win32::Spawn
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# Initialize global hash %packages
|
||||||
|
__GetPackages() unless ( keys %packages > 0 );
|
||||||
|
|
||||||
|
#TODO this shall be handled by InitMod()
|
||||||
|
# Get our own Metadata
|
||||||
|
my %META;
|
||||||
|
my $ret = __GetMetadata( __FILE__, \%META );
|
||||||
|
return "$@" if ($@);
|
||||||
|
return $ret if ($ret);
|
||||||
|
$packages{Meta}{META} = \%META;
|
||||||
|
use version 0.77; our $VERSION = $packages{Meta}{META}{version};
|
||||||
|
|
||||||
# Initially load information
|
# Initially load information
|
||||||
# to be ready for meta analysis
|
# to be ready for meta analysis
|
||||||
__GetUpdatedata() unless ( defined($coreUpdate) );
|
__GetUpdatedata() unless ( defined($coreUpdate) );
|
||||||
@ -698,42 +701,84 @@ sub Load(;$$) {
|
|||||||
|
|
||||||
foreach my $modName (@lmodules) {
|
foreach my $modName (@lmodules) {
|
||||||
|
|
||||||
|
my $type = (
|
||||||
|
exists( $modules{$modName} )
|
||||||
|
? 'module'
|
||||||
|
: ( exists( $packages{$modName} ) ? 'package' : undef )
|
||||||
|
);
|
||||||
|
next unless ($type);
|
||||||
|
|
||||||
# Abort when module file was not indexed by
|
# Abort when module file was not indexed by
|
||||||
# fhem.pl before.
|
# fhem.pl before.
|
||||||
# Only continue if META was not loaded
|
# Only continue if META was not loaded
|
||||||
# or should explicitly be reloaded.
|
# or should explicitly be reloaded.
|
||||||
next
|
next
|
||||||
if (
|
if (
|
||||||
!defined( $modules{$modName}{ORDER} )
|
$type eq 'module'
|
||||||
|| ( !$reload
|
&& (
|
||||||
&& defined( $modules{$modName}{META} )
|
!defined( $modules{$modName}{ORDER} )
|
||||||
&& ref( $modules{$modName}{META} ) eq "HASH" )
|
|| ( !$reload
|
||||||
|
&& defined( $modules{$modName}{META} )
|
||||||
|
&& ref( $modules{$modName}{META} ) eq "HASH" )
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
next
|
||||||
|
if ( $type eq 'package'
|
||||||
|
&& !$reload
|
||||||
|
&& defined( $packages{$modName}{META} )
|
||||||
|
&& ref( $packages{$modName}{META} ) eq "HASH" );
|
||||||
|
|
||||||
delete $modules{$modName}{META};
|
if ( $type eq 'module'
|
||||||
|
&& defined( $modules{$modName}{META} ) )
|
||||||
|
{
|
||||||
|
delete $modules{$modName}{META};
|
||||||
|
|
||||||
|
}
|
||||||
|
elsif ( $type eq 'package'
|
||||||
|
&& defined( $packages{$modName}{META} ) )
|
||||||
|
{
|
||||||
|
delete $packages{$modName}{META};
|
||||||
|
}
|
||||||
|
|
||||||
my $filePath;
|
my $filePath;
|
||||||
if ( $modName eq 'Global' ) {
|
if ( $modName eq 'Global' ) {
|
||||||
$filePath = $attr{global}{modpath} . "/fhem.pl";
|
$filePath = $attr{global}{modpath} . "/fhem.pl";
|
||||||
}
|
}
|
||||||
|
elsif ( $modName eq 'configDB' ) {
|
||||||
|
$filePath = $attr{global}{modpath} . "/configDB.pm";
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
$filePath =
|
$filePath =
|
||||||
$attr{global}{modpath}
|
$attr{global}{modpath}
|
||||||
. "/FHEM/"
|
. "/FHEM/"
|
||||||
. $modules{$modName}{ORDER} . '_'
|
. ( $type eq 'module' ? $modules{$modName}{ORDER} . '_' : '' )
|
||||||
. $modName . '.pm';
|
. $modName . '.pm';
|
||||||
}
|
}
|
||||||
|
|
||||||
my $ret = InitMod( $filePath, $modules{$modName}, 1 );
|
my $ret =
|
||||||
|
InitMod( $filePath,
|
||||||
|
( $type eq 'module' ? $modules{$modName} : $packages{$modName} ),
|
||||||
|
1 );
|
||||||
push @rets, $@ if ( $@ && $@ ne '' );
|
push @rets, $@ if ( $@ && $@ ne '' );
|
||||||
push @rets, $ret if ( $ret && $ret ne '' );
|
push @rets, $ret if ( $ret && $ret ne '' );
|
||||||
|
|
||||||
$modules{$modName}{META}{generated_by} =
|
if ( $type eq 'module' ) {
|
||||||
$packages{Meta}{name} . ' ' . version->parse($v)->normal . ", $t"
|
$modules{$modName}{META}{generated_by} =
|
||||||
if ( defined( $modules{$modName}{META} ) );
|
$packages{Meta}{META}{name} . ' '
|
||||||
|
. version->parse($v)->normal . ", $t"
|
||||||
|
if ( defined( $modules{$modName} )
|
||||||
|
&& defined( $modules{$modName}{META} ) );
|
||||||
|
|
||||||
foreach my $devName ( devspec2array( 'TYPE=' . $modName ) ) {
|
foreach my $devName ( devspec2array( 'TYPE=' . $modName ) ) {
|
||||||
SetInternals( $defs{$devName} );
|
SetInternals( $defs{$devName} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$packages{$modName}{META}{generated_by} =
|
||||||
|
$packages{Meta}{META}{name} . ' '
|
||||||
|
. version->parse($v)->normal . ", $t"
|
||||||
|
if ( defined( $packages{$modName} )
|
||||||
|
&& defined( $packages{$modName}{META} ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1006,7 +1051,9 @@ m/(\$Id\: ((?:([0-9]+)_)?([\w]+)\.([\w]+))\s([0-9]+)\s((([0-9]+)-([0-9]+)-([0-9]
|
|||||||
$vcs[0] = $1; # complete match
|
$vcs[0] = $1; # complete match
|
||||||
$vcs[1] = $2; # file name
|
$vcs[1] = $2; # file name
|
||||||
$vcs[2] =
|
$vcs[2] =
|
||||||
$2 eq 'fhem.pl' ? '-1' : $3; # order number, may be indefined
|
$2 eq 'fhem.pl'
|
||||||
|
? '-1'
|
||||||
|
: $3; # order number, may be indefined
|
||||||
$vcs[3] = $2 eq 'fhem.pl' ? 'Global' : $4; # FHEM module name
|
$vcs[3] = $2 eq 'fhem.pl' ? 'Global' : $4; # FHEM module name
|
||||||
$vcs[4] = $5; # file extension
|
$vcs[4] = $5; # file extension
|
||||||
$vcs[5] = $6; # svn base revision
|
$vcs[5] = $6; # svn base revision
|
||||||
@ -1339,6 +1386,73 @@ m/(^#\s+(?:\d{1,2}\.\d{1,2}\.(?:\d{2}|\d{4})\s+)?[^v\d]*(v?(?:\d{1,3}\.\d{1,3}(?
|
|||||||
else {
|
else {
|
||||||
$modMeta->{x_prereqs_src} = 'META.json';
|
$modMeta->{x_prereqs_src} = 'META.json';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Look for prereqs from FHEM packages
|
||||||
|
# used by this FHEM module.
|
||||||
|
# We're not going deeper down for Meta.pm itself,
|
||||||
|
# that means Meta.pm manual prereqs need to cover this.
|
||||||
|
if ( $modMeta->{x_file}[4] ne 'Meta'
|
||||||
|
&& defined( $modMeta->{prereqs} )
|
||||||
|
&& defined( $modMeta->{prereqs}{runtime} ) )
|
||||||
|
{
|
||||||
|
foreach my $pkgReq (qw(requires recommends suggests)) {
|
||||||
|
next
|
||||||
|
unless ( defined( $modMeta->{prereqs}{runtime}{$pkgReq} ) );
|
||||||
|
|
||||||
|
foreach
|
||||||
|
my $pkg ( keys %{ $modMeta->{prereqs}{runtime}{$pkgReq} } )
|
||||||
|
{
|
||||||
|
|
||||||
|
# Found prereq that is a FHEM package
|
||||||
|
if ( exists( $packages{$pkg} ) ) {
|
||||||
|
Load($pkg);
|
||||||
|
|
||||||
|
if ( defined( $packages{$pkg}{META} )
|
||||||
|
&& defined( $packages{$pkg}{META}{prereqs} )
|
||||||
|
&& defined(
|
||||||
|
$packages{$pkg}{META}{prereqs}{runtime} ) )
|
||||||
|
{
|
||||||
|
my $pkgMeta = $packages{$pkg}{META};
|
||||||
|
|
||||||
|
foreach
|
||||||
|
my $pkgIreq (qw(requires recommends suggests))
|
||||||
|
{
|
||||||
|
next
|
||||||
|
unless (
|
||||||
|
defined(
|
||||||
|
$pkgMeta->{prereqs}{runtime}{$pkgIreq}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
# inject indirect prereq to FHEM module
|
||||||
|
foreach my $pkgI (
|
||||||
|
keys
|
||||||
|
%{ $pkgMeta->{prereqs}{runtime}{$pkgIreq} }
|
||||||
|
)
|
||||||
|
{
|
||||||
|
$modMeta->{prereqs}{runtime}{$pkgIreq}
|
||||||
|
{$pkgI} =
|
||||||
|
$pkgMeta->{prereqs}{runtime}{$pkgIreq}
|
||||||
|
{$pkgI}
|
||||||
|
if (
|
||||||
|
!exists(
|
||||||
|
$modMeta->{prereqs}{runtime}
|
||||||
|
{$pkgIreq}{$pkgI}
|
||||||
|
)
|
||||||
|
|| ( $pkgMeta->{prereqs}{runtime}
|
||||||
|
{$pkgIreq}{$pkgI} ne '0'
|
||||||
|
&& $modMeta->{prereqs}{runtime}
|
||||||
|
{$pkgIreq}{$pkgI} ne
|
||||||
|
$pkgMeta->{prereqs}{runtime}
|
||||||
|
{$pkgIreq}{$pkgI} )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get some other info about fhem.pl
|
# Get some other info about fhem.pl
|
||||||
@ -1486,7 +1600,7 @@ m/(^#\s+(?:\d{1,2}\.\d{1,2}\.(?:\d{2}|\d{4})\s+)?[^v\d]*(v?(?:\d{1,3}\.\d{1,3}(?
|
|||||||
# If we are not running in loop, this is not time consuming for us here
|
# If we are not running in loop, this is not time consuming for us here
|
||||||
elsif ( !$runInLoop ) {
|
elsif ( !$runInLoop ) {
|
||||||
$modMeta->{generated_by} =
|
$modMeta->{generated_by} =
|
||||||
$packages{Meta}{name} . ' '
|
$packages{Meta}{META}{name} . ' '
|
||||||
. version->parse( __PACKAGE__->VERSION() )->normal . ', '
|
. version->parse( __PACKAGE__->VERSION() )->normal . ', '
|
||||||
. TimeNow();
|
. TimeNow();
|
||||||
}
|
}
|
||||||
@ -1694,11 +1808,14 @@ m/(^#\s+(?:\d{1,2}\.\d{1,2}\.(?:\d{2}|\d{4})\s+)?[^v\d]*(v?(?:\d{1,3}\.\d{1,3}(?
|
|||||||
foreach ( @{ $modMeta->{keywords} } ) {
|
foreach ( @{ $modMeta->{keywords} } ) {
|
||||||
push @filtered, lc($_)
|
push @filtered, lc($_)
|
||||||
unless ( lc($_) eq 'fhem-core'
|
unless ( lc($_) eq 'fhem-core'
|
||||||
|| lc($_) eq 'fhem-3rdparty'
|
|
||||||
|| lc($_) eq 'fhem-mod'
|
|| lc($_) eq 'fhem-mod'
|
||||||
|| lc($_) eq 'fhem-pkg'
|
|| lc($_) eq 'fhem-pkg'
|
||||||
|
|| lc($_) eq 'fhem-3rdparty'
|
||||||
|
|| lc($_) eq 'fhem-mod-3rdparty'
|
||||||
|
|| lc($_) eq 'fhem-pkg-3rdparty'
|
||||||
|| lc($_) eq 'fhem-mod-local'
|
|| lc($_) eq 'fhem-mod-local'
|
||||||
|| lc($_) eq 'fhem-pkg-local'
|
|| lc($_) eq 'fhem-pkg-local'
|
||||||
|
|| lc($_) eq 'fhem-commercial'
|
||||||
|| lc($_) eq 'fhem-mod-commercial'
|
|| lc($_) eq 'fhem-mod-commercial'
|
||||||
|| lc($_) eq 'fhem-pkg-commercial' );
|
|| lc($_) eq 'fhem-pkg-commercial' );
|
||||||
}
|
}
|
||||||
@ -1711,15 +1828,15 @@ m/(^#\s+(?:\d{1,2}\.\d{1,2}\.(?:\d{2}|\d{4})\s+)?[^v\d]*(v?(?:\d{1,3}\.\d{1,3}(?
|
|||||||
&& defined( $modMeta->{resources}{x_support_community} )
|
&& defined( $modMeta->{resources}{x_support_community} )
|
||||||
&& $modMeta->{x_file}[2] ne 'fhem.pl' )
|
&& $modMeta->{x_file}[2] ne 'fhem.pl' )
|
||||||
{
|
{
|
||||||
foreach (
|
foreach my $keyword (
|
||||||
__GenerateKeywordsFromSupportCommunity(
|
__GenerateKeywordsFromSupportCommunity(
|
||||||
$modMeta->{resources}{x_support_community}
|
$modMeta->{resources}{x_support_community}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
push @{ $modMeta->{keywords} }, $_
|
push @{ $modMeta->{keywords} }, $keyword
|
||||||
if ( !defined( $modMeta->{keywords} )
|
if ( !defined( $modMeta->{keywords} )
|
||||||
|| !grep ( m/^$_$/i, @{ $modMeta->{keywords} } ) );
|
|| !grep ( m/^$keyword$/i, @{ $modMeta->{keywords} } ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1739,11 +1856,12 @@ m/(^#\s+(?:\d{1,2}\.\d{1,2}\.(?:\d{2}|\d{4})\s+)?[^v\d]*(v?(?:\d{1,3}\.\d{1,3}(?
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Add some keywords about the module origin
|
# Add some keywords about the module origin
|
||||||
|
my $modType = $modMeta->{x_file}[3] ? 'mod' : 'pkg';
|
||||||
if ( GetModuleSourceOrigin( $modMeta->{x_file}[4] ) eq 'fhem' ) {
|
if ( GetModuleSourceOrigin( $modMeta->{x_file}[4] ) eq 'fhem' ) {
|
||||||
push @{ $modMeta->{keywords} }, 'fhem-core';
|
push @{ $modMeta->{keywords} }, 'fhem-core';
|
||||||
}
|
}
|
||||||
elsif ( GetModuleSourceOrigin( $modMeta->{x_file}[4] ) ne '' ) {
|
elsif ( GetModuleSourceOrigin( $modMeta->{x_file}[4] ) ne '' ) {
|
||||||
push @{ $modMeta->{keywords} }, 'fhem-3rdparty';
|
push @{ $modMeta->{keywords} }, "fhem-$modType-3rdparty";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my $modType = $modMeta->{x_file}[3] ? 'mod' : 'pkg';
|
my $modType = $modMeta->{x_file}[3] ? 'mod' : 'pkg';
|
||||||
@ -1825,6 +1943,41 @@ sub __GenerateKeywordsFromSupportCommunity {
|
|||||||
return @keywords;
|
return @keywords;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub __GetPackages {
|
||||||
|
my $dh;
|
||||||
|
my $dir = $attr{global}{modpath};
|
||||||
|
if ( opendir( $dh, $dir ) ) {
|
||||||
|
foreach
|
||||||
|
my $fn ( grep { $_ ne "." && $_ ne ".." && !-d $_ } readdir($dh) )
|
||||||
|
{
|
||||||
|
if ( $fn =~ m/^(?:\.\/)?((.+\/)?((?:(\d+)_)?(.+)\.(.+)))$/
|
||||||
|
&& !$4
|
||||||
|
&& $6
|
||||||
|
&& $6 eq 'pm' )
|
||||||
|
{
|
||||||
|
$packages{$5} = ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($dh);
|
||||||
|
}
|
||||||
|
|
||||||
|
$dir = $attr{global}{modpath} . '/FHEM/';
|
||||||
|
if ( opendir( $dh, $dir ) ) {
|
||||||
|
foreach
|
||||||
|
my $fn ( grep { $_ ne "." && $_ ne ".." && !-d $_ } readdir($dh) )
|
||||||
|
{
|
||||||
|
if ( $fn =~ m/^(?:\.\/)?((.+\/)?((?:(\d+)_)?(.+)\.(.+)))$/
|
||||||
|
&& !$4
|
||||||
|
&& $6
|
||||||
|
&& $6 eq 'pm' )
|
||||||
|
{
|
||||||
|
$packages{$5} = ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($dh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub __GetMaintainerdata {
|
sub __GetMaintainerdata {
|
||||||
return 0 unless ( __PACKAGE__ eq caller(0) );
|
return 0 unless ( __PACKAGE__ eq caller(0) );
|
||||||
my $fh;
|
my $fh;
|
||||||
@ -1898,7 +2051,8 @@ sub __GetMaintainerdata {
|
|||||||
__PACKAGE__
|
__PACKAGE__
|
||||||
. "::__GetMaintainerdata ERROR: Duplicate $type entry:\n"
|
. "::__GetMaintainerdata ERROR: Duplicate $type entry:\n"
|
||||||
. ' 1st: '
|
. ' 1st: '
|
||||||
. $moduleMaintainers{ $maintainer[0][4] }[0][0] . ' '
|
. $moduleMaintainers{ $maintainer[0][4] }[0][0]
|
||||||
|
. ' '
|
||||||
. $moduleMaintainers{ $maintainer[0][4] }[1] . ' '
|
. $moduleMaintainers{ $maintainer[0][4] }[1] . ' '
|
||||||
. $moduleMaintainers{ $maintainer[0][4] }[2]
|
. $moduleMaintainers{ $maintainer[0][4] }[2]
|
||||||
. "\n 2nd: "
|
. "\n 2nd: "
|
||||||
@ -1906,7 +2060,8 @@ sub __GetMaintainerdata {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# Register in global FHEM module index
|
# Register in global FHEM module index
|
||||||
$moduleMaintainers{ $maintainer[0][4] } = \@maintainer;
|
$moduleMaintainers{ $maintainer[0][4] } =
|
||||||
|
\@maintainer;
|
||||||
|
|
||||||
# Register in global maintainer index
|
# Register in global maintainer index
|
||||||
foreach ( split '/|,', $maintainer[1] ) {
|
foreach ( split '/|,', $maintainer[1] ) {
|
||||||
@ -1983,7 +2138,8 @@ sub __GetMaintainerdata {
|
|||||||
__PACKAGE__
|
__PACKAGE__
|
||||||
. "::__GetMaintainerdata ERROR: Duplicate $type entry:\n"
|
. "::__GetMaintainerdata ERROR: Duplicate $type entry:\n"
|
||||||
. ' 1st: '
|
. ' 1st: '
|
||||||
. $packageMaintainers{ $maintainer[0][4] }[0][0] . ' '
|
. $packageMaintainers{ $maintainer[0][4] }[0][0]
|
||||||
|
. ' '
|
||||||
. $packageMaintainers{ $maintainer[0][4] }[1] . ' '
|
. $packageMaintainers{ $maintainer[0][4] }[1] . ' '
|
||||||
. $packageMaintainers{ $maintainer[0][4] }[2]
|
. $packageMaintainers{ $maintainer[0][4] }[2]
|
||||||
. "\n 2nd: "
|
. "\n 2nd: "
|
||||||
@ -1991,7 +2147,8 @@ sub __GetMaintainerdata {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# Register in global FHEM package index
|
# Register in global FHEM package index
|
||||||
$packageMaintainers{ $maintainer[0][4] } = \@maintainer;
|
$packageMaintainers{ $maintainer[0][4] } =
|
||||||
|
\@maintainer;
|
||||||
|
|
||||||
# Register in global maintainer index
|
# Register in global maintainer index
|
||||||
foreach ( split '/|,', $maintainer[1] ) {
|
foreach ( split '/|,', $maintainer[1] ) {
|
||||||
@ -2114,7 +2271,10 @@ sub __GetSupportForum {
|
|||||||
|| $subBoard eq 'language' );
|
|| $subBoard eq 'language' );
|
||||||
|
|
||||||
my $reqSub = $req;
|
my $reqSub = $req;
|
||||||
$reqSub =~ s/$board\///;
|
if ( $reqSub =~ /^$board\/(.+)/ ) {
|
||||||
|
$reqSub = $1;
|
||||||
|
$reqSub =~ s/ /\//g; # justme1968 special ;D)
|
||||||
|
}
|
||||||
|
|
||||||
if ( lc($subBoard) eq lc($reqSub) ) {
|
if ( lc($subBoard) eq lc($reqSub) ) {
|
||||||
|
|
||||||
@ -2516,7 +2676,7 @@ sub __SetXVersion {
|
|||||||
"description": "n/a"
|
"description": "n/a"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"version": "v0.3.1",
|
"version": "v0.3.2",
|
||||||
"release_status": "testing",
|
"release_status": "testing",
|
||||||
"author": [
|
"author": [
|
||||||
"Julian Pawlowski <julian.pawlowski@gmail.com>"
|
"Julian Pawlowski <julian.pawlowski@gmail.com>"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user