App-PerlbrewUtils

 view release on metacpan or  search on metacpan

lib/App/PerlbrewUtils.pm  view on Meta::CPAN

        schema => ['array*', of=>'str*'],
        tags => ['category:filtering'],
    },
    exclude_version => {
        summary => 'Exclude perl(s) by version',
        description => <<'_',

You can specify e.g. `5.22` to exclude all 5.22.* version.

_
        schema => ['array*', of=>'str*'],
        tags => ['category:filtering'],
    },
    min_version => {
        summary => 'Minimum perl version to include',
        schema => ['str*'],
        tags => ['category:filtering'],
    },
    max_version => {
        summary => 'Maximum perl version to include',
        schema => ['str*'],
        tags => ['category:filtering'],
    },
    xmin_version => {
        summary => 'Only include perl version greater than this',
        schema => ['str*'],
        tags => ['category:filtering'],
    },
    xmax_version => {
        summary => 'Only include perl version lesser than this',
        schema => ['str*'],
        tags => ['category:filtering'],
    },
    exclude_dev => {
        summary => 'Exclude dev perl(s)',
        schema => ['bool'],
        tags => ['category:filtering'],
    },
);

sub _version_eq {
    my ($v, $spec) = @_;

    if ($spec =~ s/^v?(\d+)$/v$1/) {
        $v =~ s/^v?(\d+).+/v$1/;
    } elsif ($spec =~ s/^v?(\d+\.\d+)$/v$1/) {
        $v =~ s/^v?(\d+\.\d+).+/v$1/;
    }
    version->parse($v) == version->parse($spec);
}

sub _version_gt {
    my ($v, $spec) = @_;

    if ($spec =~ s/^v?(\d+)$/v$1/) {
        $v =~ s/^v?(\d+).+/v$1/;
    } elsif ($spec =~ s/^v?(\d+\.\d+)$/v$1/) {
        $v =~ s/^v?(\d+\.\d+).+/v$1/;
    }
    my $res = version->parse($v) > version->parse($spec);
    #say "D:comparing version $v vs $spec: $res";
    $res;
}

sub _version_lt {
    my ($v, $spec) = @_;

    if ($spec =~ s/^v?(\d+)$/vv$1/) {
        $v =~ s/^v?(\d+).+/v$1/;
    } elsif ($spec =~ s/^v?(\d+\.\d+)$/v$1/) {
        $v =~ s/^v?(\d+\.\d+).+/v$1/;
    }
    my $res = version->parse($v) < version->parse($spec);
    #say "D:comparing version $v vs $spec: $res";
    $res;
}

sub _version_dev {
    my ($v) = @_;

    $v =~ /^v?\d+\.(\d+)/ or return 0;
    $1 % 2 ? 1:0;
}

sub _filter_perl {
    my ($perl, $args) = @_;

    #say "D:filtering perl $perl->{version} ...";

  FILTER_INCLUDE:
    {
        last unless $args->{include} && @{ $args->{include} };
        for (@{ $args->{include} }) {
            last FILTER_INCLUDE if $perl->{name} eq $_;
        }
        return 0;
    }

  FILTER_EXCLUDE:
    {
        last unless $args->{exclude} && @{ $args->{exclude} };
        for (@{ $args->{exclude} }) {
            return 0 if $perl->{name} eq $_;
        }
    }

  FILTER_INCLUDE_VERSION:
    {
        last unless $args->{include_version} && @{ $args->{include_version} };
        for (@{ $args->{include_version} }) {
            last FILTER_INCLUDE_VERSION if _version_included($perl->{version}, $_);
        }
        return 0;
    }

  FILTER_EXCLUDE_VERSION:
    {
        last unless $args->{exclude_version} && @{ $args->{exclude_version} };
        for (@{ $args->{exclude_version} }) {
            return 0 if _version_included($perl->{version}, $_);
        }
    }

  FILTER_MIN_VERSION:
    {
        last unless $args->{min_version};
        return 0 if _version_lt($perl->{version}, $args->{min_version});
    }

  FILTER_MAX_VERSION:
    {
        last unless $args->{max_version};
        return 0 if _version_gt($perl->{version}, $args->{max_version});
    }

  FILTER_XMIN_VERSION:
    {
        last unless $args->{xmin_version};
        return 0 if !_version_gt($perl->{version}, $args->{xmin_version});
    }

  FILTER_XMAX_VERSION:
    {
        last unless $args->{xmax_version};
        return 0 if !_version_lt($perl->{version}, $args->{xmax_version});
    }

  FILTER_EXCLUDE_DEV:



( run in 1.539 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )