App-ThisDist

 view release on metacpan or  search on metacpan

lib/App/ThisDist.pm  view on Meta::CPAN

            }
            last GUESS;
        }

      FROM_BUILD_PL: {
            last unless -f "Build.PL";
            log_debug "Found Build.PL";
            my $content = File::Slurper::read_text("Build.PL");
            unless ($content =~ /use Module::Build/) {
                log_debug "Build.PL doesn't seem to use Module::Build, skipped";
                last;
            }
            unless ($content =~ /module_name\s*=>\s*["'](.+?)["']/s) {
                log_debug "Couldn't extract value of module_name from Build.PL, skipped";
                last;
            }
            $distname = $1; $distname =~ s/::/-/g;
            log_debug "Got distname=$distname from Build.PL";
            $detailinfo->{source} = "Build.PL";
            # XXX extract version?
            last GUESS;
        }

        # note: Build script does not contain dist name

      FROM_GIT_CONFIG: {
            last; # currently disabled
            last unless -f ".git/config";
            log_debug "Found .git/config";
            my $content = File::Slurper::read_text(".git/config");
            while ($content =~ /^\s*url\s*=\s*(.+)/mg) {
                my $url = $1;
                log_debug "Found URL '$url' in git config";
                require CPAN::Dist::FromURL;
                my $res = CPAN::Dist::FromURL::extract_cpan_dist_from_url($url);
                if (defined $distname) {
                    log_debug "Guessed distname=$distname from .git/config URL '$url'";
                    $detailinfo->{source} = "git config";
                    # XXX extract version?
                    last GUESS;
                }
            }
        }

      __DISABLED__FROM_REPO_NAME: {
            last; # currently disabled
            log_debug "Using CPAN::Dist::FromRepoName to guess from dir name ...";
            require CPAN::Dist::FromRepoName;
            my $res = CPAN::Dist::FromRepoName::extract_cpan_dist_from_repo_name($dir_basename);
            if (defined $res) {
                $distname = $res;
                log_debug "Guessed distname=$distname from repo name '$dir_basename'";
                $detailinfo->{source} = "repo name";
                # XXX extract version?
                last GUESS;
            }
        }

      FROM_ARCHIVE: {
            require Filename::Type::Perl::Release;
            # if there is a single archive in the directory which looks like a
            # perl release, use that.
            my @files = grep { -f } glob "*";
            my ($distfile, $dist, $ver);
            for my $file (@files) {
                my $res = Filename::Type::Perl::Release::check_perl_release_filename(filename=>$file);
                next unless $res;
                last FROM_ARCHIVE if defined $dist;
                $dist = $res->{distribution};
                $ver  = $res->{version};
                $distfile = $file;
            }
            last unless defined $dist;
            $distname = $dist;
            $distver  = $ver;
            log_debug "Guessed distname=$distname from a single perl archive file in the directory ($distfile)";
            $detailinfo->{source} = "archive";
            $detailinfo->{archive_file} = $distfile;
            last GUESS;
        }

        log_debug "Can't guess distribution, giving up";
    } # GUESS

    if ($detail) {
        $detailinfo->{dist} = $distname;
        $detailinfo->{dist_version} = $distver;
        $detailinfo;
    } else {
        return unless defined $distname;
        $extract_version ? "$distname ".(defined $distver ? $distver : "?") : $distname;
    }
}

sub this_mod {
    my $res = this_dist(@_);
    return $res unless defined $res;
    if (ref $res) {
        return $res unless $res->{dist} && $res->{dist} =~ /\S/;
        ($res->{module} = $res->{dist}) =~ s/-/::/g;
    } else {
        return $res unless $res =~ /\S/;
        $res =~ s/-/::/g;
    }
    $res;
}

1;
# ABSTRACT: Print Perl {distribution,module,author,...} associated with current directory

__END__

=pod

=encoding UTF-8

=head1 NAME

App::ThisDist - Print Perl {distribution,module,author,...} associated with current directory

=head1 VERSION



( run in 1.951 second using v1.01-cache-2.11-cpan-39bf76dae61 )