Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-CLI-Osprey for openSUSE:Factory 
checked in at 2025-11-24 14:08:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-CLI-Osprey (Old)
 and      /work/SRC/openSUSE:Factory/.perl-CLI-Osprey.new.14147 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-CLI-Osprey"

Mon Nov 24 14:08:01 2025 rev:3 rq:1319074 version:0.90.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-CLI-Osprey/perl-CLI-Osprey.changes  
2025-06-13 18:44:49.805339346 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-CLI-Osprey.new.14147/perl-CLI-Osprey.changes   
    2025-11-24 14:09:26.913924884 +0100
@@ -1,0 +2,8 @@
+Fri Nov 14 05:34:01 UTC 2025 - Tina Müller <[email protected]>
+
+- updated to 0.90.0 (0.09)
+   see /usr/share/doc/packages/perl-CLI-Osprey/Changes
+
+  Version 0.09: 2025-11-13
+
+-------------------------------------------------------------------

Old:
----
  CLI-Osprey-0.08.tar.gz

New:
----
  CLI-Osprey-0.09.tar.gz
  README.md
  _scmsync.obsinfo
  build.specials.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-CLI-Osprey.spec ++++++
--- /var/tmp/diff_new_pack.K5GULY/_old  2025-11-24 14:09:27.709958331 +0100
+++ /var/tmp/diff_new_pack.K5GULY/_new  2025-11-24 14:09:27.713958499 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-CLI-Osprey
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,14 +18,15 @@
 
 %define cpan_name CLI-Osprey
 Name:           perl-CLI-Osprey
-Version:        0.80.0
+Version:        0.90.0
 Release:        0
-# 0.08 -> normalize -> 0.80.0
-%define cpan_version 0.08
+# 0.09 -> normalize -> 0.90.0
+%define cpan_version 0.09
 License:        Artistic-1.0 OR GPL-1.0-or-later
 Summary:        MooX::Options + MooX::Cmd + Sanity
 URL:            https://metacpan.org/release/%{cpan_name}
 Source0:        
https://cpan.metacpan.org/authors/id/A/AR/ARODLAND/%{cpan_name}-%{cpan_version}.tar.gz
+Source100:      README.md
 BuildArch:      noarch
 BuildRequires:  perl
 BuildRequires:  perl-macros

++++++ CLI-Osprey-0.08.tar.gz -> CLI-Osprey-0.09.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/Build.PL new/CLI-Osprey-0.09/Build.PL
--- old/CLI-Osprey-0.08/Build.PL        2020-07-12 19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/Build.PL        2025-11-13 16:10:30.000000000 +0100
@@ -1,7 +1,9 @@
-# This Build.PL for CLI-Osprey was generated by 
Dist::Zilla::Plugin::ModuleBuildTiny 0.015.
+# This Build.PL for CLI-Osprey was generated by 
Dist::Zilla::Plugin::ModuleBuildTiny 0.020.
 use strict;
 use warnings;
 
+
 use 5.006;
 use Module::Build::Tiny 0.034;
 Build_PL();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/Changes new/CLI-Osprey-0.09/Changes
--- old/CLI-Osprey-0.08/Changes 2020-07-12 19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/Changes 2025-11-13 16:10:30.000000000 +0100
@@ -1,6 +1,10 @@
+Version 0.09: 2025-11-13
+
 Version 0.08: 2020-07-12
   * Fix the mapping of underscores in attribute names to dashes in option
-    names (sivoais again).
+    names (sivoais again). Although this makes things work as documented, and
+    as they were always intended to work, it may be a breaking change if you
+    were relying on old incorrect behavior.
 
 Version 0.07: 2020-07-02
   * Fix inline subcommands, broken by 0.06 (sivoais).
@@ -14,7 +18,7 @@
   * Fix a documentation error regarding preserve_argv (vague666).
 
 Version 0.05: 2020-02-27
-  * Fix "prefer_commandline" import option to work properly (thanks ufoboat).
+  * Fix "prefer_commandline" import option to work properly (thanks ufobat).
   * Use Moo::Role->is_role to check whether we're being used in a role
     (thanks djerius).
   * Add missing methods to CLI::Osprey::Descriptive::Usage
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/LICENSE new/CLI-Osprey-0.09/LICENSE
--- old/CLI-Osprey-0.08/LICENSE 2020-07-12 19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/LICENSE 2025-11-13 16:10:30.000000000 +0100
@@ -1,4 +1,4 @@
-This software is copyright (c) 2020 by Andrew Rodland.
+This software is copyright (c) 2025 by Andrew Rodland.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@
 
 --- The GNU General Public License, Version 1, February 1989 ---
 
-This software is Copyright (c) 2020 by Andrew Rodland.
+This software is Copyright (c) 2025 by Andrew Rodland.
 
 This is free software, licensed under:
 
@@ -22,7 +22,7 @@
                      Version 1, February 1989
 
  Copyright (C) 1989 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+                    <https://fsf.org/>
 
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
@@ -236,8 +236,7 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 
USA
+    along with this program; if not, see <https://www.gnu.org/licenses/>.
 
 
 Also add information on how to contact you by electronic and paper mail.
