NAME
Dist::Zilla::Plugin::Manifest::Write - Have annotated distribution manifest
VERSION
Version v0.9.7, released on 2016-12-14 22:51 UTC.
WHAT?
Dist-Zilla-Plugin-Manifest-Write
(or Manifest::Write
for brevity) is a plugin for Dist::Zilla
, a replacement for standard plugin Manifest
. Manifest::Write
writes annotated distribution manifest: each filename is followed by a comment explaining origin of the file: if it is a part of software, meta information, or 3rd-party file. Also it can exclude built files from distribution, e. g. extra tests have to be built (to run) but need not be distributed.
This is Dist::Zilla::Plugin::Manifest::Write
module documentation. Read this if you are going to hack or extend Manifest::Write
.
If you want to have annotated distribution manifest, read the plugin user manual. General topics like getting source, building, installing, bug reporting and some others are covered in the README.
SYNOPSIS
package ManifestWithFileSize;
use Moose;
use namespace::autoclean;
extends 'Dist::Zilla::Plugin::Manifest::Write';
our $VERSION = '0.007';
# Overload any method or modify it with all the Moose power, e. g.:
around _file_comment => sub {
my ( $orig, $self, $file ) = @_;
my $comment = $self->$orig( $file );
if ( $file->name ne $self->manifest ) { # Avoid infinite recursion.
$comment .= sprintf( ' (%d bytes)', length( $file->encoded_content ) );
};
return $comment;
};
__PACKAGE__->meta->make_immutable;
1;
DESCRIPTION
In order to add a manifest file to the distribution, Dist::Zilla::Plugin::Manifest::Write
class consumes Dist::Zilla::Role::FileGatherer
role. To meet the role requirements, the class implements gather_files
method. Other methods are supporting helpers for this one.
Most of attributes are initialized by builders for easier customization by subclassing. Code is also divided into small methods for the same purpose.
CLASS METHODS
BUILDARGS
The method splits values of source_providers
option into separate plugin names using whitespaces as delimiters, combines result of splitting with source_provider
option values, then filters out empty values. Resulting ArrayRef
saved as source_providers
options.
The same for metainfo_providers
and metainfo_provider
options.
OBJECT ATTRIBUTES
manifest
Name of manifest file to write.
Str
, read-only. Default value is 'MANIFEST'
.
manifest_skip
Name of manifest.skip file to write.
Str
, read-only. Default value is 'MANIFEST.SKIP'
.
source_providers
List of plugin names. Enlisted plugins are considered as source file providers. A file added to distribution by any of these plugins is considered as source file.
ArrayRef[Str]
, read-only, default value is empty array. Init argument (and config file multi-value option) name is source_provider
. (BUILDARGS
also handles source_providers
option.)
metainfo_providers
Like source_providers
but enlists meta info file providers.
ArrayRef[Str]
, read-only, default value is CPANFile
, Manifest
, MetaYAML
, MetaJSON
, and the plugin itself. Init argument (and config file multi-value option) name is metainfo_provider
. (BUILDARGS
also handles metainfo_providers
option.)
Note: Do not confuse Manifest::Write
's term metainfo providers with Dist::Zilla
's MetaProvider
role. Plugins do MetaProvider
role provide metadata, while Manifest::Write
is interested in plugins which adds files containing metadata to the distribution (such plugins do FileInjector
role, not MetaProvider
).
strict
Strictness of checking source and metainfo provider names: -1 (no checks), 0 (some mistakes are fatal, some are not), or 1 (all mistakes are fatal).
Int
, read-only. Default is 1.
See "strict" in Dist::Zilla::Plugin::Manifest::Write::Manual.
show_mungers
If 1
, file mungers will be included into annotation. By default mungers are not included.
Bool
, read-only. Default is 0
.
deeds
This attribute maps internal file deed constants (SOURCE
, META
, OTHER
) to user-visible names used in manifest (project name, metainfo
, and 3rd party
respectively).
HashRef[Str]
, read-only.
breeds
This attribute maps internal file deed constants ($ADDED
and $BUILT
) to user-visible names used in manifest. By default user-visible breed names are the same as internal identifiers.
HashRef[Str]
, read-only.
_providers
This attribute maps provider names to file deeds. It makes _file_deed
method implementation simpler and faster.
HashRef[Str]
, read-only, not an init arg.
_dw
Max length of user-visible deed names.
Int
, read-only, not an init arg.
OBJECT METHODS
before_build
This method is called by Dist::Zilla
automatically before build. The method checks validity of source and metainfo provider names.
before_archive
This method is called by Dist::Zilla
automatically before build the archive. The method prunes files found by file finders specified in the exclude_files
option.
gather_files
This is the main method of the class. It adds a file with name $self->manifest
to the distribution. File content is specified by CodeRef
to postpone actual file creation. Being evaluated, the code iterates through all the files in distribution in alphabetical order, and fulfills the manifest with filenames and comments.
_file_name
$str = $self->_file_name( $file );
Returns filename to be used in manifest. If filename does not include special characters (spaces, backslashes (\
), apostrophes ('
), hashes (#
)), it is the same as real filename, otherwise filename encoded like Perl single-quoted string: backslashes and apostrophes are escaped, and entire filename is enclosed into apostrophes.
_file_comment
$str = $self->_file_comment( $file ); # Without leading sharp.
The method returns comment to be used with the specified file. Comment should not include leading sharp character (#
).
_file_history
$arrayref = $self->_file_history( $file );
The method calls _file_added_by
then does post-processing: all filename set
records are filtered out as insignificant and makes sure the log is not empty.
_file_added_by
$arrayref = $self->_file_added_by( $file );
The method parses file's added_by
log. Internally, added_by
log is a list of strings. Here are few examples:
content added by COPYING (Dist::Zilla::Plugin::GenerateFile line 114)
filename set by GatherFromManifest (Dist::Zilla::Plugin::GatherFromManifest line 125)
encoded_content added by GatherFromManifest (Dist::Zilla::Plugin::GatherFromManifest line 126)
text from coderef added by MetaJSON (Dist::Zilla::Plugin::MetaJSON line 83)
content set by TemplateFiles (Dist::Zilla::Plugin::TemplateFiles line 35)
content set by OurPkgVersion (Dist::Zilla::Plugin::OurPkgVersion line 82)
content set by PodWeaver (Dist::Zilla::Plugin::PodWeaver line 175)
Thus, each string in added_by
log follows the format:
<action> by <name> (<package> line <number>)
The method parses these strings and returns a more convenient for further processing form:
[ { action => …, name => …, package => …, line => … }, { … }, … ]
Do not call this method directly, use _file_history
instead.
_file_deed
$str = $self->_file_deed( $file, $history ); # $SOURCE, $META, or $OTHER.
Returns internal identifier of file deed.
_file_breed
$str = $self->_file_breed( $file, $history ); # ADDED or BUILT.
Returns internal identifier of file breed, either $ADDED
or $BUILT
.
Current implementation checks file object class: if it is a Dist::Zilla::File::OnDisk
, the file is added to distribution, otherwise the file is built.
_file_adder
$str = $self->_file_adder( $file, $history );
Returns moniker of the plugin added the file to the distribution.
_file_mungers
@list = $self->_file_mungers( $file, $history );
If show_mungers
attribute is true
, returns list of monikers of the plugins munged the file. Otherwise returns empty list.
_file_munger
$str = $self->_file_munger( $file, $history->[ $n ] );
The method is supposed to return a moniker of plugin munged the file. But… see "Correctness of Information" in Dist::Zilla::Plugin::Manifest::Write.
mvp_multivalue_args
This method tells Dist::Zilla
that source_provider
, source_providers
, metainfo_provider
, and metainfo_providers
are multi-value options (i. e. can be specified in several times).
FUNCTIONS
I would expect to find these functions in Dist::Zilla
. Actually, Dist::Zilla::Util
defines the function expand_config_package_name
, but that function "is likely to change or go away" and there is no reverse transformation.
__plugin_moniker
$str = __plugin_moniker( 'Dist::Zilla::Plugin::Name' ); # 'Name'
$str = __plugin_moniker( 'Non::Standard::Name' ); # '=Non::Standard::Name'
$str = __plugin_moniker( $plugin );
The function takes either reference to a plugin object or a string, package name, and returns Dist::Zilla
plugin moniker: If its package name begins with Dist::Zilla::Plugin::
, this common prefix is dropped, otherwise the package name prepended with =
.
__package_name
$str = __package_name( 'Name' ); # returns 'Dist::Zilla::Plugin::Name'
$str = __package_name( '=Name' ); # returns 'Name'
$str = __package_name( $plugin );
This is operation opposite to __plugin_moniker
. It takes either reference to plugin object, or string, plugin moniker, and returns package name.
This function is similar to expand_config_package_name
from Dist::Zilla::Util
, with minor difference: this function works with plugins only (not with plugin bundles and stashes), and accepts also reference to plugin object.
EXAMPLES
Manifest with File Size
A module shown in Synopsis is a real example. Its result looks like:
# This file was generated with ManifestWithFileSize 0.007.
MANIFEST # metainfo file built by =ManifestWithFileSize
dist.ini # Dummy file added by GatherDir (239 bytes)
lib/Dummy.pm # Dummy file added by GatherDir (22 bytes)
SEE ALSO
- Dist::Zilla
- Dist::Zilla::Role
- Dist::Zilla::Role::Plugin
- Dist::Zilla::Role::FileInjector
- Dist::Zilla::Role::FileGatherer
- Dist::Zilla::Plugin::Manifest
- Dist::Zilla::Plugin::Manifest::Write::Manual
AUTHOR
Van de Bugger <van.de.bugger@gmail.com>
COPYRIGHT AND LICENSE
Copyright (C) 2015, 2016 Van de Bugger
License GPLv3+: The GNU General Public License version 3 or later <http://www.gnu.org/licenses/gpl-3.0.txt>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.