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

Reply via email to