CPAN-Unpack

 view release on metacpan or  search on metacpan

lib/CPAN/Unpack.pm  view on Meta::CPAN

    my %unpacked_versions;
    if ( -e "$destination/unpacked_versions.yml" ) {
        local $/;
        open( my $fh, "<", "$destination/unpacked_versions.yml" );
        %unpacked_versions = %{ YAML::Any::Load(<$fh>) };
        close $fh;
    }

    sub fixme {
        my $path = $_;
        my $mode = ( stat($path) )[2];
        if ( S_ISDIR($mode) ) {
            chmod( ( S_IMODE($mode) | S_IRWXU ), $path )
                unless ( ( $mode & S_IRWXU ) == S_IRWXU );
        }
    }
    my $p = Parse::CPAN::Packages::Fast->new($packages_filename);
    foreach my $distribution ( $p->latest_distributions ) {
        $counter++;
        my $want             = "$destination/" . $distribution->dist;
        my $archive_filename = "$cpan/authors/id/" . $distribution->prefix;

lib/CPAN/Unpack.pm  view on Meta::CPAN

        $extract->extract( to => $to );

        # Fix up broken permissions
        File::Find::find( { wanted => \&fixme, follow => 0, no_chdir => 1 },
            $to );

        my @files = <$to/*>;
        my $files = @files;
        if ( $files == 1 ) {
            my $file = $files[0];
            if ( S_ISDIR( ( stat( $file ) )[2] ) ) {
                rename $file, $want;
            } else {
                mkdir $want;
                rename $file, "$want/" . basename($file);
            }
            rmdir $to;
        } else {
            rename $to, $want;
        }



( run in 0.762 second using v1.01-cache-2.11-cpan-49f99fa48dc )