Add detection of Summary and %description.

This commit is contained in:
stevenpritchard
2006-03-23 01:57:12 +00:00
parent a96ce38c17
commit 181b9c65a5
3 changed files with 82 additions and 28 deletions
+15 -14
View File
@@ -6,21 +6,22 @@ my $builder = Module::Build->new(
module_name => 'cpanspec',
license => 'perl',
dist_author => 'Steven Pritchard <steve@cpan.org>',
dist_version => '1.61',
dist_version => '1.62',
requires => {
'Archive::Tar' => 0,
'Archive::Zip' => 0,
'File::Basename' => 0,
'FileHandle' => 0,
'Getopt::Long' => 0,
'locale' => 0,
'LWP::UserAgent' => 0,
'Module::CoreList' => 0,
'POSIX' => 0,
'Parse::CPAN::Packages' => 0,
'Pod::Usage' => 0,
'Text::Autoformat' => 0,
'YAML' => 0,
'Archive::Tar' => 0,
'Archive::Zip' => 0,
'File::Basename' => 0,
'FileHandle' => 0,
'Getopt::Long' => 0,
'locale' => 0,
'LWP::UserAgent' => 0,
'Module::CoreList' => 0,
'POSIX' => 0,
'Parse::CPAN::Packages' => 0,
'Pod::Usage' => 0,
'Text::Autoformat' => 0,
'YAML' => 0,
'Pod::Simple::TextContent' => 0,
},
script_files => [
'cpanspec',
+4
View File
@@ -1,3 +1,7 @@
0.62
* Improve auto-detection of %description and Summary.
0.61 2006-03-11
* Add this file.
+63 -14
View File
@@ -10,7 +10,7 @@
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# $Id: cpanspec,v 1.12 2006/03/22 21:50:38 stevenpritchard Exp $
# $Id: cpanspec,v 1.13 2006/03/23 01:57:12 stevenpritchard Exp $
my $NAME="cpanspec";
my $VERSION='1.62';
@@ -187,6 +187,7 @@ use Pod::Usage;
use File::Basename;
use LWP::UserAgent;
use Parse::CPAN::Packages;
use Pod::Simple::TextContent;
# Apparently gets pulled in by another module.
#use Cwd;
@@ -349,9 +350,53 @@ sub extract($$$) {
sub get_description(%) {
my %args=@_;
my $pm="";
my ($summary, $description);
my $path=$args{module};
$path=~s,::,/,g;
my @pmfiles=("$args{name}-$args{version}/lib/$path.pm");
do {
push(@pmfiles, "$args{name}-$args{version}/$path.pm");
} while ($path=~s,^[^/]+/,,);
push(@pmfiles, "$args{name}-$args{version}/$args{module}")
if ($args{module} !~ /::/);
for my $file (@pmfiles) {
$pm=(grep { $_ eq $file or $_ eq "./$file" }
list_files($args{archive}, $args{type}))[0];
last if $pm;
}
if ($pm) {
verbose "Trying to fetch description from $pm...";
if (my $content=extract($args{archive}, $args{type}, $pm)) {
my $parser=Pod::Simple::TextContent->new()
or die "Pod::Simple::TextContent->new() failed: $!\n";
$parser->no_whining(1);
my $rendered="";
$parser->output_string(\$rendered);
$parser->parse_string_document($content);
if ($parser->content_seen and $rendered) {
if ($rendered=~/DESCRIPTION\s+(\S.*?)\n\n/s) {
$description=$1;
}
if ($rendered=~/NAME\s*$args{module}\s[-\s]*(\S[^\n]*)/s) {
$summary=$1;
}
return($description, $summary) if (defined($description));
}
} else {
warn "Failed to read $pm from $args{filename}"
. ($args{type} eq 'tar'
? (": " . $args{archive}->error()) : "") . "\n";
}
}
if (my $readme=(sort { $a cmp $b } (grep /README/i, @{$args{files}}))[0]) {
verbose "Trying to fetch description from $readme...";
my $readme=(sort { $a cmp $b } (grep /README/i, @{$args{files}}))[0];
if ($readme) {
if (my $content=extract($args{archive}, $args{type},
"$args{name}-$args{version}/$readme")) {
$content=~s/\r//g; # Why people use DOS text, I'll never understand.
@@ -359,16 +404,17 @@ sub get_description(%) {
$string=~s/^\n+//;
if ((my @tmp=split "\n", $string) > 2
and $string !~ /^[#\-=]/) {
return $string;
return($string, undef);
}
}
} else {
warn "Failed to read $readme from $args{filename}"
. ($args{type} eq 'tar' ? (": " . $args{archive}->error()) : "") . "\n";
. ($args{type} eq 'tar'
? (": " . $args{archive}->error()) : "") . "\n";
}
}
return undef;
return(undef, undef);
}
# Set locale to en_US.UTF8 so that dates in changelog will be correct
@@ -492,13 +538,14 @@ for my $file (@ARGV) {
. "/" . $file;
$source=~s/$version/\%{version}/;
my $description=get_description(
archive => $archive,
type => $type,
filename => $file,
name => $name,
version => $version,
files => \@files,
my ($description,$summary)=get_description(
archive => $archive,
type => $type,
filename => $file,
name => $name,
module => $module,
version => $version,
files => \@files,
);
if (defined($description) and $description) {
@@ -512,6 +559,8 @@ for my $file (@ARGV) {
$description="$module Perl module";
}
$summary="$module Perl module" if (!defined($summary));
my @doc=sort { $a cmp $b } grep {
!/\//
and !/\.(pl|xs|h|c|pm|in|pod)$/i
@@ -719,7 +768,7 @@ for my $file (@ARGV) {
Name: $prefix$name
Version: $version
Release: $release$disttag
Summary: $module Perl module
Summary: $summary
License: $license
Group: Development/Libraries
URL: $url