diff options
author | Justin Davis <jrcd83@gmail.com> | 2012-01-07 18:58:18 +0100 |
---|---|---|
committer | Justin Davis <jrcd83@gmail.com> | 2012-01-07 18:58:18 +0100 |
commit | 0fd17fd113f7e6ac696b574c7929444cfb88b52d (patch) | |
tree | b9c24672f5d7c6dd6cbea236e35c3eee25e40759 /lib/metas/perl.d/perl-dist | |
parent | 23b61cc4ac925c0139c3456c4672dc2d306af7fe (diff) | |
parent | 65f503976340ea03c030b26af8691e2f373f1377 (diff) | |
download | genpkg-0fd17fd113f7e6ac696b574c7929444cfb88b52d.tar.gz genpkg-0fd17fd113f7e6ac696b574c7929444cfb88b52d.tar.xz |
Merge changed from other puter.
Fix return value snafus, etc.
Diffstat (limited to 'lib/metas/perl.d/perl-dist')
-rwxr-xr-x | lib/metas/perl.d/perl-dist | 59 |
1 files changed, 40 insertions, 19 deletions
diff --git a/lib/metas/perl.d/perl-dist b/lib/metas/perl.d/perl-dist index cefcaf9..3259fd8 100755 --- a/lib/metas/perl.d/perl-dist +++ b/lib/metas/perl.d/perl-dist @@ -273,42 +273,63 @@ sub _distsofmods my (@mods) = @_; return () if(@mods == 0); + @mods = _nocore(@mods); - my $var = $ENV{'PKGVAR'} - or die "$PROG: PKGVAR env variable is unset\n"; + my $var = _vardir(); open(my $fh, '<', "$var/cpanmods") or die "$PROG: failed to open $var/cpanmods: $!"; - my (@hunted, %dists) = @mods; + my %mods = map { ($_ => 1) } @mods; + my %dists; local $/ = ''; RECLOOP: while(my $rec = <$fh>) { - my ($dist, @modvers) = split(/\n/, $rec); - for (@modvers) { - my ($m) = split; - - CMPLOOP: - for my $i (0 .. $#hunted) { - next CMPLOOP unless($hunted[$i] eq $m); - $dists{$m} = $dist; - splice @hunted, $i, 1; - last RECLOOP if(@hunted == 0); - last CMPLOOP; - } + last RECLOOP unless(keys %mods > 0); + + my($dist, @mvs) = split(/\n/, $rec); + MODLOOP: + for(@mvs){ + my($m) = split; + my $fnd = delete($mods{$m}) or next; + $dists{$m} = $dist; } } - if (@hunted) { - for my $lost (@hunted) { - print STDERR "$PROG: failed to find module $lost\n"; + my @lost = keys %mods; + if(@lost){ + for my $m (@lost){ + print STDERR "$PROG: failed to find module $m\n"; } - exit 2; + exit 1; } return %dists; } +sub _nocore +{ + my (@mods) = @_; + + my $path = _vardir() . '/coremods'; + open(my $if, '<', $path) or die "$PROG: open $path: $!"; + + my %mods = map { ($_ => 1) } @mods; + while(<$if>){ + my ($m) = split; + delete $mods{$m}; + } + + close($if); + return keys %mods; +} + +sub _vardir +{ + return $ENV{'PKGVAR'} + or die "$PROG: PKGVAR env variable is unset\n"; +} + #----------------------------------------------------------------------------- package main; |