X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=samples%2Fgengentooisms;h=24238e3b0ae6402528f1d6d80c1d7ae912d8a7ca;hb=f351c1bc80e3570021d5d0c6231acd6d46fadbaf;hp=980ecbf7dcaf56b8b4418080ad5deb7a6e347853;hpb=5b30d3775087ec80c860185b6fe18998629beacf;p=perl%2Fmodules%2FCPANPLUS-Dist-Gentoo.git diff --git a/samples/gengentooisms b/samples/gengentooisms index 980ecbf..24238e3 100755 --- a/samples/gengentooisms +++ b/samples/gengentooisms @@ -32,6 +32,8 @@ use constant STATE_FILE => 'gentooisms.state.sto'; my %is_on_cpan = ( 'Audio-CD-disc-cover' => 0, + 'Video-Frequencies' => 0, + 'Sphinx-Search' => 1, 'WattsUp-Daemon' => 1, ); @@ -41,15 +43,7 @@ sub p { printf $fmt, @args; } -sub timestamp { - my $tm = File::Spec->catfile(PORTAGE, 'metadata', 'timestamp.chk'); - return unless -e $tm; - open my $fh, '<', $tm; - local $/; - <$fh>; -} - -my $timestamp = timestamp(); +my $timestamp = CPANPLUS::Dist::Gentoo::Maps::get_portage_timestamp(PORTAGE); { my $ua; @@ -193,6 +187,28 @@ sub parse_portage_tree { local $@; eval { $pcp->latest_distribution($pseudo_dist->dist) }; }; + + unless (defined $latest_dist) { + print "no\n"; + p(2, 'is similiar to a module indexed in another distribution of the CPAN... '); + (my $mod_name = $pkg_name) =~ s/-/::/g; + $latest_dist = do { + local $@; + eval { + my $module = $pcp->package($mod_name); + defined $module ? $module->distribution : undef; + }; + }; + if (defined $latest_dist) { + # Re-forge the pseudo dist so that it will pick up the correct dist + # name when looking for a mismatch. + $pseudo_dist = CPAN::DistnameInfo->new( + $latest_dist->dist . '-' . $pseudo_dist->version + . '.' . $pseudo_dist->extension + ); + } + } + my ($latest_file, $latest_author); if (defined $latest_dist) { $latest_file = $latest_dist->filename; @@ -263,7 +279,7 @@ my $already_parsed = 0; if (-e STATE_FILE) { my $state = Storable::retrieve(STATE_FILE); - if ($state->[0] eq $timestamp) { + if ($state->[0] == $timestamp) { printf "State retrieved from %s\n", STATE_FILE; @not_on_cpan = @{ $state->[1] }; @unfindable = @{ $state->[2] }; @@ -280,7 +296,7 @@ if (-e STATE_FILE) { unless ($already_parsed) { if (-e DATA_FILE) { my $data = Storable::retrieve(DATA_FILE); - if ($data->[0] eq $timestamp) { + if ($data->[0] == $timestamp) { printf "Data retrieved from %s\n", DATA_FILE; %fetched_uri = %{ $data->[1] }; } else { @@ -359,11 +375,15 @@ open my $dst, '>', TARGET; my $max = max map length, keys %name_mismatch; SRC: while (<$src>) { - print $dst $_; - if (/^__DATA__$/) { + if (/^sub TIMESTAMP/) { + print $dst "sub TIMESTAMP () { $timestamp }\n"; + } elsif (/^__DATA__$/) { + print $dst "__DATA__\n"; printf $dst "%s%s %s\n", $_, (' ' x ($max - length)), $name_mismatch{$_} for sort keys %name_mismatch; last SRC; + } else { + print $dst $_; } }