#!/usr/bin/perl -w

use strict;
use warnings;

# $Id: $

use version;
use CPAN::Config;
use IO::Uncompress::Gunzip qw(gunzip $GunzipError) ;

my $HEAD = <<__HEAD__;
---
comment: |
    Duplicates
    \$Id: _stro_invalid_cpan_duplicates.yml 209 2010-03-21 13:41:11Z stro \$
match:
  distribution: |
    ^(?x:
    .^   # never matches, only purpose is to let things align nicely
    |==========================================================================
    | THIS FILE IS GENERATED AUTOMATICALLY, DO NOT EDIT!
    |==========================================================================
__HEAD__

my $FOOT = <<__FOOT__;
    )|
disabled: 1
__FOOT__

my $packages = $CPAN::Config->{'keep_source_where'} . '/modules/02packages.details.txt.gz';

if (open my $PKD, '<', $packages) {
    binmode($PKD);
    my $details;
    if (my $gz = gunzip $PKD => \$details) {
        close $PKD;

        my %mnames;

#        use Data::Dumper;
#        print Data::Dumper->Dump([\@details]);
        print $HEAD;

        foreach (split $/, $details) {
            if (m!^(.*?)\s+(.*?)\s+\w/\w\w/(.*?)$!) {
                #A                                  0.01  A/AD/ADAMK/Module-Install-0.80.tar.gz
                #AAA::Demo                         undef  J/JW/JWACH/Apache-FastForward-1.1.tar.gz
                #AAA::eBay                         undef  J/JW/JWACH/Apache-FastForward-1.1.tar.gz
                my ($module, $version, $path) = ($1, $2, $3);
                my $name = $path;
                $name =~ s!(\.tar\.gz)|(\.gz)|(\.zip)$!!x;
                if ($path =~ m!^(.*?)-v?([\d\.]+)!) {
                    ($name, $version) = ($1, $2);
                }
                # Store
                $mnames{$name}->{$version} = $path . "        #" . $module;
            }
        }

        foreach my $name (sort keys %mnames) {
            if (scalar keys %{ $mnames{$name} } > 1) {
                my @list = sort { version->parse($b) <=> version->parse($a) } keys %{ $mnames{$name} };
                print "    |" . $mnames{$name}->{$_}, $/ foreach splice(@list, 1); # skip 1st
#                print $/;
            }
        }

        print $FOOT;

    } else {
        die "gzip failed: $GunzipError $/";
    }

} else {
    die "Cannot open $packages: $! $/";
}