Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-Module-Starter for
openSUSE:Factory checked in at 2026-01-17 14:55:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Module-Starter (Old)
and /work/SRC/openSUSE:Factory/.perl-Module-Starter.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Module-Starter"
Sat Jan 17 14:55:14 2026 rev:19 rq:1327636 version:1.820.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Module-Starter/perl-Module-Starter.changes
2026-01-13 21:34:58.937031576 +0100
+++
/work/SRC/openSUSE:Factory/.perl-Module-Starter.new.1928/perl-Module-Starter.changes
2026-01-17 14:56:27.159445116 +0100
@@ -1,0 +2,15 @@
+Sun Jan 11 05:44:49 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 1.820.0 (1.82)
+ see /usr/share/doc/packages/perl-Module-Starter/Changes
+
+ 1.82 2026-01-10 21:22:39 CET
+ * Fix compilations on 5.12 and earlier. (Grinnz)
+ 1.81 2026-01-09 21:41:05 CET
+ * Fixed breakage from 1.80.
+ * Try to resolve wild dzil auto-version.
+ 1.80 2026-01-09 11:39:15 CET
+ * Fixed problems with the multi-author feature in last release.
+ (Thanks, @ryoskzypu!)
+
+-------------------------------------------------------------------
Old:
----
Module-Starter-1.79.tar.gz
New:
----
Module-Starter-1.82.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Module-Starter.spec ++++++
--- /var/tmp/diff_new_pack.L7j1Ib/_old 2026-01-17 14:56:27.771470704 +0100
+++ /var/tmp/diff_new_pack.L7j1Ib/_new 2026-01-17 14:56:27.775470871 +0100
@@ -18,10 +18,10 @@
%define cpan_name Module-Starter
Name: perl-Module-Starter
-Version: 1.790.0
+Version: 1.820.0
Release: 0
-# 1.79 -> normalize -> 1.790.0
-%define cpan_version 1.79
+# 1.82 -> normalize -> 1.820.0
+%define cpan_version 1.82
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: Simple starter kit for any module
URL: https://metacpan.org/release/%{cpan_name}
++++++ Module-Starter-1.79.tar.gz -> Module-Starter-1.82.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/Changes
new/Module-Starter-1.82/Changes
--- old/Module-Starter-1.79/Changes 2026-01-03 14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/Changes 2026-01-10 21:22:41.000000000 +0100
@@ -1,5 +1,19 @@
Revision history for Perl extension Module::Starter
+1.82 2026-01-10 21:22:39 CET
+
+ * Fix compilations on 5.12 and earlier. (Grinnz)
+
+1.81 2026-01-09 21:41:05 CET
+
+ * Fixed breakage from 1.80.
+ * Try to resolve wild dzil auto-version.
+
+1.80 2026-01-09 11:39:15 CET
+
+ * Fixed problems with the multi-author feature in last release.
+ (Thanks, @ryoskzypu!)
+
1.79 2026-01-03 14:57:20 CET
* GH #79: `--force` will only overwrite files it needs to generate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/MANIFEST
new/Module-Starter-1.82/MANIFEST
--- old/Module-Starter-1.79/MANIFEST 2026-01-03 14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/MANIFEST 2026-01-10 21:22:41.000000000 +0100
@@ -32,6 +32,7 @@
t/data/templates/t/pod.t
t/lib/Module/Starter/TestPlugin.pm
t/module-starter.t
+t/test-author.t
t/test-dist.t
t/test-force.t
xt/author/00-compile.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/META.json
new/Module-Starter-1.82/META.json
--- old/Module-Starter-1.79/META.json 2026-01-03 14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/META.json 2026-01-10 21:22:41.000000000 +0100
@@ -70,23 +70,23 @@
"provides" : {
"Module::Starter" : {
"file" : "lib/Module/Starter.pm",
- "version" : "1.79"
+ "version" : "1.82"
},
"Module::Starter::App" : {
"file" : "lib/Module/Starter/App.pm",
- "version" : "1.79"
+ "version" : "1.82"
},
"Module::Starter::BuilderSet" : {
"file" : "lib/Module/Starter/BuilderSet.pm",
- "version" : "1.79"
+ "version" : "1.82"
},
"Module::Starter::Plugin::Template" : {
"file" : "lib/Module/Starter/Plugin/Template.pm",
- "version" : "1.79"
+ "version" : "1.82"
},
"Module::Starter::Simple" : {
"file" : "lib/Module/Starter/Simple.pm",
- "version" : "1.79"
+ "version" : "1.82"
}
},
"release_status" : "stable",
@@ -102,7 +102,7 @@
},
"x_IRC" : "irc://irc.perl.org/#toolchain"
},
- "version" : "1.79",
+ "version" : "1.82",
"x_contributors" : [
"Brendan Byrd <[email protected]>",
"Brian Manning <[email protected]>",
@@ -125,13 +125,14 @@
"petdance <petdance@bb7b6759-d628-0410-895d-7b6b7dc49dde>",
"Richard Poole <[email protected]>",
"rsignes <rsignes@bb7b6759-d628-0410-895d-7b6b7dc49dde>",
+ "ryoskzypu <[email protected]>",
"sawyer <sawyer@dungeon.(none)>",
"Sawyer X <[email protected]>",
"Shlomi Fish <[email protected]>",
"xdaveg <xdaveg@bb7b6759-d628-0410-895d-7b6b7dc49dde>"
],
- "x_generated_by_perl" : "v5.34.1",
- "x_serialization_backend" : "Cpanel::JSON::XS version 4.40",
+ "x_generated_by_perl" : "v5.34.0",
+ "x_serialization_backend" : "Cpanel::JSON::XS version 4.27",
"x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/META.yml
new/Module-Starter-1.82/META.yml
--- old/Module-Starter-1.79/META.yml 2026-01-03 14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/META.yml 2026-01-10 21:22:41.000000000 +0100
@@ -26,19 +26,19 @@
provides:
Module::Starter:
file: lib/Module/Starter.pm
- version: '1.79'
+ version: '1.82'
Module::Starter::App:
file: lib/Module/Starter/App.pm
- version: '1.79'
+ version: '1.82'
Module::Starter::BuilderSet:
file: lib/Module/Starter/BuilderSet.pm
- version: '1.79'
+ version: '1.82'
Module::Starter::Plugin::Template:
file: lib/Module/Starter/Plugin/Template.pm
- version: '1.79'
+ version: '1.82'
Module::Starter::Simple:
file: lib/Module/Starter/Simple.pm
- version: '1.79'
+ version: '1.82'
requires:
File::Path: '0'
File::Spec: '0'
@@ -56,7 +56,7 @@
bugtracker: https://github.com/xsawyerx/module-starter/issues
homepage: https://github.com/xsawyerx/module-starter
repository: https://github.com/xsawyerx/module-starter.git
-version: '1.79'
+version: '1.82'
x_contributors:
- 'Brendan Byrd <[email protected]>'
- 'Brian Manning <[email protected]>'
@@ -79,10 +79,11 @@
- 'petdance <petdance@bb7b6759-d628-0410-895d-7b6b7dc49dde>'
- 'Richard Poole <[email protected]>'
- 'rsignes <rsignes@bb7b6759-d628-0410-895d-7b6b7dc49dde>'
+ - 'ryoskzypu <[email protected]>'
- 'sawyer <sawyer@dungeon.(none)>'
- 'Sawyer X <[email protected]>'
- 'Shlomi Fish <[email protected]>'
- 'xdaveg <xdaveg@bb7b6759-d628-0410-895d-7b6b7dc49dde>'
-x_generated_by_perl: v5.34.1
+x_generated_by_perl: v5.34.0
x_serialization_backend: 'YAML::Tiny version 1.73'
x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/Makefile.PL
new/Module-Starter-1.82/Makefile.PL
--- old/Module-Starter-1.79/Makefile.PL 2026-01-03 14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/Makefile.PL 2026-01-10 21:22:41.000000000 +0100
@@ -36,7 +36,7 @@
"File::Spec" => 0,
"Test::More" => "0.94"
},
- "VERSION" => "1.79",
+ "VERSION" => "1.82",
"test" => {
"TESTS" => "t/*.t"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/bin/module-starter
new/Module-Starter-1.82/bin/module-starter
--- old/Module-Starter-1.79/bin/module-starter 2026-01-03 14:57:21.000000000
+0100
+++ new/Module-Starter-1.82/bin/module-starter 2026-01-10 21:22:41.000000000
+0100
@@ -6,7 +6,7 @@
=head1 VERSION
-version 1.79
+version 1.82
=cut
@@ -15,7 +15,7 @@
use Module::Starter::App;
-our $VERSION = '1.79';
+our $VERSION = '1.82';
Module::Starter::App->run;
@@ -39,6 +39,7 @@
Format: Author Name <[email protected]>
This option can be supplied multiple times for projects
that have multiple authors.
+ --github=login Create links to the author's GitHub issue tracker
--ignores=type Ignore type files to include (repeatable)
--license=type License under which the module will be distributed
@@ -72,11 +73,11 @@
Example:
module-starter --module=Foo::Bar,Foo::Bat \
- --author="Andy Lester" [email protected]
+ --author="Andy Lester <[email protected]>"
module-starter --module=Foo::Bar,Foo::Bat \
- --author="Andy Lester <[email protected]> \
- --author="Sawyer X <[email protected]>
+ --author="Andy Lester <[email protected]>" \
+ --author="Sawyer X <[email protected]>"
=head1 DESCRIPTION
@@ -105,8 +106,7 @@
C<--ignores> command line parameter corresponds to the C<ignores_type>
configuration file entry. A sample configuration file might read:
- author: Ricardo SIGNES
- email: [email protected]
+ author: Ricardo SIGNES <[email protected]>
ignores_type: git
plugins: Module::Starter::Simple Module::Starter::Plugin::XYZ
xyz_option: red green blue
@@ -114,7 +114,4 @@
This format may become more elaborate in the future, but a file of this type
should remain valid.
-Please note, as of right now the configuration file does *not* have support
-for multiple authors.
-
=cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/dist.ini
new/Module-Starter-1.82/dist.ini
--- old/Module-Starter-1.79/dist.ini 2026-01-03 14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/dist.ini 2026-01-10 21:22:41.000000000 +0100
@@ -7,7 +7,7 @@
[CheckChangesHasContent]
[@Starter::Git]
-revision = 4
+revision = 6
installer = MakeMaker::Awesome
managed_versions = 1
regenerate = LICENSE
@@ -26,7 +26,6 @@
issues = 1
user = xsawyerx
-[PrereqsFile]
[Git::Contributors]
[MetaResources]
x_IRC = irc://irc.perl.org/#toolchain
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/lib/Module/Starter/App.pm
new/Module-Starter-1.82/lib/Module/Starter/App.pm
--- old/Module-Starter-1.79/lib/Module/Starter/App.pm 2026-01-03
14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/lib/Module/Starter/App.pm 2026-01-10
21:22:41.000000000 +0100
@@ -6,14 +6,14 @@
=head1 VERSION
-version 1.79
+version 1.82
=cut
use warnings;
use strict;
-our $VERSION = '1.79';
+our $VERSION = '1.82';
use File::Spec;
use Getopt::Long;
@@ -56,9 +56,38 @@
my ( $self, %config ) = @_;
# The options that accept multiple arguments must be set to an arrayref
- foreach my $key (qw( builder ignores_type modules plugins )) {
- $config{$key} = [ split /(?:\s*,\s*|\s+)/, (ref $config{$key} ?
join(',', @{$config{$key}}) : $config{$key}) ] if $config{$key};
+ foreach my $key (qw( author builder ignores_type modules plugins )) {
$config{$key} = [] unless exists $config{$key};
+
+ if ( $key eq 'author' ) {
+ next if ref $config{$key};
+
+ # Split author strings on whitespace or comma.
+ # Spec: 'Author Name <[email protected]>'
+ my @authors;
+ while ($config{$key} =~ s/
+ ^\s*
+ ((?>
+ (?: # Author
+ [^\s<>]+
+ \s+
+ )+
+ )
+ <[^<>]+>) # Email
+ (?: # Separators (or end of string)
+ \s*,\s*
+ | \s+
+ | \z
+ )
+ //x) {
+ push @authors, $1;
+ }
+ push @authors, $config{$key} if length $config{$key};
+ $config{$key} = \@authors;
+ }
+ else {
+ $config{$key} = [ split /(?:\s*,\s*|\s+)/, (ref $config{$key} ?
join(',', @{$config{$key}}) : $config{$key}) ] if $config{$key};
+ }
}
return %config;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/lib/Module/Starter/BuilderSet.pm
new/Module-Starter-1.82/lib/Module/Starter/BuilderSet.pm
--- old/Module-Starter-1.79/lib/Module/Starter/BuilderSet.pm 2026-01-03
14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/lib/Module/Starter/BuilderSet.pm 2026-01-10
21:22:41.000000000 +0100
@@ -11,11 +11,11 @@
=head1 VERSION
-version 1.79
+version 1.82
=cut
-our $VERSION = '1.79';
+our $VERSION = '1.82';
=head1 SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/Module-Starter-1.79/lib/Module/Starter/Plugin/Template.pm
new/Module-Starter-1.82/lib/Module/Starter/Plugin/Template.pm
--- old/Module-Starter-1.79/lib/Module/Starter/Plugin/Template.pm
2026-01-03 14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/lib/Module/Starter/Plugin/Template.pm
2026-01-10 21:22:41.000000000 +0100
@@ -10,11 +10,11 @@
=head1 VERSION
-version 1.79
+version 1.82
=cut
-our $VERSION = '1.79';
+our $VERSION = '1.82';
=head1 SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/lib/Module/Starter/Plugin.pod
new/Module-Starter-1.82/lib/Module/Starter/Plugin.pod
--- old/Module-Starter-1.79/lib/Module/Starter/Plugin.pod 2026-01-03
14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/lib/Module/Starter/Plugin.pod 2026-01-10
21:22:41.000000000 +0100
@@ -6,7 +6,7 @@
=head1 VERSION
-version 1.79
+version 1.82
=head1 DESCRIPTION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/lib/Module/Starter/Simple.pm
new/Module-Starter-1.82/lib/Module/Starter/Simple.pm
--- old/Module-Starter-1.79/lib/Module/Starter/Simple.pm 2026-01-03
14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/lib/Module/Starter/Simple.pm 2026-01-10
21:22:41.000000000 +0100
@@ -18,11 +18,11 @@
=head1 VERSION
-version 1.79
+version 1.82
=cut
-our $VERSION = '1.79';
+our $VERSION = '1.82';
=head1 SYNOPSIS
@@ -94,22 +94,35 @@
croak "Invalid module name: $_" unless /\A[a-z_]\w*(?:::[\w]+)*\Z/i;
}
- if ( ( not $self->{author} ) && ( $^O ne 'MSWin32' ) ) {
+ if ( ( not @{ $self->{author} } ) && ( $^O ne 'MSWin32' ) ) {
( $self->{author} ) = split /,/, ( getpwuid $> )[6];
$self->{author} = [
exists $ENV{EMAIL}
? "$self->{author} <$ENV{EMAIL}>"
: $self->{author}
- ];
+ ] if defined $self->{author};
}
croak "Must specify one or more authors\n"
- unless $self->{author}
+ unless defined $self->{author}
&& ref($self->{author}) eq 'ARRAY'
&& @{$self->{author}} > 0;
croak "author strings must be in the format: 'Author Name
<author-email\@domain.tld>'"
- if grep { $_ !~ m/^.*?\s*\<.*?\>\s*$/ } @{$self->{author}};
+ if grep {
+ $_ !~ /
+ \A
+ (?>
+ (?: # Author
+ [^\s<>]+
+ \s+
+ )+
+ )
+ <[^<>]+> # Email
+ \s*
+ \z
+ /x;
+ } @{$self->{author}};
$self->{license} ||= 'artistic2';
$self->{minperl} ||= '5.008003';
@@ -256,7 +269,8 @@
($class) = Software::LicenseUtils->guess_license_from_meta_key($key);
return undef unless defined $class;
}
- return $class->new( { holder => $self->{author} } );
+ my $author = join ',', @{$self->{author}};
+ return $class->new( { holder => $author } );
}
sub _license_blurb {
@@ -408,7 +422,7 @@
my $main_pm_file = shift;
my $author = '[' .
- join(',', map { "'" . s/'/\'/rg . "'" } @{$self->{author}})
+ join(',', map { (my $x = $_) =~ s/'/\'/g; "'$x'" } @{$self->{author}})
. ']';
my $slname = $self->{license_record} ? $self->{license_record}->meta2_name
: $self->{license};
@@ -470,25 +484,33 @@
=head2 Makefile_PL_meta_merge
Method called by Makefile_PL_guts. Returns the C<META_MERGE> section -
currently
-only if the option C<github> is set, in which case the C<resources =>
repository>
+only if the option C<github> is set, in which case the C<< resources =>
repository >>
entry is created.
=cut
sub Makefile_PL_meta_merge {
my $self = shift;
- return '' unless $self->{github};
- return sprintf " META_MERGE => {
+ return '' unless defined $self->{github};
+
+ my $username = $self->{github};
+ my $repository = $self->{distro};
+
+ return <<"HERE";
+ META_MERGE => {
'meta-spec' => { version => 2 },
resources => {
repository => {
type => 'git',
- url => 'git://github.com/%s/%s.git',
- web => 'https://github.com/%s/%s',
+ url => 'https://github.com/$username/$repository.git',
+ web => 'https://github.com/$username/$repository',
+ },
+ bugtracker => {
+ web => 'https://github.com/$username/$repository/issues',
},
},
},
-", $self->{github}, $self->{distro}, $self->{github}, $self->{distro}
+HERE
}
=head2 MI_Makefile_PL_guts( $main_module, $main_pm_file )
@@ -601,13 +623,15 @@
my $main_pm_file = shift;
my $author = '[' .
- join(',', map { "'" . s/'/\'/rg . "'" } @{$self->{author}})
+ join(',', map { (my $x = $_) =~ s/'/\'/g; "'$x'" } @{$self->{author}})
. ']';
my $slname = $self->{license_record} ? $self->{license_record}->meta2_name
: $self->{license};
my $warnings = sprintf 'warnings%s;', ($self->{fatalize} ? " FATAL =>
'all'" : '');
+ my $meta_merge = $self->Build_PL_meta_merge;
+
return <<"HERE";
use $self->{minperl};
use strict;
@@ -632,13 +656,38 @@
#'Foo::Bar::Module' => '5.0401',
},
add_to_cleanup => [ '$self->{distro}-*' ],
-);
+$meta_merge);
\$builder->create_build_script();
HERE
}
+=head2 Build_PL_meta_merge
+
+Method called by Build_PL_guts. Returns the C<meta_merge> section - currently
+only if the option C<github> is set, in which case the C<< resources =>
repository >>
+entry is created.
+
+=cut
+
+sub Build_PL_meta_merge {
+ my $self = shift;
+ return '' unless defined $self->{github};
+
+ my $username = $self->{github};
+ my $repository = $self->{distro};
+
+ return <<"HERE";
+ meta_merge => {
+ resources => {
+ repository => 'https://github.com/$username/$repository',
+ bugtracker => 'https://github.com/$username/$repository/issues',
+ },
+ },
+HERE
+}
+
=head2 create_Changes( )
This method creates a skeletal Changes file.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/lib/Module/Starter.pm
new/Module-Starter-1.82/lib/Module/Starter.pm
--- old/Module-Starter-1.79/lib/Module/Starter.pm 2026-01-03
14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/lib/Module/Starter.pm 2026-01-10
21:22:41.000000000 +0100
@@ -11,11 +11,11 @@
=head1 VERSION
-version 1.79
+version 1.82
=cut
-our $VERSION = '1.79';
+our $VERSION = '1.82';
=head1 SYNOPSIS
@@ -23,7 +23,7 @@
from the command line.
module-starter --module=Foo::Bar,Foo::Bat \
- --author="Andy Lester" [email protected]
+ --author="Andy Lester <[email protected]>"
=head1 DESCRIPTION
@@ -54,15 +54,17 @@
# or specify more than one builder in an
# arrayref
- license => $license, # type of license; defaults to 'artistic2'
- author => $author, # author's full name (taken from C<getpwuid> if
not provided)
- email => $email, # author's email address (taken from C<EMAIL>
if not provided)
- github => $username, # author's github user name (for creating links
to git repo)
- ignores_type => $type, # ignores file type ('generic', 'cvs', 'git',
'hg', 'manifest' )
- fatalize => $fatalize, # generate code that makes warnings fatal
+ license => $license, # type of license; defaults to 'artistic2'
+ author => [ authors ], # author(s) name and email address
+ # (if not provided, name and email are taken
from getpwuid and
+ # EMAIL respectively)
+ # format: Author Name
<[email protected]>
+ github => $username, # author's GitHub user name (for creating
links to issue tracker)
+ ignores_type => $type, # ignores file type ('generic', 'cvs', 'git',
'hg', 'manifest')
+ fatalize => $fatalize, # generate code that makes warnings fatal
- verbose => $verbose, # bool: print progress messages; defaults to 0
- force => $force # bool: overwrite existing files; defaults to 0
+ verbose => $verbose, # bool: print progress messages; defaults to 0
+ force => $force # bool: overwrite existing files; defaults to 0
The ignores_type is a new feature that allows one to create SCM-specific
ignore files.
These are the mappings:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/t/test-author.t
new/Module-Starter-1.82/t/test-author.t
--- old/Module-Starter-1.79/t/test-author.t 1970-01-01 01:00:00.000000000
+0100
+++ new/Module-Starter-1.82/t/test-author.t 2026-01-10 21:22:41.000000000
+0100
@@ -0,0 +1,169 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More;
+use Module::Starter::App ();
+use Module::Starter::Simple;
+use File::Temp qw( tempdir );
+
+# Test if author strings from configuration file get split correctly.
+subtest 'Test author splits from config file' => sub {
+ subtest 'Valid author strings' => sub {
+ my %VALID = (
+ 'single author' => {
+ author => 'Andy Lester <[email protected]>',
+ expected => [
+ 'Andy Lester <[email protected]>',
+ ],
+ },
+ 'multiple authors; space separated' => {
+ author => 'Andy Lester <[email protected]> Sawyer X
<[email protected]>',
+ expected => [
+ 'Andy Lester <[email protected]>',
+ 'Sawyer X <[email protected]>',
+ ],
+ },
+ 'multiple authors; comma separated' => {
+ author => 'Andy Lester <[email protected]>, Sawyer X
<[email protected]>',
+ expected => [
+ 'Andy Lester <[email protected]>',
+ 'Sawyer X <[email protected]>',
+ ],
+ },
+ 'multiple authors; whitespace separated' => {
+ author => qq{Andy Lester\t<andy\@petdance.com>\t\tSawyer X
<sawyerx\@cpan.org>\t},
+ expected => [
+ qq{Andy Lester\t<andy\@petdance.com>},
+ 'Sawyer X <[email protected]>',
+ ],
+ },
+ 'multiple authors; punctuation' => {
+ author => q{Andy L. <[email protected]> 'Sawyer X'
<[email protected]>},
+ expected => [
+ 'Andy L. <[email protected]>',
+ q{'Sawyer X' <[email protected]>},
+ ],
+ },
+ 'multiple authors; punctuation + whitespace + comma' => {
+ author => qq{Andy-Lester' <andy\@petdance.com> ,\t"
Sawyer X. " <sawyerx\@cpan.org> },
+ expected => [
+ q{Andy-Lester' <[email protected]>},
+ q{" Sawyer X. " <[email protected]>},
+ ],
+ },
+ );
+
+ foreach my $name ( sort keys %VALID ) {
+ my %config = Module::Starter::App->_config_multi_process( author
=> $VALID{$name}->{author} );
+
+ is_deeply( $config{author}, $VALID{$name}->{expected}, "Split
match ($name)" );
+ }
+ };
+
+ subtest 'Invalid author strings' => sub {
+ subtest 'Do not split' => sub {
+ my @INVALID = (
+ 'Andy Lester [email protected] Sawyer X <[email protected]>',
+ 'Andy Lester<[email protected]> Sawyer X <[email protected]>',
+ 'Andy Lester <<[email protected]> Sawyer X <[email protected]>',
+ 'Andy Lester <[email protected]>> Sawyer X <[email protected]>',
+ 'Andy Lester <[email protected]>Sawyer X <[email protected]>',
+ 'Andy Lester <[email protected] Sawyer X <[email protected]>',
+ 'Andy Lester [email protected]> Sawyer X <[email protected]>',
+ 'Andy Lester <> Sawyer X <[email protected]>',
+ );
+
+ foreach my $author ( @INVALID ) {
+ my %config = Module::Starter::App->_config_multi_process(
author => $author );
+
+ is_deeply( $config{author}, [ $author ], 'String match' );
+ }
+ };
+
+ subtest 'Split incorrectly' => sub {
+ my %INVALID = (
+ 'Andy Lester <[email protected]> Sawyer X [email protected] Dan
Book <[email protected]' =>
+ 'Sawyer X [email protected] Dan Book <[email protected]',
+
+ 'Andy Lester <[email protected]> Sawyer X<[email protected]>
Dan Book <[email protected]' =>
+ 'Sawyer X<[email protected]> Dan Book <[email protected]',
+
+ 'Andy Lester <[email protected]> Sawyer X <<[email protected]>
Dan Book <[email protected]>' =>
+ 'Sawyer X <<[email protected]> Dan Book <[email protected]>',
+
+ 'Andy Lester <[email protected]> Sawyer X <[email protected]>>
Dan Book <[email protected]>' =>
+ 'Sawyer X <[email protected]>> Dan Book <[email protected]>',
+
+ 'Andy Lester <[email protected]> Sawyer X
<[email protected]>Dan Book <[email protected]' =>
+ 'Sawyer X <[email protected]>Dan Book <[email protected]',
+
+ 'Andy Lester <[email protected]> Sawyer X <[email protected]
Dan Book <[email protected]' =>
+ 'Sawyer X <[email protected] Dan Book <[email protected]',
+
+ 'Andy Lester <[email protected]> Sawyer X [email protected]>
Dan Book <[email protected]' =>
+ 'Sawyer X [email protected]> Dan Book <[email protected]',
+
+ 'Andy Lester <[email protected]> Sawyer X <> Dan Book
<[email protected]' =>
+ 'Sawyer X <> Dan Book <[email protected]',
+ );
+
+ foreach my $author ( sort keys %INVALID ) {
+ my %config = Module::Starter::App->_config_multi_process(
author => $author );
+
+ is_deeply( $config{author}, [ 'Andy Lester
<[email protected]>', $INVALID{$author} ], 'Split match' );
+ }
+ };
+ };
+};
+
+# Test validation of author strings.
+# Spec: 'Author Name <[email protected]>'
+#
+# NOTE:
+# Do not test valid strings since the distro would be created at every
iteration,
+# which generates unnecessary IO/noise.
+subtest 'Test author string validation' => sub {
+ my @INVALID = (
+ '<>',
+
+ 'Andy Lester',
+ 'Andy Lester<[email protected]>',
+ 'Andy Lester <<[email protected]>',
+ 'Andy Lester <[email protected]>>',
+ 'Andy Lester <[email protected]',
+ 'Andy Lester [email protected]>',
+ 'Andy Lester <>',
+
+ 'Andy Lester <[email protected]> Sawyer X <[email protected]>',
+ 'Andy Lester <[email protected] Sawyer X <[email protected]>',
+ 'Andy Lester [email protected]> Sawyer X [email protected]>',
+ 'Andy Lester <> Sawyer X <>',
+
+ 'Andy Lester <[email protected]> Sawyer X <[email protected]> Dan Book
<[email protected]',
+ );
+
+ my $CROAK_MSG = q{author strings must be in the format: 'Author Name
<[email protected]>'};
+
+ my $tempdir = tempdir( CLEANUP => 1 );
+
+ foreach my $author ( @INVALID ) {
+ my $ms = Module::Starter::Simple->new(
+ dir => $tempdir,
+ modules => [ qw( Foo::Bar ) ],
+ author => [ $author ],
+ );
+
+ my $err = do {
+ local $@;
+ eval { $ms->create_distro };
+ $@;
+ };
+
+ ok( $err, qq{Invalid author: '$author'} );
+ like( $err, qr/\A$CROAK_MSG/, 'Croak msg match' );
+ }
+};
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/t/test-dist.t
new/Module-Starter-1.82/t/test-dist.t
--- old/Module-Starter-1.79/t/test-dist.t 2026-01-03 14:57:21.000000000
+0100
+++ new/Module-Starter-1.82/t/test-dist.t 2026-01-10 21:22:41.000000000
+0100
@@ -192,7 +192,8 @@
my $license_class = "Software::License::$LICENSES->{ $self->{license} }";
require_module $license_class;
- my $license = $license_class->new({ holder => $self->{author} });
+ my $author = join ',', @{$self->{author}};
+ my $license = $license_class->new({ holder => $author });
my $slname = $license->meta2_name;
my $license_url = $license->url;
my $license_text = $license->license;
@@ -842,7 +843,8 @@
my $license_class = "Software::License::$LICENSES->{ $self->{license} }";
require_module $license_class;
- my $license = $license_class->new({ holder => $self->{author} });
+ my $author = join ',', @{$self->{author}};
+ my $license = $license_class->new({ holder => $author });
my $license_blurb = $license->notice;
$self->parse_paras(
[
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Module-Starter-1.79/xt/author/00-compile.t
new/Module-Starter-1.82/xt/author/00-compile.t
--- old/Module-Starter-1.79/xt/author/00-compile.t 2026-01-03
14:57:21.000000000 +0100
+++ new/Module-Starter-1.82/xt/author/00-compile.t 2026-01-10
21:22:41.000000000 +0100
@@ -1,7 +1,8 @@
+use 5.006;
use strict;
use warnings;
-# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.059
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.058
use Test::More;
@@ -37,7 +38,7 @@
# see L<perlfaq8/How can I capture STDERR from an external command?>
my $stderr = IO::Handle->new;
- diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g;
q{'}.$str.q{'} }
+ diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} .
$str . q{'} }
$^X, @switches, '-e', "require q[$lib]"))
if $ENV{PERL_COMPILE_TEST_DEBUG};
@@ -62,15 +63,15 @@
open my $fh, '<', $file or warn("Unable to open $file: $!"), next;
my $line = <$fh>;
- close $fh and skip("$file isn't perl", 1) unless $line =~
/^#!\s*(?:\S*(?:env )?perl\S*)((?:\s+-\w*)*)(?:\s*#.*)?$/;
+ close $fh and skip("$file isn't perl", 1) unless $line =~
/^#!\s*(?:\S*perl\S*)((?:\s+-\w*)*)(?:\s*#.*)?$/;
@switches = (@switches, split(' ', $1)) if $1;
close $fh and skip("$file uses -T; not testable with PERL5LIB", 1)
- if grep $_ eq '-T', @switches and $ENV{PERL5LIB};
+ if grep { $_ eq '-T' } @switches and $ENV{PERL5LIB};
my $stderr = IO::Handle->new;
- diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g;
q{'}.$str.q{'} }
+ diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} .
$str . q{'} }
$^X, @switches, '-c', $file))
if $ENV{PERL_COMPILE_TEST_DEBUG};
@@ -84,7 +85,7 @@
and not eval { +require blib; blib->VERSION('1.01') };
# in older perls, -c output is simply the file portion of the path being
tested
- if (@_warnings = grep !/\bsyntax OK$/,
+ if (@_warnings = grep { !/\bsyntax OK$/ }
grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
{
warn @_warnings;
@@ -94,6 +95,7 @@
-is(scalar(@warnings), 0, 'no warnings found') or diag 'got warnings: ', (
Test::More->can('explain') ? Test::More::explain(\@warnings) : join("\n", '',
@warnings) );
+is(scalar(@warnings), 0, 'no warnings found')
+ or diag 'got warnings: ', ( Test::More->can('explain') ?
Test::More::explain(\@warnings) : join("\n", '', @warnings) );
++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.L7j1Ib/_old 2026-01-17 14:56:27.955478397 +0100
+++ /var/tmp/diff_new_pack.L7j1Ib/_new 2026-01-17 14:56:27.959478564 +0100
@@ -1,6 +1,6 @@
-mtime: 1767505446
-commit: 04cfa20216854d8718bfc5db54b4888d804dc04e409d2cf4b11aa670e08a66ec
+mtime: 1768110289
+commit: 383755065afa820cc7e43f30bc1ed4889a9a46e7790e9cbeda25580f46fe7e7b
url: https://src.opensuse.org/perl/perl-Module-Starter.git
-revision: 04cfa20216854d8718bfc5db54b4888d804dc04e409d2cf4b11aa670e08a66ec
+revision: 383755065afa820cc7e43f30bc1ed4889a9a46e7790e9cbeda25580f46fe7e7b
projectscmsync: https://src.opensuse.org/perl/_ObsPrj
++++++ build.specials.obscpio ++++++
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-01-15 20:47:28.000000000 +0100
@@ -0,0 +1 @@
+.osc