NAME
App::CPANChangesUtils - Parse CPAN Changes file
VERSION
This document describes version 0.077 of App::CPANChangesUtils (from
Perl distribution App-CPANChangesUtils), released on 2022-06-13.
DESCRIPTION
This distribution provides some CLI utilities related to CPAN Changes
FUNCTIONS
format_cpan_changes
Usage:
format_cpan_changes(%args) -> [$status_code, $reason, $payload, \%result_meta]
Format CPAN Changes.
This utility is a simple wrapper to CPAN::Changes. It will parse your
CPAN Changes file into data structure, then use "serialize()" to format
it back to text form.
This function is not exported.
Arguments ('*' denotes required arguments):
* class => *perl::modname* (default: "CPAN::Changes")
* file => *filename*
If not specified, will look for file called Changes/ChangeLog in
current directory.
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status
code (200 means OK, 4xx caller error, 5xx function error). Second
element ($reason) is a string containing error message, or something
like "OK" if status is 200. Third element ($payload) is the actual
result, but usually not present when enveloped result is an error
response ($status_code is not 2xx). Fourth element (%result_meta) is
called result metadata and is optional, a hash that contains extra
information, much like how HTTP response headers provide additional
metadata.
Return value: (any)
parse_cpan_changes
Usage:
parse_cpan_changes(%args) -> [$status_code, $reason, $payload, \%result_meta]
Parse CPAN Changes file.
Examples:
* Parse with default settings:
parse_cpan_changes();
Result:
[
200,
"OK",
{
months => {
Apr => 4,
Aug => 8,
Dec => 12,
Feb => 2,
Jan => 1,
Jul => 7,
Jun => 6,
Mar => 3,
May => 5,
Nov => 11,
Oct => 10,
Sep => 9,
},
preamble => "",
releases => {
"0.01" => {
_parsed_date => "2013-08-05",
changes => { "" => { changes => ["First version."], name => "" } },
date => "2013-08-05",
metadata => { "released-by" => "SHARYANTO" },
note => "Released-By: SHARYANTO",
version => 0.01,
},
"0.02" => {
_parsed_date => "2013-08-06",
changes => {
"" => {
changes => ["No functional changes. Add missing dep [CT]."],
name => "",
},
},
date => "2013-08-06",
metadata => { "released-by" => "SHARYANTO" },
note => "Released-By: SHARYANTO",
version => 0.02,
},
"0.03" => {
_parsed_date => "2013-11-01",
changes => {
"" => {
changes => [
"No functional changes. Mention some other modules and the rationale for the script.",
],
name => "",
},
},
date => "2013-11-01",
metadata => { "released-by" => "SHARYANTO" },
note => "Released-By: SHARYANTO",
version => 0.03,
},
"0.04" => {
_parsed_date => "2014-07-22",
changes => {
"" => {
changes => [
"No functional changes.",
"Switch CLI scripts from using Perinci::CmdLine to Perinci::CmdLine::Any to reduce size of dependencies.",
],
name => "",
},
},
date => "2014-07-22",
metadata => { "released-by" => "SHARYANTO" },
note => "Released-By: SHARYANTO",
version => 0.04,
},
"0.05" => {
_parsed_date => "2015-09-03",
changes => {
"" => {
changes => [
"No functional changes.",
"[dist] Move spec prereqs from RuntimeRequires to DevelopRecommends to reduce deps but still allow indicating spec requirement.",
],
name => "",
},
},
date => "2015-09-03",
metadata => { "released-by" => "PERLANCAR" },
note => "Released-By: PERLANCAR",
version => 0.05,
},
"0.06" => {
_parsed_date => "2016-01-18",
changes => {
"" => {
changes => [
"No functional changes.",
"[build] Rebuild to fix POD section ordering.",
],
name => "",
},
},
date => "2016-01-18",
metadata => { "released-by" => "PERLANCAR" },
note => "Released-By: PERLANCAR",
version => 0.06,
},
"0.070" => {
_parsed_date => "2019-07-03",
changes => {
"" => {
changes => ["Add option --class to customize parser class."],
name => "",
},
},
date => "2019-07-03",
metadata => { "released-by" => "PERLANCAR", "urgency" => "medium" },
note => "Released-By: PERLANCAR; Urgency: medium",
version => "0.070",
},
"0.071" => {
_parsed_date => "2020-10-06",
changes => { "" => { changes => ["Add option --no-unbless."], name => "" } },
date => "2020-10-06",
metadata => { "released-by" => "PERLANCAR", "urgency" => "medium" },
note => "Released-By: PERLANCAR; Urgency: medium",
version => 0.071,
},
"0.072" => {
_parsed_date => "2021-05-25",
changes => {
"" => {
changes => [
"[build] Rebuild to update Sah coercion module names (old Sah coercion modules have been purged from CPAN).",
],
name => "",
},
},
date => "2021-05-25",
metadata => { "released-by" => "PERLANCAR", "urgency" => "high" },
note => "Released-By: PERLANCAR; Urgency: high",
version => 0.072,
},
"0.073" => {
_parsed_date => "2021-10-17",
changes => {
"" => {
changes => [
"Rename module/dist App-ParseCPANChanges -> App-CPANChangesUtils. - Add CLI format-cpan-changes.",
],
name => "",
},
},
date => "2021-10-17",
metadata => { "released-by" => "PERLANCAR", "urgency" => "medium" },
note => "Released-By: PERLANCAR; Urgency: medium",
version => 0.073,
},
"0.075" => {
_parsed_date => "2022-06-10",
changes => {
"" => {
changes => [
"[utility parse-cpan-changes] Add option parse_release_metadata (defaults to true) to parse 'key: value' metadata in the release note.",
],
name => "",
},
},
date => "2022-06-10",
metadata => { "released-by" => "PERLANCAR", "urgency" => "medium" },
note => "Released-By: PERLANCAR; Urgency: medium",
version => 0.075,
},
"0.076" => {
_parsed_date => "2022-06-10",
changes => {
"" => {
changes => ["No functional changes.", "[ux] Add an example."],
name => "",
},
},
date => "2022-06-10",
metadata => { "released-by" => "PERLANCAR", "urgency" => "low" },
note => "Released-By: PERLANCAR; Urgency: low",
version => 0.076,
},
"0.077" => {
_parsed_date => "2022-06-13",
changes => {
"" => {
changes => [
"No functional changes.",
"[ux] Show content of Changes file in example.",
],
name => "",
},
},
date => "2022-06-13",
metadata => { "released-by" => "PERLANCAR", "urgency" => "low" },
note => "Released-By: PERLANCAR; Urgency: low",
version => 0.077,
},
},
},
{},
]
Content of "Changes" file:
0.076 2022-06-10 Released-By: PERLANCAR; Urgency: low
- No functional changes.
- [ux] Add an example.
0.075 2022-06-10 Released-By: PERLANCAR; Urgency: medium
- [utility parse-cpan-changes] Add option parse_release_metadata
(defaults to true) to parse 'key: value' metadata in the release
note.
0.073 2021-10-17 Released-By: PERLANCAR; Urgency: medium
- Rename module/dist App-ParseCPANChanges -> App-CPANChangesUtils.
- Add CLI format-cpan-changes.
0.072 2021-05-25 Released-By: PERLANCAR; Urgency: high
- [build] Rebuild to update Sah coercion module names (old Sah coercion
modules have been purged from CPAN).
0.071 2020-10-06 Released-By: PERLANCAR; Urgency: medium
- Add option --no-unbless.
0.070 2019-07-03 Released-By: PERLANCAR; Urgency: medium
- Add option --class to customize parser class.
0.06 2016-01-18 Released-By: PERLANCAR
- No functional changes.
- [build] Rebuild to fix POD section ordering.
0.05 2015-09-03 Released-By: PERLANCAR
- No functional changes.
- [dist] Move spec prereqs from RuntimeRequires to
DevelopRecommends to reduce deps but still allow indicating spec
requirement.
0.04 2014-07-22 Released-By: SHARYANTO
- No functional changes.
- Switch CLI scripts from using Perinci::CmdLine to
Perinci::CmdLine::Any to reduce size of dependencies.
0.03 2013-11-01 Released-By: SHARYANTO
- No functional changes. Mention some other modules and the rationale
for the script.
0.02 2013-08-06 Released-By: SHARYANTO
- No functional changes. Add missing dep [CT].
0.01 2013-08-05 Released-By: SHARYANTO
- First version.
This utility is a simple wrapper for CPAN::Changes.
This function is not exported.
Arguments ('*' denotes required arguments):
* class => *perl::modname* (default: "CPAN::Changes")
* file => *filename*
If not specified, will look for file called Changes/ChangeLog in
current directory.
* parse_release_metadata => *bool* (default: 1)
Whether to parse release metadata in release note.
If set to true (the default), the utility will attempt to parse
release metadata in the release note. The release note is the text
after the version and date in the first line of a release entry:
0.001 - 2022-06-10 THIS IS THE RELEASE NOTE AND CAN BE ANY TEXT
One convention I use is for the release note to be
semicolon-separated of metadata entries, where each metadata is in
the form of HTTP-header-like "Name: Value" text where Name is
dash-separated words and Value is any text that does not contain
newline or semicolon. Example:
0.001 - 2022-06-10 Urgency: high; Backward-Incompatible: yes
Note that Debian changelog also supports "key=value" in the release
line.
This option, when enabled, will first check if the release note is
indeed in the form of semicolon-separated metadata. If yes, will
create a key called "metadata" in the release result structure
containing a hash of metadata:
{ "urgency" => "high", "backward-incompatible" => "yes" }
Note that the metadata names are converted to lowercase.
* unbless => *bool* (default: 1)
Whether to return Perl objects as unblessed refs.
If you set this to false, you'll need to use an output format that
can handle serializing Perl objects, e.g. on the CLI using
"--format=perl".
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status
code (200 means OK, 4xx caller error, 5xx function error). Second
element ($reason) is a string containing error message, or something
like "OK" if status is 200. Third element ($payload) is the actual
result, but usually not present when enveloped result is an error
response ($status_code is not 2xx). Fourth element (%result_meta) is
called result metadata and is optional, a hash that contains extra
information, much like how HTTP response headers provide additional
metadata.
Return value: (any)
HOMEPAGE
Please visit the project's homepage at
<https://metacpan.org/release/App-CPANChangesUtils>.
SOURCE
Source repository is at
<https://github.com/perlancar/perl-App-CPANChangesUtils>.
SEE ALSO
CPAN::Changes
CPAN::Changes::Spec
An alternative way to manage your Changes using INI master format:
Module::Metadata::Changes.
Dist::Zilla plugin to check your Changes before build:
Dist::Zilla::Plugin::CheckChangesHasContent,
Dist::Zilla::Plugin::CheckChangeLog.
AUTHOR
perlancar <perlancar@cpan.org>
CONTRIBUTING
To contribute, you can send patches by email/via RT, or send pull
requests on GitHub.
Most of the time, you don't need to build the distribution yourself. You
can simply modify the code, then test via:
% prove -l
If you want to build the distribution (e.g. to try to install it locally
on your system), you can install Dist::Zilla,
Dist::Zilla::PluginBundle::Author::PERLANCAR, and sometimes one or two
other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional
steps required beyond that are considered a bug and can be reported to
me.
COPYRIGHT AND LICENSE
This software is copyright (c) 2022, 2021 by perlancar
<perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
BUGS
Please report any bugs or feature requests on the bugtracker website
<https://rt.cpan.org/Public/Dist/Display.html?Name=App-CPANChangesUtils>
When submitting a bug or request, please include a test-file or a patch
to an existing test-file that illustrates the bug or desired feature.