pax_global_header00006660000000000000000000000064123304642350014514gustar00rootroot0000000000000052 comment=32bbe6aa87ea306f90341e8b17e797a5627db805 Source-Package-0.05/000075500000000000000000000000001233046423500142275ustar00rootroot00000000000000Source-Package-0.05/.gear/000075500000000000000000000000001233046423500152235ustar00rootroot00000000000000Source-Package-0.05/.gear/rules000064400000000000000000000001031233046423500162720ustar00rootroot00000000000000tar: . name=Source-Package-@version@ base=Source-Package-@version@ Source-Package-0.05/Changes000064400000000000000000000001521233046423500155200ustar00rootroot000000000000000.01 Wed Aug 21 12:22:43 EEST 2013 - released 0.02 Fri Apr 18 00:17:18 EEST 2014 - added comparators Source-Package-0.05/Makefile.PL000064400000000000000000000012071233046423500162010ustar00rootroot00000000000000use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Source::Repository', 'VERSION_FROM' => 'lib/Source/Package.pm', # finds $VERSION 'PREREQ_PM' => { 'Getopt::Long' => 0, , }, # 'EXE_FILES' => [ '' ], # 'PL_FILES' => { 'cpanflute2.PL' => 'cpanflute2' }, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 ( # ABSTRACT_FROM => 'lib/RPM/Source/Package.pm', # retrieve abstract from module AUTHOR => 'Igor Vlasenko ') : ()), ); Source-Package-0.05/lib/000075500000000000000000000000001233046423500147755ustar00rootroot00000000000000Source-Package-0.05/lib/Source/000075500000000000000000000000001233046423500162355ustar00rootroot00000000000000Source-Package-0.05/lib/Source/Package.pm000064400000000000000000000026401233046423500201300ustar00rootroot00000000000000package Source::Package; use File::Path qw(make_path remove_tree); use File::Basename; use strict; use warnings; our $VERSION=0.02; sub new { my $proto=shift; my $class=ref($proto) || $proto; my $self = { -cachedir=>'in', -epoch => undef, -version => 0, -release => 0, @_, }; bless($self,$class); } sub version {return $_[0]->{-version}} sub release {return $_[0]->{-release}} sub epoch {return $_[0]->{-epoch}} sub name {return $_[0]->{-name}} sub url {return $_[0]->{-url}} sub file { my ($self)=@_; my $file=$self->{-file}; return $file if defined $file; return $self->download if $self->{-url}; return $self->{-repo}->download if $self->{-repo}; return; } ### TODO should be private ##### ### TODO check url? sub download { my ($self)=@_; my $file=$self->{-file}; return $file if defined $file and -e $file and -s $file; my $url=$self->url; my $filename=basename($url); $filename=~s/\?.*$//; my $cachedir=$self->__cachedir; make_path($cachedir); $file="$cachedir/$filename"; return $file if -e $file and -s $file; unlink $file; `wget -nv -O $file $url`; unlink $file if -z $file; die "download failed" unless -e $file; $self->{-file}=$file; return $file; } # for download only sub __cachedir { my ($self)=@_; my $cachedir=$self->{-cachedir}; return $cachedir if defined $cachedir; return 'in'; } 1; Source-Package-0.05/lib/Source/Package/000075500000000000000000000000001233046423500175705ustar00rootroot00000000000000Source-Package-0.05/lib/Source/Package/Comparator.pm000064400000000000000000000025701233046423500222410ustar00rootroot00000000000000package Source::Package::Comparator; use strict; use warnings; use Source::Package::Comparators; our $VERSION=0.001; our $verbose; our $default_epoch_comparator= \&Source::Package::Comparators::null_epoch_comparator; our $default_version_comparator=\&Source::Package::Comparators::pure_rpm_version_comparator; our $default_release_comparator=\&Source::Package::Comparators::pure_rpm_release_comparator; sub new { my $class = shift; my $self = { -epoch_comparator => $default_epoch_comparator, -version_comparator => $default_version_comparator, -release_comparator => $default_release_comparator, @_ }; bless $self, $class; return $self; } #Binary "cmp" returns -1, 0, or 1 depending on whether the left argument #is stringwise less than, equal to, or greater than the right argument. sub cmp { my ($self,$origin, $dest) =@_; return 1 unless $dest; return -1 unless $origin; my $cmp =&{$self->{-epoch_comparator}}($origin, $dest); if ($cmp!=0) { print STDERR "Package::Comparator: epoch:". $origin->epoch.' cmp '.$dest->epoch." = $cmp\n" if $verbose; return $cmp; } $cmp =&{$self->{-version_comparator}}($origin, $dest); if ($cmp!=0) { print STDERR "Package::Comparator: version:". $origin->version.' cmp '.$dest->version." = $cmp\n" if $verbose; return $cmp; } return &{$self->{-release_comparator}}($origin, $dest); } 1; Source-Package-0.05/lib/Source/Package/Comparators.pm000064400000000000000000000021551233046423500224230ustar00rootroot00000000000000package Source::Package::Comparators; use strict; use warnings; use Carp; use RPM qw/evrcmp vercmp/; use Source::Package::Comparators::Raw; our $VERSION=0.001; our $verbose=0; sub null_comparator { my ($origin, $dest)=@_; return 0; } sub null_epoch_comparator { my ($origin, $dest)=@_; return 0; } sub generic_epoch_comparator { my ($origin, $dest)=@_; return $origin->epoch <=> $dest->epoch; } sub rpm40_epoch_comparator { my ($origin, $dest)=@_; return &__rpm40epoch($origin->epoch) <=> &__rpm40epoch($dest->epoch); } sub __rpm40epoch { return $_[0] ? $_[0]: 0; } sub pure_rpm_version_comparator { my ($origin, $dest)=@_; return vercmp($origin->version, 0, $dest->version, 0); } sub pure_rpm_release_comparator { my ($origin, $dest)=@_; return vercmp(0, $origin->release, 0, $dest->release); } sub null_release_comparator { my ($origin, $dest)=@_; return 0; } sub rpm_plus_perl_version_comparator { my ($origin, $dest)=@_; return &Source::Package::Comparators::Raw::_rpm_plus_perl_version_cmp(undef,$dest->name,$origin->version, $dest->version); } 1; Source-Package-0.05/lib/Source/Package/Comparators/000075500000000000000000000000001233046423500220625ustar00rootroot00000000000000Source-Package-0.05/lib/Source/Package/Comparators/Raw.pm000064400000000000000000000036051233046423500231550ustar00rootroot00000000000000package Source::Package::Comparators::Raw; use strict; use warnings; use Carp; use version; use RPM qw/evrcmp vercmp/; our $VERSION=0.001; our $verbose=0; ###### PROTECTED ############################################# # used in ALTLinuxImport sub _rpm_plus_perl_version_cmp { my ($originname, $destname, $originversion, $destversion)=@_; Carp::confess 'Oops!: undefined versions' unless defined $destversion and defined $originversion; $originname='(undef)' if not defined $originname; if ($destname =~/^perl-/) { my $compare_result; eval { $compare_result = &perl_version_cmp($originversion, $destversion); }; die "_rpm_plus_perl_version_cmp: $originname, $destname, $originversion, $destversion: $@.\n" if $@; return $compare_result; } return vercmp($originversion, 0, $destversion, 0); } sub perl_version_cmp { my ($originversion,$destversion)=@_; Carp::confess 'incorrect call: 3-rd,4-th args found!' if $_[2] or $_[3]; my $cmp=&__raw_perl_version_cmp($originversion,$destversion); $cmp=0 if $cmp>0 and $destversion.'.0' eq $originversion; # like, 1.4 equal 1.4.0 $cmp=0 if $cmp<0 and $originversion.'.0' eq $destversion; # like, 1.4 equal 1.4.0 return $cmp; } ###### PRIVATE ############################################# sub __raw_perl_version_cmp { my ($ver1, $ver2)=@_; my ($v1s,$tail1)=&__raw_perl_ver_trim($ver1); my ($v2s,$tail2)=&__raw_perl_ver_trim($ver2); my $v1=version->parse($v1s); my $v2=version->parse($v2s); if ($v1 == $v2) { #warn "tails found in $v1s $v2s\n" if $tail1 or $tail2; return RPM::evrcmp($tail1, $tail2); } #warn "methods differ! $v1s, $v2s\n" if (evrcmp($s1, $s2) < 0) xor ($v1 < $v2); return $v1 cmp $v2; } sub __raw_perl_ver_trim { my $vers=shift; $vers=~s/^V/v/; $vers=~s/^(v?[\d\.]+)([^\d\.].*)?$/$1/; my $tail=$2; $tail||=''; return ($vers,$tail); } 1; Source-Package-0.05/lib/Source/Package/Pair.pm000064400000000000000000000020421233046423500210170ustar00rootroot00000000000000package Source::Package::Pair; use strict; use warnings; our $VERSION=0.001; sub new { my $class=shift; my $self = { @_, }; #print STDERR "Source::Package::Pair: new: ",join(' ',@_),"\n"; bless($self,$class); } sub destname { my ($self)=@_; return $self->{-destname}; } sub originname { my ($self)=@_; return $self->{-originname}; } sub origin { my ($self)=@_; return $self->{-origin} if exists $self->{-origin}; my $origin; my $originrepo=$self->{-originrepo}; my $originname=$self->{-originname}; $origin=$originrepo->name2pkg($originname) if $originrepo and defined ($originname); # even if it is undef $self->{-origin}=$origin; return $origin; } sub dest { my ($self)=@_; return $self->{-dest} if exists $self->{-dest}; my $dest; my $destrepo=$self->{-destrepo}; my $destname=$self->{-destname}; $dest = $destrepo->name2pkg($destname) if $destrepo and defined ($destname); # even if it is undef $self->{-dest}=$dest; return $dest; } 1; Source-Package-0.05/perl-Source-Package.spec000064400000000000000000000021111233046423500206270ustar00rootroot00000000000000%define module Source-Package Name: perl-%module Version: 0.05 Release: alt1 BuildArch: noarch Packager: Igor Yu. Vlasenko Summary: %module - Perl extension for converting SRPM and spec files Group: Development/Perl License: GPL or Artistic Source: %module-%version.tar Url: http://search.cpan.org/dist/%module BuildRequires: perl-devel perl-RPM #Requires: perl-RPM-Source-Editor > 0.801 Conflicts: perl-Source-Repository < 0.12 %description %summary %prep %setup -q -n %module-%version %build %perl_vendor_build %install %perl_vendor_install %files %doc Changes #doc README %perl_vendor_privlib/Source* %changelog * Thu May 01 2014 Igor Vlasenko 0.05-alt1 - autodownload * Fri Apr 18 2014 Igor Vlasenko 0.04-alt1 - added Source::Package::Comparators::Raw * Fri Apr 18 2014 Igor Vlasenko 0.03-alt1 - added Source::Package::Pair * Fri Apr 18 2014 Igor Vlasenko 0.02-alt1 - added Source::Package::Comparator * Wed Aug 21 2013 Igor Vlasenko 0.01-alt1 - first build for Sisyphus