Skip to content

Commit

Permalink
Add new fatpack
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikolo committed Jun 11, 2020
1 parent cb298fa commit 10d14b3
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions cpm
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ $fatpacked{"App/cpm/DistNotation.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\
APP_CPM_DISTNOTATION

$fatpacked{"App/cpm/Distribution.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'APP_CPM_DISTRIBUTION';
package App::cpm::Distribution;use strict;use warnings;use App::cpm::Logger;use App::cpm::Requirement;use App::cpm::version;use CPAN::DistnameInfo;use constant STATE_REGISTERED=>0b000001;use constant STATE_DEPS_REGISTERED=>0b000010;use constant STATE_RESOLVED=>0b000100;use constant STATE_FETCHED=>0b001000;use constant STATE_CONFIGURED=>0b010000;use constant STATE_INSTALLED=>0b100000;sub new {my ($class,%option)=@_;my$uri=delete$option{uri};my$distfile=delete$option{distfile};my$source=delete$option{source}|| "cpan";my$provides=delete$option{provides}|| [];bless {%option,provides=>$provides,uri=>$uri,distfile=>$distfile,source=>$source,_state=>STATE_RESOLVED,requirements=>{},},$class}sub requirements {my ($self,$phase,$req)=@_;if (ref$phase){my$req=App::cpm::Requirement->new;for my$p (@$phase){if (my$r=$self->{requirements}{$p}){$req->merge($r)}}return$req}$self->{requirements}{$phase}=$req if$req;$self->{requirements}{$phase}|| App::cpm::Requirement->new}for my$attr (qw(source directory distdata meta uri provides rev ref static_builder prebuilt)){no strict 'refs';*$attr=sub {my$self=shift;$self->{$attr}=shift if @_;$self->{$attr}}}sub distfile {my$self=shift;$self->{distfile}=shift if @_;$self->{distfile}|| $self->{uri}}sub distvname {my$self=shift;$self->{distvname}=shift if @_;$self->{distvname}||= do {CPAN::DistnameInfo->new($self->{distfile})->distvname || $self->distfile}}sub version {my$self=shift;$self->{version}=shift if @_;$self->{version}||= CPAN::DistnameInfo->new($self->{distfile})->version || 0}sub overwrite_provide {my ($self,$provide)=@_;my$overwrote;for my$exist (@{$self->{provides}}){if ($exist->{package}eq $provide->{package}){$exist=$provide;$overwrote++}}if (!$overwrote){push @{$self->{provides}},$provide}return 1}sub registered {my$self=shift;if (@_ && $_[0]){$self->{_state}|= STATE_REGISTERED}$self->{_state}& STATE_REGISTERED}sub deps_registered {my$self=shift;if (@_ && $_[0]){$self->{_state}|= STATE_DEPS_REGISTERED}$self->{_state}& STATE_DEPS_REGISTERED}sub resolved {my$self=shift;if (@_ && $_[0]){$self->{_state}=STATE_RESOLVED}$self->{_state}& STATE_RESOLVED}sub fetched {my$self=shift;if (@_ && $_[0]){$self->{_state}=STATE_FETCHED}$self->{_state}& STATE_FETCHED}sub configured {my$self=shift;if (@_ && $_[0]){$self->{_state}=STATE_CONFIGURED}$self->{_state}& STATE_CONFIGURED}sub installed {my$self=shift;if (@_ && $_[0]){$self->{_state}=STATE_INSTALLED}$self->{_state}& STATE_INSTALLED}sub providing {my ($self,$package,$version_range,$ref)=@_;for my$provide (@{$self->provides}){if ($provide->{package}eq $package){if (!$version_range or App::cpm::version->parse($provide->{version})->satisfy($version_range)){if (($provide->{ref}and $ref and $provide->{ref}ne $ref)or (!$provide->{ref}and $ref)){my$message=sprintf "%s provides ref %s (%s), but needs %s\n",$self->distfile,$package,$provide->{ref}|| 'master',$ref;App::cpm::Logger->log(result=>"WARN",message=>$message);last}else {return 1}}else {my$message=sprintf "%s provides %s (%s), but needs %s\n",$self->distfile,$package,$provide->{version}|| 0,$version_range;App::cpm::Logger->log(result=>"WARN",message=>$message);last}}}return}sub equals {my ($self,$that)=@_;$self->distfile && $that->distfile and $self->distfile eq $that->distfile}1;
package App::cpm::Distribution;use strict;use warnings;use App::cpm::Logger;use App::cpm::Requirement;use App::cpm::version;use CPAN::DistnameInfo;use constant STATE_REGISTERED=>0b000001;use constant STATE_DEPS_REGISTERED=>0b000010;use constant STATE_RESOLVED=>0b000100;use constant STATE_FETCHED=>0b001000;use constant STATE_CONFIGURED=>0b010000;use constant STATE_INSTALLED=>0b100000;sub new {my ($class,%option)=@_;my$uri=delete$option{uri};my$distfile=delete$option{distfile};my$source=delete$option{source}|| "cpan";my$provides=delete$option{provides}|| [];bless {%option,provides=>$provides,uri=>$uri,distfile=>$distfile,source=>$source,_state=>STATE_RESOLVED,requirements=>{},},$class}sub requirements {my ($self,$phase,$req)=@_;if (ref$phase){my$req=App::cpm::Requirement->new;for my$p (@$phase){if (my$r=$self->{requirements}{$p}){$req->merge($r)}}return$req}$self->{requirements}{$phase}=$req if$req;$self->{requirements}{$phase}|| App::cpm::Requirement->new}for my$attr (qw(source directory distdata meta uri provides rev ref static_builder prebuilt)){no strict 'refs';*$attr=sub {my$self=shift;$self->{$attr}=shift if @_;$self->{$attr}}}sub distfile {my$self=shift;$self->{distfile}=shift if @_;$self->{distfile}|| $self->{uri}}sub distvname {my$self=shift;$self->{distvname}=shift if @_;$self->{distvname}||= do {CPAN::DistnameInfo->new($self->{distfile})->distvname || $self->distfile}}sub version {my$self=shift;$self->{version}=shift if @_;$self->{version}||= CPAN::DistnameInfo->new($self->{distfile})->version || 0}sub overwrite_provide {my ($self,$provide)=@_;my$overwrote;for my$exist (@{$self->{provides}}){if ($exist->{package}eq $provide->{package}){$exist=$provide;$overwrote++}}if (!$overwrote){push @{$self->{provides}},$provide}return 1}sub registered {my$self=shift;if (@_ && $_[0]){$self->{_state}|= STATE_REGISTERED}$self->{_state}& STATE_REGISTERED}sub deps_registered {my$self=shift;if (@_ && $_[0]){$self->{_state}|= STATE_DEPS_REGISTERED}$self->{_state}& STATE_DEPS_REGISTERED}sub resolved {my$self=shift;if (@_ && $_[0]){$self->{_state}=STATE_RESOLVED}$self->{_state}& STATE_RESOLVED}sub fetched {my$self=shift;if (@_ && $_[0]){$self->{_state}=STATE_FETCHED}$self->{_state}& STATE_FETCHED}sub configured {my$self=shift;if (@_ && $_[0]){$self->{_state}=STATE_CONFIGURED}$self->{_state}& STATE_CONFIGURED}sub installed {my$self=shift;if (@_ && $_[0]){$self->{_state}=STATE_INSTALLED}$self->{_state}& STATE_INSTALLED}sub providing {my ($self,$package,$version_range,$ref)=@_;for my$provide (@{$self->provides}){if ($provide->{package}eq $package){if (!$version_range or App::cpm::version->parse($provide->{version})->satisfy($version_range)){my$provide_ref=$provide->{ref}|| 'master';if ($ref and $provide_ref ne $ref){my$message=sprintf "%s provides ref %s (%s), but needs %s\n",$self->distfile,$package,$provide_ref,$ref;App::cpm::Logger->log(result=>"WARN",message=>$message);last}else {return 1}}else {my$message=sprintf "%s provides %s (%s), but needs %s\n",$self->distfile,$package,$provide->{version}|| 0,$version_range;App::cpm::Logger->log(result=>"WARN",message=>$message);last}}}return}sub equals {my ($self,$that)=@_;$self->distfile && $that->distfile and $self->distfile eq $that->distfile}1;
APP_CPM_DISTRIBUTION

$fatpacked{"App/cpm/Git.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'APP_CPM_GIT';
Expand Down Expand Up @@ -366,7 +366,7 @@ $fatpacked{"App/cpm/Resolver/Cascade.pm"} = '#line '.(1+__LINE__).' "'.__FILE__.
APP_CPM_RESOLVER_CASCADE

$fatpacked{"App/cpm/Resolver/Git.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'APP_CPM_RESOLVER_GIT';
package App::cpm::Resolver::Git;use strict;use warnings;use App::cpm::Git;use App::cpm::version;sub new {my ($class)=@_;return bless {},$class}sub fetch_rev {my ($class,$uri,$ref)=@_;return unless$ref;($uri)=App::cpm::Git->split_uri($uri);my ($rev,$version)=`git ls-remote --tags $uri $ref^{}` =~ /^(\p{IsXDigit}{40})\s+(?:refs\/tags\/(v?\d+\.\d+(?:\.\d+)?)(\^\{\})?$)?/;($rev,$version)=`git ls-remote --tags $uri $ref` =~ /^(\p{IsXDigit}{40})\s+(?:refs\/tags\/(v?\d+\.\d+(?:\.\d+)?)(\^\{\})?$)?/ unless$rev;;$rev=$ref if!$rev && $ref =~ /^[0-9a-fA-F]{4,}$/;return ($rev,$version)}sub resolve {my ($self,$job)=@_;return unless$job->{source}&& $job->{source}eq 'git';my ($rev,$version);if ($job->{ref}){($rev,$version)=$self->fetch_rev($job->{uri},$job->{ref})}else {my%tags;my ($uri)=App::cpm::Git->split_uri($job->{uri});my$out=`git ls-remote --tags $uri "*.*"`;while ($out =~ /^(\p{IsXDigit}{40})\s+refs\/tags\/(.+?)(\^\{\})?$/mg){my ($r,$v,$o)=($1,$2,$3);$tags{$v}=$r if!$tags{$v}|| $o}if (%tags){use version;my@tags=map +{version=>App::cpm::version->parse($_),rev=>$tags{$_},},grep {version::is_lax($_)}keys%tags;for my$tag (sort {$b->{version}<=> $a->{version}}@tags){if ($tag->{version}->satisfy($job->{version_range})){$version=$tag->{version}->stringify;$rev=$tag->{rev};last}}}else {($rev)=`git ls-remote $uri HEAD` =~ /^(\p{IsXDigit}+)\s/}}return {stop=>1,error=>'repo (`' .$job->{uri}.'`) or ref (`' .($job->{ref}||'master').'`) not found' }unless$rev;return {source=>'git',uri=>$job->{uri},ref=>$job->{ref},rev=>$rev,package=>$job->{package},version=>$version,}}1;
package App::cpm::Resolver::Git;use strict;use warnings;use App::cpm::Git;use App::cpm::version;sub new {my ($class)=@_;return bless {},$class}sub fetch_rev {my ($class,$uri,$ref)=@_;return unless$ref;($uri)=App::cpm::Git->split_uri($uri);my ($rev,$version)=`git ls-remote --tags $uri $ref^{}` =~ /^(\p{IsXDigit}{40})\s+(?:refs\/tags\/(v?\d+\.\d+(?:\.\d+)?)(\^\{\})?$)?/;($rev,$version)=`git ls-remote --tags $uri $ref` =~ /^(\p{IsXDigit}{40})\s+(?:refs\/tags\/(v?\d+\.\d+(?:\.\d+)?)(\^\{\})?$)?/ unless$rev;;($rev,$version)=`git ls-remote --refs $uri $ref` =~ /^(\p{IsXDigit}{40})\s+(?:refs\/tags\/(v?\d+\.\d+(?:\.\d+)?)(\^\{\})?$)?/ unless$rev;;$rev=$ref if!$rev && $ref =~ /^[0-9a-fA-F]{4,}$/;return ($rev,$version)}sub resolve {my ($self,$job)=@_;return unless$job->{source}&& $job->{source}eq 'git';my ($rev,$version);if ($job->{ref}){($rev,$version)=$self->fetch_rev($job->{uri},$job->{ref})}else {my%tags;my ($uri)=App::cpm::Git->split_uri($job->{uri});my$out=`git ls-remote --tags $uri "*.*"`;while ($out =~ /^(\p{IsXDigit}{40})\s+refs\/tags\/(.+?)(\^\{\})?$/mg){my ($r,$v,$o)=($1,$2,$3);$tags{$v}=$r if!$tags{$v}|| $o}if (%tags){use version;my@tags=map +{version=>App::cpm::version->parse($_),rev=>$tags{$_},},grep {version::is_lax($_)}keys%tags;for my$tag (sort {$b->{version}<=> $a->{version}}@tags){if ($tag->{version}->satisfy($job->{version_range})){$version=$tag->{version}->stringify;$rev=$tag->{rev};last}}}else {($rev)=`git ls-remote $uri HEAD` =~ /^(\p{IsXDigit}+)\s/}}return {stop=>1,error=>'repo (`' .$job->{uri}.'`) or ref (`' .($job->{ref}||'master').'`) not found' }unless$rev;return {source=>'git',uri=>$job->{uri},ref=>$job->{ref},rev=>$rev,package=>$job->{package},version=>$version,}}1;
APP_CPM_RESOLVER_GIT

$fatpacked{"App/cpm/Resolver/MetaCPAN.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'APP_CPM_RESOLVER_METACPAN';
Expand Down Expand Up @@ -1517,8 +1517,8 @@ use strict;
use warnings;

use App::cpm;
$App::cpm::GIT_DESCRIBE = '0.989-47-g65704ad-dirty';
$App::cpm::GIT_URL = 'https://github.com/my-mail-ru/cpm/tree/65704ad';
$App::cpm::GIT_DESCRIBE = '0.989-49-gcb298fa';
$App::cpm::GIT_URL = 'https://github.com/my-mail-ru/cpm/tree/cb298fa';

use App::cpm::CLI;
exit App::cpm::CLI->new->run(@ARGV);
Expand Down

0 comments on commit 10d14b3

Please sign in to comment.