@@ -264,116 +263,149 @@
   program `Gnomovision' (a program to direct compilers to make passes
   at assemblers) written by James Hacker.
 
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
+  <signature of Moe Ghoul>, 1 April 1989
+  Moe Ghoul, President of Vice
 
 That's all there is to it!
 
 
---- The Artistic License 1.0 ---
+--- The Perl Artistic License 1.0 ---
 
-This software is Copyright (c) 2020 by Andrew Rodland.
+This software is Copyright (c) 2025 by Andrew Rodland.
 
 This is free software, licensed under:
 
-  The Artistic License 1.0
+  The Perl Artistic License 1.0
 
-The Artistic License
 
-Preamble
 
-The intent of this document is to state the conditions under which a Package
-may be copied, such that the Copyright Holder maintains some semblance of
-artistic control over the development of the package, while giving the users of
-the package the right to use and distribute the Package in a more-or-less
-customary fashion, plus the right to make reasonable modifications.
+
+
+                         The "Artistic License"
+
+                                Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to make
+reasonable modifications.
 
 Definitions:
 
-  - "Package" refers to the collection of files distributed by the Copyright
-    Holder, and derivatives of that collection of files created through
-    textual modification. 
-  - "Standard Version" refers to such a Package if it has not been modified,
-    or has been modified in accordance with the wishes of the Copyright
-    Holder. 
-  - "Copyright Holder" is whoever is named in the copyright or copyrights for
-    the package. 
-  - "You" is you, if you're thinking about copying or distributing this 
Package.
-  - "Reasonable copying fee" is whatever you can justify on the basis of media
-    cost, duplication charges, time of people involved, and so on. (You will
-    not be required to justify it to the Copyright Holder, but only to the
-    computing community at large as a market that must bear the fee.) 
-  - "Freely Available" means that no fee is charged for the item itself, though
-    there may be fees involved in handling the item. It also means that
-    recipients of the item may redistribute it under the same conditions they
-    received it. 
+        "Package" refers to the collection of files distributed by the
+        Copyright Holder, and derivatives of that collection of files
+        created through textual modification.
+
+        "Standard Version" refers to such a Package if it has not been
+        modified, or has been modified in accordance with the wishes
+        of the Copyright Holder as specified below.
+
+        "Copyright Holder" is whoever is named in the copyright or
+        copyrights for the package.
+
+        "You" is you, if you're thinking about copying or distributing
+        this Package.
+
+        "Reasonable copying fee" is whatever you can justify on the
+        basis of media cost, duplication charges, time of people involved,
+        and so on.  (You will not be required to justify it to the
+        Copyright Holder, but only to the computing community at large
+        as a market that must bear the fee.)
+
+        "Freely Available" means that no fee is charged for the item
+        itself, though there may be fees involved in handling the item.
+        It also means that recipients of the item may redistribute it
+        under the same conditions they received it.
 
 1. You may make and give away verbatim copies of the source form of the
 Standard Version of this Package without restriction, provided that you
 duplicate all of the original copyright notices and associated disclaimers.
 
-2. You may apply bug fixes, portability fixes and other modifications derived
-from the Public Domain or from the Copyright Holder. A Package modified in such
-a way shall still be considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided that
-you insert a prominent notice in each changed file stating how and when you
-changed that file, and provided that you do at least ONE of the following:
-
-  a) place your modifications in the Public Domain or otherwise make them
-     Freely Available, such as by posting said modifications to Usenet or an
-     equivalent medium, or placing the modifications on a major archive site
-     such as ftp.uu.net, or by allowing the Copyright Holder to include your
-     modifications in the Standard Version of the Package.
-
-  b) use the modified Package only within your corporation or organization.
-
-  c) rename any non-standard executables so the names do not conflict with
-     standard executables, which must also be provided, and provide a separate
-     manual page for each non-standard executable that clearly documents how it
-     differs from the Standard Version.
-
-  d) make other distribution arrangements with the Copyright Holder.
-
-4. You may distribute the programs of this Package in object code or executable
-form, provided that you do at least ONE of the following:
-
-  a) distribute a Standard Version of the executables and library files,
-     together with instructions (in the manual page or equivalent) on where to
-     get the Standard Version.
-
-  b) accompany the distribution with the machine-readable source of the Package
-     with your modifications.
-
-  c) accompany any non-standard executables with their corresponding Standard
-     Version executables, giving the non-standard executables non-standard
-     names, and clearly documenting the differences in manual pages (or
-     equivalent), together with instructions on where to get the Standard
-     Version.
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder.  A Package
+modified in such a way shall still be considered the Standard Version.
 
-  d) make other distribution arrangements with the Copyright Holder.
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and
+when you changed that file, and provided that you do at least ONE of the
+following:
 
-5. You may charge a reasonable copying fee for any distribution of this
-Package.  You may charge any fee you choose for support of this Package. You
-may not charge a fee for this Package itself. However, you may distribute this
-Package in aggregate with other (possibly commercial) programs as part of a
-larger (possibly commercial) software distribution provided that you do not
-advertise this Package as a product of your own.
-
-6. The scripts and library files supplied as input to or produced as output
-from the programs of this Package do not automatically fall under the copyright
-of this Package, but belong to whomever generated them, and may be sold
-commercially, and may be aggregated with this Package.
+    a) place your modifications in the Public Domain or otherwise make them
+    Freely Available, such as by posting said modifications to Usenet or
+    an equivalent medium, or placing the modifications on a major archive
+    site such as uunet.uu.net, or by allowing the Copyright Holder to include
+    your modifications in the Standard Version of the Package.
+
+    b) use the modified Package only within your corporation or organization.
+
+    c) rename any non-standard executables so the names do not conflict
+    with standard executables, which must also be provided, and provide
+    a separate manual page for each non-standard executable that clearly
+    documents how it differs from the Standard Version.
 
-7. C or perl subroutines supplied by you and linked into this Package shall not
-be considered part of this Package.
+    d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+    a) distribute a Standard Version of the executables and library files,
+    together with instructions (in the manual page or equivalent) on where
+    to get the Standard Version.
+
+    b) accompany the distribution with the machine-readable source of
+    the Package with your modifications.
+
+    c) give non-standard executables non-standard names, and clearly
+    document the differences in manual pages (or equivalent), together
+    with instructions on where to get the Standard Version.
+
+    d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this
+Package.  You may not charge a fee for this Package itself.  However,
+you may distribute this Package in aggregate with other (possibly
+commercial) programs as part of a larger (possibly commercial) software
+distribution provided that you do not advertise this Package as a
+product of your own.  You may embed this Package's interpreter within
+an executable of yours (by linking); this shall be construed as a mere
+form of aggregation, provided that the complete Standard Version of the
+interpreter is so embedded.
+
+6. The scripts and library files supplied as input to or produced as
+output from the programs of this Package do not automatically fall
+under the copyright of this Package, but belong to whoever generated
+them, and may be sold commercially, and may be aggregated with this
+Package.  If such scripts or library files are aggregated with this
+Package via the so-called "undump" or "unexec" methods of producing a
+binary executable image, then distribution of such an image shall
+neither be construed as a distribution of this Package nor shall it
+fall under the restrictions of Paragraphs 3 and 4, provided that you do
+not represent such an executable image as a Standard Version of this
+Package.
+
+7. C subroutines (or comparably compiled subroutines in other
+languages) supplied by you and linked into this Package in order to
+emulate subroutines and variables of the language defined by this
+Package shall not be considered part of this Package, but are the
+equivalent of input as in Paragraph 6, provided these subroutines do
+not change the language in any way that would cause it to fail the
+regression tests for the language.
+
+8. Aggregation of this Package with a commercial distribution is always
+permitted provided that the use of this Package is embedded; that is,
+when no overt attempt is made to make this Package's interfaces visible
+to the end user of the commercial distribution.  Such use shall not be
+construed as a distribution of this Package.
 
-8. The name of the Copyright Holder may not be used to endorse or promote
+9. The name of the Copyright Holder may not be used to endorse or promote
 products derived from this software without specific prior written permission.
 
-9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
-The End
+                                The End
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/MANIFEST new/CLI-Osprey-0.09/MANIFEST
--- old/CLI-Osprey-0.08/MANIFEST        2020-07-12 19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/MANIFEST        2025-11-13 16:10:30.000000000 +0100
@@ -1,4 +1,4 @@
-# This file was automatically generated by Dist::Zilla::Plugin::Manifest 
v6.010.
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest 
v6.036.
 Build.PL
 Changes
 LICENSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/META.json 
new/CLI-Osprey-0.09/META.json
--- old/CLI-Osprey-0.08/META.json       2020-07-12 19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/META.json       2025-11-13 16:10:30.000000000 +0100
@@ -4,7 +4,7 @@
       "Andrew Rodland <[email protected]>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 6.010, CPAN::Meta::Converter version 
2.150010",
+   "generated_by" : "Dist::Zilla version 6.036, CPAN::Meta::Converter version 
2.150010",
    "license" : [
       "perl_5"
    ],
@@ -57,8 +57,10 @@
          "web" : "http://github.com/arodland/CLI-Osprey";
       }
    },
-   "version" : "0.08",
+   "version" : "0.09",
    "x_authority" : "cpan:ARODLAND",
-   "x_serialization_backend" : "Cpanel::JSON::XS version 3.0233"
+   "x_generated_by_perl" : "v5.40.0",
+   "x_serialization_backend" : "Cpanel::JSON::XS version 4.40",
+   "x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later"
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/META.yml new/CLI-Osprey-0.09/META.yml
--- old/CLI-Osprey-0.08/META.yml        2020-07-12 19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/META.yml        2025-11-13 16:10:30.000000000 +0100
@@ -9,7 +9,7 @@
 configure_requires:
   Module::Build::Tiny: '0.034'
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 6.010, CPAN::Meta::Converter version 
2.150010'
+generated_by: 'Dist::Zilla version 6.036, CPAN::Meta::Converter version 
2.150010'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -29,6 +29,8 @@
   homepage: http://metacpan.org/release/CLI-Osprey
   license: http://dev.perl.org/licenses/
   repository: git://github.com/arodland/CLI-Osprey.git
-version: '0.08'
+version: '0.09'
 x_authority: cpan:ARODLAND
-x_serialization_backend: 'YAML::Tiny version 1.70'
+x_generated_by_perl: v5.40.0
+x_serialization_backend: 'YAML::Tiny version 1.76'
+x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/README new/CLI-Osprey-0.09/README
--- old/CLI-Osprey-0.08/README  2020-07-12 19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/README  2025-11-13 16:10:30.000000000 +0100
@@ -1,15 +1,12 @@
-
-
 This archive contains the distribution CLI-Osprey,
-version 0.08:
+version 0.09:
 
   MooX::Options + MooX::Cmd + Sanity
 
-This software is copyright (c) 2020 by Andrew Rodland.
+This software is copyright (c) 2025 by Andrew Rodland.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
 
 
-This README file was generated by Dist::Zilla::Plugin::Readme v6.010.
-
+This README file was generated by Dist::Zilla::Plugin::Readme v6.036.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/lib/CLI/Osprey/Descriptive/Usage.pm 
new/CLI-Osprey-0.09/lib/CLI/Osprey/Descriptive/Usage.pm
--- old/CLI-Osprey-0.08/lib/CLI/Osprey/Descriptive/Usage.pm     2020-07-12 
19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/lib/CLI/Osprey/Descriptive/Usage.pm     2025-11-13 
16:10:30.000000000 +0100
@@ -13,7 +13,7 @@
 *option_text = \&Getopt::Long::Descriptive::Usage::option_text;
 
 # ABSTRACT: Produce usage information for CLI::Osprey apps
-our $VERSION = '0.08'; # VERSION
+our $VERSION = '0.09'; # VERSION
 our $AUTHORITY = 'cpan:ARODLAND'; # AUTHORITY
 
 my %format_doc = (
@@ -345,7 +345,7 @@
 
 =head1 VERSION
 
-version 0.08
+version 0.09
 
 =head1 AUTHOR
 
@@ -353,7 +353,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2020 by Andrew Rodland.
+This software is copyright (c) 2025 by Andrew Rodland.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/lib/CLI/Osprey/Descriptive.pm 
new/CLI-Osprey-0.09/lib/CLI/Osprey/Descriptive.pm
--- old/CLI-Osprey-0.08/lib/CLI/Osprey/Descriptive.pm   2020-07-12 
19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/lib/CLI/Osprey/Descriptive.pm   2025-11-13 
16:10:30.000000000 +0100
@@ -4,7 +4,7 @@
 use warnings;
 
 # ABSTRACT: Getopt::Long::Descriptive subclass for CLI::Osprey use
-our $VERSION = '0.08'; # VERSION
+our $VERSION = '0.09'; # VERSION
 our $AUTHORITY = 'cpan:ARODLAND'; # AUTHORITY
 
 use Getopt::Long::Descriptive 0.100;
@@ -28,7 +28,7 @@
 
 =head1 VERSION
 
-version 0.08
+version 0.09
 
 =head1 DESCRIPTION
 
@@ -42,7 +42,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2020 by Andrew Rodland.
+This software is copyright (c) 2025 by Andrew Rodland.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/lib/CLI/Osprey/InlineSubcommand.pm 
new/CLI-Osprey-0.09/lib/CLI/Osprey/InlineSubcommand.pm
--- old/CLI-Osprey-0.08/lib/CLI/Osprey/InlineSubcommand.pm      2020-07-12 
19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/lib/CLI/Osprey/InlineSubcommand.pm      2025-11-13 
16:10:30.000000000 +0100
@@ -4,7 +4,7 @@
 use Moo;
 
 # ABSTRACT: A class to wrap coderef subcommands
-our $VERSION = '0.08'; # VERSION
+our $VERSION = '0.09'; # VERSION
 our $AUTHORITY = 'cpan:ARODLAND'; # AUTHORITY
 
 has 'name' => (
@@ -61,7 +61,7 @@
 
 =head1 VERSION
 
-version 0.08
+version 0.09
 
 =head1 AUTHOR
 
@@ -69,7 +69,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2020 by Andrew Rodland.
+This software is copyright (c) 2025 by Andrew Rodland.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/lib/CLI/Osprey/Role.pm 
new/CLI-Osprey-0.09/lib/CLI/Osprey/Role.pm
--- old/CLI-Osprey-0.08/lib/CLI/Osprey/Role.pm  2020-07-12 19:11:46.000000000 
+0200
+++ new/CLI-Osprey-0.09/lib/CLI/Osprey/Role.pm  2025-11-13 16:10:30.000000000 
+0100
@@ -9,16 +9,21 @@
 use CLI::Osprey::Descriptive;
 
 # ABSTRACT: Role for CLI::Osprey applications
-our $VERSION = '0.08'; # VERSION
+our $VERSION = '0.09'; # VERSION
 our $AUTHORITY = 'cpan:ARODLAND'; # AUTHORITY
 
 sub _osprey_option_to_getopt {
   my ($name, %attributes) = @_;
-  my $getopt = join('|', grep defined, ($name, $attributes{short}));
+
+  # Use custom option name if provided, otherwise use attribute name
+  my $option_name = $attributes{option} || $name;
+
+  my $getopt = join('|', grep defined, ($option_name, $attributes{short}));
   $getopt .= '+' if $attributes{repeatable} && !defined $attributes{format};
   $getopt .= '!' if $attributes{negatable};
   $getopt .= '=' . $attributes{format} if defined $attributes{format};
   $getopt .= '@' if $attributes{repeatable} && defined $attributes{format};
+
   return $getopt;
 }
 
@@ -29,6 +34,10 @@
   my %abbreviations;
   my %fullnames;
 
+  # If options have an 'order' attr, use it; those without sort as though they 
were 9,999.
+  # If the order is equal (or not present on both) and the 'added_order' 
config flag is set,
+  # then sort according to added_order.
+  # Otherwise, sort according to option name.
   my @order = sort {
     ($options->{$a}{order} || 9999) <=> ($options->{$b}{order} || 9999)
     || ($config->{added_order} ? ($options->{$a}{added_order} <=> 
$options->{$b}{added_order}) : 0)
@@ -66,7 +75,7 @@
     if ($config->{abbreviate}) {
       for my $len (1 .. length($name) - 1) {
         my $abbreviated = substr $name, 0, $len;
-        push @{ $abbreviations{$abbreviated} }, $name unless exists 
$fullnames{$abbreviated};
+        push @{ $abbreviations{$abbreviated} }, $option unless exists 
$fullnames{$abbreviated};
       }
     }
   }
@@ -74,6 +83,15 @@
   return \@getopt, \%abbreviations;
 }
 
+# Process ARGV, rewriting options to be what GLD expects them to be.
+# We only want to rewrite things that GLD will be happy about, because it 
would be
+# bad to have GLD generate an error about something being invalid, if it isn't
+# actually something that the user typed!
+# Stuff that's done here:
+# * Rewrite abbreviations to their equivalent full names.
+# * Rewrite options that were aliased with 'option' or the default 
underscore-to-dash
+#   rewriting, to their canonical name (the same as the attribute name).
+# * Recognize '--foo=bar' options and replace them with '--foo bar'.
 sub _osprey_fix_argv {
   my ($options, $abbreviations) = @_;
 
@@ -95,6 +113,13 @@
 
     my $option_name;
     
+    # If this is a long option and abbreviations are enabled, search the 
abbreviation table
+    # for options that match the prefix. If the result is unique, use it. If 
the result is
+    # ambiguous, set $option_name undef so that eventually we will generate an 
"unknown option"
+    # error for it. Prefixes that exactly match an option name are excluded 
from the table, so
+    # that assuming that 'foo' and 'foobar' are both options, '--fo' will be 
ambiguous,
+    # '--foo' will be unambiguously 'foo' (*not* an error even though there 
are in fact two
+    # optiions that start with 'foo'), and '--foob' will be 'foobar'.
     if ($dash eq '--') {
       my $option_names = $abbreviations->{$arg_name_without_dash};
       if (defined $option_names) {
@@ -107,9 +132,12 @@
       }
     }
 
+    # $option_name is the attribute name (underscored) from abbreviations table
+    # We need to get the actual CLI option name for the rewritten ARGV
     my $arg_name = ($dash || '') . ($negative || '');
     if (defined $option_name) {
-      $arg_name .= $option_name;
+      # Use the custom option name from the options hash if possible
+      $arg_name .= $options->{$option_name}{option} || $option_name;
     } else {
       $arg_name .= $arg_name_without_dash;
     }
@@ -254,7 +282,15 @@
   my %parsed_params;
 
   for my $name (keys %options, qw(h help man)) {
-    my $val = $opt->$name();
+    # Getopt::Long converts hyphens to underscores; Getopt::Long::Descriptive 
uses these as method names
+    # For custom option names, we need to retrieve using the option name, not 
attribute name
+    my $method_name = $name;
+    if (exists $options{$name} && exists $options{$name}{option}) {
+      $method_name = $options{$name}{option};
+      $method_name =~ tr/-/_/;  # Convert hyphens to underscores to match 
Getopt::Long's conversion
+    }
+
+    my $val = $opt->$method_name();
     $parsed_params{$name} = $val if defined $val;
   }
 
@@ -349,7 +385,7 @@
 
 =head1 VERSION
 
-version 0.08
+version 0.09
 
 =head1 AUTHOR
 
@@ -357,7 +393,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2020 by Andrew Rodland.
+This software is copyright (c) 2025 by Andrew Rodland.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/lib/CLI/Osprey.pm 
new/CLI-Osprey-0.09/lib/CLI/Osprey.pm
--- old/CLI-Osprey-0.08/lib/CLI/Osprey.pm       2020-07-12 19:11:46.000000000 
+0200
+++ new/CLI-Osprey-0.09/lib/CLI/Osprey.pm       2025-11-13 16:10:30.000000000 
+0100
@@ -3,7 +3,7 @@
 use warnings;
 
 # ABSTRACT: MooX::Options + MooX::Cmd + Sanity
-our $VERSION = '0.08'; # VERSION
+our $VERSION = '0.09'; # VERSION
 our $AUTHORITY = 'cpan:ARODLAND'; # AUTHORITY
 
 use Carp 'croak';
@@ -163,7 +163,7 @@
 
 =head1 VERSION
 
-version 0.08
+version 0.09
 
 =head1 SYNOPSIS
 
@@ -468,9 +468,9 @@
 Allows controlling the order that options are listed in the help text. Options
 without an order attribute are sorted by the order their C<option> statements
 are executed, if L</added_order> is true, and by alphabetical order otherwise.
-They are placed as though they had order 9999, so use small values to sort
-before automaticall-sorted options, and values of 10000 and up to sort at the
-end.
+Options without an explicit order are placed as though they had order 9999, so
+use small values to sort before automatically-sorted options, and values of
+10000 or greater to sort at the end.
 
 =head2 repeatable
 
@@ -478,7 +478,7 @@
 
 Allows an option to be specified more than once. When used on a "boolean"
 option with no L</format>, each appearace of the option will increment the 
value
-by 1 (equivalent to C<+> in L<Getopt::Long>. When used on an option with
+by 1 (equivalent to C<+> in L<Getopt::Long>). When used on an option with
 arguments, produces an arrayref, one value per appearance of the option.
 
 =head2 required
@@ -588,7 +588,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2020 by Andrew Rodland.
+This software is copyright (c) 2025 by Andrew Rodland.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/t/basic.t 
new/CLI-Osprey-0.09/t/basic.t
--- old/CLI-Osprey-0.08/t/basic.t       2020-07-12 19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/t/basic.t       2025-11-13 16:10:30.000000000 +0100
@@ -9,54 +9,185 @@
 subtest 'command' => sub {
 
     subtest "default options" => sub {
-       local @ARGV = ();
-       my ( $stdout, $stderr, @result ) =
-          capture { MyTest::Class::Basic->new_with_options->run };
+        local @ARGV = ();
+        my ( $stdout, $stderr, @result ) =
+           capture { MyTest::Class::Basic->new_with_options->run };
 
-       is ( $stdout, "Hello world!\n", "message sent to stdout" );
-       is ( $stderr, '', "empty stderr" );
+        is ( $stdout, "Hello world!\n", "message sent to stdout" );
+        is ( $stderr, '', "empty stderr" );
 
     };
 
     subtest "command line options" => sub {
-       local @ARGV = ( '--message', 'Hello Cleveland!' );
-       my ( $stdout, $stderr, @result ) =
-          capture { MyTest::Class::Basic->new_with_options->run };
+        local @ARGV = ( '--message', 'Hello Cleveland!' );
+        my ( $stdout, $stderr, @result ) =
+           capture { MyTest::Class::Basic->new_with_options->run };
 
-       is ( $stdout, "Hello Cleveland!\n", "message sent to stdout" );
-       is ( $stderr, '', "empty stderr" );
+        is ( $stdout, "Hello Cleveland!\n", "message sent to stdout" );
+        is ( $stderr, '', "empty stderr" );
 
     };
 
 };
 
 subtest 'subcommand' => sub {
-
-    subtest "default options" => sub {
-       local @ARGV = qw ( yell );
-       my ( $stdout, $stderr, @result ) =
-          capture { MyTest::Class::Basic->new_with_options->run };
-
-       is ( $stdout, "HELLO WORLD!\n", "message sent to stdout" );
-       is ( $stderr, '', "empty stderr" );
+    subtest 'yell class subcommand' => sub {
+        require CLI::Osprey::Role;
+        require MyTest::Class::Basic::Yell;
+        my %options = MyTest::Class::Basic::Yell->_osprey_options();
+
+        # Helper function: get getopt string for an option
+        my $get_getopt_string = sub {
+            my ($option_name) = @_;
+            my %attrs = %{ $options{$option_name} };
+            my $getopt = 
CLI::Osprey::Role::_osprey_option_to_getopt($option_name, %attrs);
+            note("$option_name getopt string: $getopt");
+            return $getopt;
+        };
+
+        # Helper function: run yell command and capture output
+        my $run_yell_command = sub {
+            my (@args) = @_;
+            local @ARGV = ('yell', @args);
+            local *CORE::exit = sub { };  # Prevent exit() from terminating 
test process
+            my ($stdout, $stderr, @result) = capture { 
MyTest::Class::Basic->new_with_options->run };
+            return ($stdout, $stderr);
+        };
+
+        # Helper function: run yell command and test output
+        my $test_yell_command = sub {
+            my ($args, $stdout_pattern, $description) = @_;
+            my ($stdout, $stderr) = $run_yell_command->(@$args);
+            like($stdout, $stdout_pattern, $description);
+            is($stderr, '', "empty stderr");
+            return ($stdout, $stderr);
+        };
+
+        subtest "default options" => sub {
+            $test_yell_command->([], qr{^\QHELLO WORLD!\E\n$}, "message sent 
to stdout");
+        };
+
+        subtest "output_format option" => sub {
+            subtest "internal: generates hyphenated getopt string" => sub {
+                my $getopt = $get_getopt_string->('output_format');
+                like($getopt, qr{\Qoutput-format\E}, "generates hyphenated 
getopt string");
+                unlike($getopt, qr{\Qoutput_format\E}, "does not generate 
underscored getopt string");
+            };
+
+            subtest "functional: --output-format long option" => sub {
+                $test_yell_command->([qw(--output-format xml)], 
qr{\Q<yell>HELLO WORLD!</yell>\E},
+                                 "XML format output");
+            };
+
+            subtest "functional: -f short option" => sub {
+                $test_yell_command->([qw(-f json)], qr{\Q"yell": "HELLO 
WORLD!"\E},
+                                 "JSON format output");
+            };
+        };
+
+        subtest "excitement_level option" => sub {
+            subtest "internal: generates hyphenated getopt string" => sub {
+                my $getopt = $get_getopt_string->('excitement_level');
+                like($getopt, qr{\Qexcitement-level\E}, "generates hyphenated 
getopt string");
+                unlike($getopt, qr{\Qexcitement_level\E}, "does not generate 
underscored getopt string");
+            };
+
+            subtest "functional: --excitement-level" => sub {
+                $test_yell_command->([qw(--excitement-level 2)], qr{^\QHELLO 
WORLD!!!\E\n$},
+                                 "excitement level adds exclamation marks");
+            };
+        };
+
+        subtest "repeat_count option" => sub {
+            subtest "functional: -r short option" => sub {
+                my ($stdout, $stderr) = $run_yell_command->(qw(-r 3));
+                my @lines = split /\n/, $stdout;
+                is ( scalar(@lines), 3, "repeated 3 times" );
+                is ( $lines[0], "HELLO WORLD!", "first line correct" );
+                is ( $stderr, '', "empty stderr" );
+            };
+        };
+
+        subtest "custom_suffix option (custom option name)" => sub {
+            subtest "internal: generates custom option name getopt string" => 
sub {
+                my $getopt = $get_getopt_string->('custom_suffix');
+                like($getopt, qr{\Qadd-suffix\E}, "generates custom 
'add-suffix' getopt string");
+                unlike($getopt, qr{custom[_-]suffix}, "does not generate 
attribute name in getopt string");
+                is($getopt, 'add-suffix|s=s', "complete getopt string uses 
custom option name");
+            };
+
+            subtest "functional: -s short option" => sub {
+                $test_yell_command->([qw(-s), '[BOOM]'], qr{\QHELLO 
WORLD![BOOM]\E},
+                                 "custom suffix added via -s");
+            };
+
+            subtest "functional: --add-suffix long option" => sub {
+                $test_yell_command->([qw(--add-suffix), '[POW]'], qr{\QHELLO 
WORLD![POW]\E},
+                                 "custom suffix added via --add-suffix");
+            };
+        };
+
+        subtest "add_tag option (negatable)" => sub {
+            subtest "internal: generates hyphenated negatable getopt string" 
=> sub {
+                my $getopt = $get_getopt_string->('add_tag');
+                like($getopt, qr{\Qadd-tag!\E}, "generates hyphenated 
negatable getopt string");
+                unlike($getopt, qr{\Qadd_tag\E}, "does not generate 
underscored getopt string");
+            };
+
+            subtest "functional: --add-tag" => sub {
+                $test_yell_command->([qw(--add-tag)], qr{\Q[TAG] HELLO 
WORLD!\E},
+                                 "tag added via --add-tag");
+            };
+
+            subtest "functional: --no-add-tag" => sub {
+                my ($stdout, $stderr) = $run_yell_command->(qw(--no-add-tag));
+                unlike($stdout, qr{\Q[TAG]\E}, "no tag when disabled via 
--no-add-tag");
+                like($stdout, qr{^\QHELLO WORLD!\E$}, "plain output");
+                is($stderr, '', "empty stderr");
+            };
+        };
+
+        subtest "abbreviate feature" => sub {
+            subtest "--out abbreviates --output-format" => sub {
+                $test_yell_command->([qw(--out xml)], qr{\Q<yell>HELLO 
WORLD!</yell>\E},
+                                 "abbreviated --out works for 
--output-format");
+            };
+
+            subtest "--output-form abbreviates --output-format" => sub {
+                $test_yell_command->([qw(--output-form xml)], qr{\Q<yell>HELLO 
WORLD!</yell>\E},
+                                 "abbreviated --output-form works for 
--output-format");
+            };
+        };
+
+        subtest "combinations" => sub {
+            subtest "minimum failing case: short + hyphenated long" => sub {
+                $test_yell_command->([qw(-f xml --excitement-level 2)],
+                                 qr{\Q<yell>HELLO WORLD!!!</yell>\E},
+                                 "XML format via -f with excitement-level 2");
+            };
+
+            subtest "multiple hyphenated long options" => sub {
+                my ($stdout, $stderr) = 
$run_yell_command->(qw(--excitement-level 2 --output-format xml --repeat-count 
2));
+                my @lines = split /\n/, $stdout;
+                is ( scalar(@lines), 2, "repeated 2 times" );
+                like ( $lines[0], qr{\Q<yell>HELLO WORLD!!!</yell>\E}, "XML 
with excitement-level 2" );
+                is ( $stderr, '', "empty stderr" );
+            };
+
+            subtest "custom option + other options" => sub {
+                $test_yell_command->([qw(-f xml --add-suffix), '[ZAP]', 
qw(--excitement-level 1)],
+                                 qr{\Q<yell>HELLO WORLD!![ZAP]</yell>\E},
+                                 "custom suffix combined with format and 
excitement");
+            };
+        };
     };
 
-    subtest "hyphenated options" => sub {
-       local @ARGV = qw ( yell --excitement-level 2 );
-       my ( $stdout, $stderr, @result ) =
-          capture { MyTest::Class::Basic->new_with_options->run };
-
-       is ( $stdout, "HELLO WORLD!!!\n", "message sent to stdout" );
-       is ( $stderr, '', "empty stderr" );
-    };
-
-    subtest "inline" => sub {
-       local @ARGV = qw ( whisper );
-       my ( $stdout, $stderr, @result ) =
-          capture { MyTest::Class::Basic->new_with_options->run };
-
-       is ( $stdout, "hello world!\n", "message sent to stdout" );
-       is ( $stderr, '', "empty stderr" );
+    subtest "inline subcommand" => sub {
+        local @ARGV = qw ( whisper );
+        local *CORE::exit = sub { };
+        my ($stdout, $stderr) = capture { 
MyTest::Class::Basic->new_with_options->run };
+        is ( $stdout, "hello world!\n", "message sent to stdout" );
+        is ( $stderr, '', "empty stderr" );
     };
 
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CLI-Osprey-0.08/t/lib/MyTest/Class/Basic/Yell.pm 
new/CLI-Osprey-0.09/t/lib/MyTest/Class/Basic/Yell.pm
--- old/CLI-Osprey-0.08/t/lib/MyTest/Class/Basic/Yell.pm        2020-07-12 
19:11:46.000000000 +0200
+++ new/CLI-Osprey-0.09/t/lib/MyTest/Class/Basic/Yell.pm        2025-11-13 
16:10:30.000000000 +0100
@@ -10,9 +10,66 @@
     default => 0,
 );
 
+# Example of underscored attribute name with short option that doesn't match 
first letter
+# Tests the fix where option name becomes 'output-format' (hyphenated)
+option output_format => (
+    is => 'ro',
+    format => 's',
+    short => 'f',  # Note: 'f' not 'o' - doesn't match first letter
+    doc => 'Output format (text, json, xml)',
+    default => 'text',
+);
+
+# Another example with short option matching first letter
+option repeat_count => (
+    is => 'ro',
+    format => 'i',
+    short => 'r',  # Matches first letter of long option name
+    doc => 'Number of times to repeat the yell',
+    default => 1,
+);
+
+# Test with completely different option name from attribute
+option custom_suffix => (
+    is => 'ro',
+    format => 's',
+    option => 'add-suffix',  # Completely different from attribute name!
+    short => 's',
+    doc => 'Custom suffix to add to output',
+    default => '',
+);
+
+# Negatable boolean option - no format!
+option add_tag => (
+    is => 'ro',
+    negatable => 1,
+    doc => 'Add tag to output',
+    default => 0,
+);
+
 sub run {
     my ($self) = @_;
-    print uc $self->parent_command->message, "!" x $self->excitement_level, 
"\n";
+    my $message = uc $self->parent_command->message . "!" x 
$self->excitement_level;
+
+    # Add custom suffix if provided
+    $message .= $self->custom_suffix if $self->custom_suffix;
+
+    for (1 .. $self->repeat_count) {
+        my $output;
+        if ($self->output_format eq 'json') {
+            $output = qq({"yell": "$message"});
+        } elsif ($self->output_format eq 'xml') {
+            $output = qq(<yell>$message</yell>);
+        } else {
+            $output = $message;
+        }
+
+        if ($self->add_tag) {
+            print "[TAG] $output\n";
+        } else {
+            print "$output\n";
+        }
+    }
 }
 
 

++++++ README.md ++++++

## Build Results

Current state of perl in openSUSE:Factory is

![Factory build 
results](https://br.opensuse.org/status/openSUSE:Factory/perl-CLI-Osprey/standard)

The current state of perl in the devel project build (devel:languages:perl)

![Devel project build 
results](https://br.opensuse.org/status/devel:languages:perl/perl-CLI-Osprey)



++++++ _scmsync.obsinfo ++++++
mtime: 1763098441
commit: abb5022e22de86fcb0eb68e864141624c903b5533fd97b9af4b0b032b49a3a7c
url: https://src.opensuse.org/perl/perl-CLI-Osprey.git
revision: abb5022e22de86fcb0eb68e864141624c903b5533fd97b9af4b0b032b49a3a7c
projectscmsync: https://src.opensuse.org/perl/_ObsPrj

++++++ 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      2025-11-17 22:13:35.000000000 +0100
@@ -0,0 +1 @@
+.osc

Reply via email to