@@ -1,277 +1,514 @@
Revision history for Dist-Zilla
+5.025 2014-11-10 21:12:14-05:00 America/New_York
+ - fix file.t failures with perl v5.14 and v5.16's Carp
+
+5.024 2014-11-05 23:08:07-05:00 America/New_York
+ - add the %Mint stash for minting defaults
+ - quiet down some low-priority log lines
+ - teeny tiny optimization by building dist prereqs structure lazily
+ - avoid ever requiring v0 of ExtUtils::MakeMaker
+ - fix a module-loading ordering issue in `dzil setup`
+
+5.023 2014-10-30 22:56:42-04:00 America/New_York
+ - optimizations to loading of heavyweight libraries in cmd line app
+ - some tests are now skipped on Win32 to avoid filename insanity
+ - files' added_by data should be more informative
+ - conflicts with installed code is now detected and/or advertised
+
+5.022 2014-10-27 22:55:53-04:00 America/New_York
+ - several optimizations to how PPI is used
+ - handle an empty ABSTRACT better
+ - now properly merging distmeta fragments together without loss, using
+ new CPAN::Meta::Merge
+ - create Makefile.PL and Build.PL files earlier, so they're in the file
+ list "the whole time"
+
+5.021 2014-10-20 22:43:52-04:00 America/New_York
+ - improve authordeps' ability to cope with version requirements and
+ non-default plugin names
+ - a few improvements to help given by "dzil help COMMAND"
+ - fixes a situation where exclusion-regexp-building in GatherDir
+ could mangle the given regexps
+ - now properly merging distmeta fragments together without loss, using
+ new CPAN::Meta::Merge (Karen Etheridge)
+ - [PkgVersion] now properly skips over $VERSION assignments in
+ comments (Karen Etheridge, github #322)
+ - the building of manpages is supressed in [MakeMaker]-driven builds
+ - lazily load quite a few more modules
+ - avoid using user's ~/.dzil even more
+ - while building dists for testing, don't bother building man pages
+ - try harder to notice minimum required perl version
+ - try harder to delete temporarily directory at the end of testing
+ - don't treat $VERSION assignments in comments as $VERSION assignments
+ - listdeps now takes --omit-core to skip core modules
+ - don't try to use terminal encoding on locale-free systems
+ - suggest the use of PPI::XS
+ - speed up and debug behavior of GatherDir
+
+5.020 2014-07-28 20:56:25-04:00 America/New_York
+ - the default required version for ExtUtils::MakeMaker in [MakeMaker]
+ has been removed
+ - load DateTime lazily
+ - the default required version for Module::Build in [ModuleBuild] has
+ been lowered
+
+5.019 2014-05-20 21:11:47-04:00 America/New_York
+ - remove a very brief-lived attempt to double-decode
+
+5.018 2014-05-20 21:07:04-04:00 America/New_York
+ - attempt to return abstract-from-file as a string, rather than
+ bytes, which can lead to weirdness (github issue #303)
+
+5.017 2014-05-17 08:35:33-04:00 America/New_York
+ - dotfiles and dot-directories are now included in sharedirs
+ - ModuleBuild and MakeMake should not re-build if it isn't needed
+ - authordeps now better understands "perl" dep
+ - munging of README is delayed to prevent unneeded work and
+ complication
+ - MANIFEST is now treated as a binary file
+ - 'dzil setup' now warns that credentials are stored in the clear
+ - MakeMaker should include fewer empty and useless hashrefs
+ - Makefile.old is now pruned as cruft
+
+5.016 2014-05-05 22:27:06-04:00 America/New_York
+ - hint about [Encoding] plugin in encoding error message (David
+ Golden)
+
+5.015 2014-03-30 21:55:36-04:00 America/New_York
+ - make it easier to have multiple PAUSE configs using UploadToCPAN's
+ pause_cfg_dir option (thanks, David Golden)
+
+5.014 2014-03-16 16:47:07+01:00 Europe/Paris
+ - Added 'jobs' argument for 'dzil test' for parallel testing (thanks,
+ David Golden!)
+ - add default_jobs attribute to TestRunner role
+ - fix the behavior of 'dzil add' with more than one file
+ (thanks, Leon Timmermans!)
+
+5.013 2014-02-08 17:08:16-05:00 America/New_York
+ - META.json is now a UTF-8 file, rather than ASCII
+ - document the use of filefinders in [PkgVersion], and remove
+ filtering out of .t, .pod files; do skip non-text files, though
+ - always load modules in "extra tests" like pod-coverage.t
+ - PruneCruft also prunes ./fatlib
+ - avoid being tricked by statements in __END__ section when looking for
+ variable assignments
+ - if "dzil install" fails due to exception, it is now propagated
+ - provide a better error when terminal encoding can't be determined
+
+5.012 2014-01-15 09:58:00-05:00 America/New_York
+ - when handling a multi-line abstract, fold the lines on whitespace;
+ previously, the newlines had been left in, which caused downstream
+ warnings
+
+5.011 2014-01-12 16:09:29-05:00 America/New_York
+ - ->VERSION is again defined in the tester forms of Builder and Minter
+ - remove a small obsolete code path from PkgVersion
+
+5.010 2014-01-11 22:06:04-05:00 America/New_York
+ - stop sharing a reference to cached PPI docs, which led to spooky
+ action at a distance
+ - PkgVersion no longer surrounds the new $VERSION assignment with a
+ bare block
+ - if there's a blank line after the package statement (and any number
+ of comment-only lines), PkgVersion will use that for a $VERSION
+ assignment, rather than insert a new line; this can be made mandatory
+ with die_on_line_insertion
+
+5.009 2014-01-07 20:21:17-05:00 America/New_York
+ - include time offset by default in NextRelease
+ - always pass PPI octets, not text
+
+5.008 2013-12-27 21:57:02 America/New_York
+ - fix utterly broken `dzil run`
+
+5.007 2013-12-27 20:50:45-05:00 America/New_York
+ - add the ability to say "dzil run --no-build" to run a command without
+ building inside the dist dir
+ (in other words, no `perl Makefile.PL && make`)
+ - Archive::Tar::Wrapper added as a recommended prereq
+ - fix :ShareFiles (thanks, Christopher J. Madsen and Karen Etheridge)
+ - new :AllFiles and :NoFiles filefinders (thanks, Karen Etheridge)
+ - most files generated by dzil plugins now self-identify with comments
+
+5.006 2013-11-06 09:21:12 America/New_York
+ - add ->is_bytes to files; shortcut for ->encoding eq 'bytes'
+ (thanks, David Golden)
+ - AutoPrereqs will not try scanning binary files (thanks, David Golden)
+
+5.005 2013-11-02 16:32:04 America/New_York
+ - add --keep-build-dir to "dzil test" and "dzil install"
+
+5.004 2013-11-02 09:59:18 America/New_York
+ [THIS RELEASE MIGHT BREAK YOUR BUILD]
+ - stable release of all the v5 changes below; READ THEM!
+ - by default, NextRelease now adds a trial release marker on trial
+ releases
+ - dzil setup will not echo password during setup
+
+5.003 2013-10-30 08:02:59 America/New_York
+ [THIS RELEASE MIGHT BREAK YOUR BUILD]
+ - add "dzil --version" support (thanks, Upasana Shukla)
+ - fix boneheaded mistake that broke listdeps in 5.002 (thanks, Karen
+ Etheridge)
+
+5.002 2013-10-29 10:35:54 America/New_York
+ [THIS RELEASE MIGHT BREAK YOUR BUILD]
+ - perform encoding steps during listdeps
+
+5.001 2013-10-23 17:40:09 America/New_York
+ [THIS RELEASE MIGHT BREAK YOUR BUILD]
+ - typo fixes (thanks, David Steinbrunner)
+
+5.000 2013-10-20 08:10:02 America/New_York
+ [THIS RELEASE MIGHT BREAK YOUR BUILD]
+ - all files now have content, encoded_content, and encoding attributes
+ - the Encoding plugin and EncodingProvider role have been added to
+ allow you to set the encoding on files; the default is UTF-8
+ - config.ini is assumed to be in UTF-8
+ - Data::Section sections are assumed to be UTF-8
+ - the Term chrome should encode input and output
+
+4.300039 2013-09-20 06:05:10 Asia/Tokyo
+ - tweak metafile generator to keep CPAN::Meta validator happy (thanks,
+ David Golden)
+
+4.300038 2013-09-08 09:18:34 America/New_York
+ - add horrible hack to avoid generating non-UTF-8 META.yml; seriously,
+ don't look at the code! Thanks, David Golden, whose code was simple
+ and probably much, much saner, but didn't cover as many cases as rjbs
+ wanted to cover.
+
+4.300037 2013-08-28 21:43:36 America/New_York
+ - update repo and bugtacker URLs
+
+4.300036 2013-08-25 21:41:21 America/New_York
+ - read CPAN::Uploader config with CPAN::Uploader, to work with new
+ trial releases supporting encrypted credential (thanks, Mike Doherty)
+
+ - improve tester tests (thanks, Dave O'Neill!)
+
+ - use Class::Load instead of Class::MOP
+
+ - better error messages when a bundle can't be loaded by @Filter
+
+ - make dynamic_config distmeta sticky; once one plugin sets it, it
+ stays stuck
+
+ - add a die_on_existing_version option to PkgVersion
+
+ - switch (for now?) "dzil install" to use cpanm
+
+ - PkgVersion won't rewrite file contents if nothing was changed
+ (thanks, Mike Doherty!)
+
+4.300035 2013-06-19 21:37:28 America/New_York
+ - update for new Perl::PrereqScanner, which will find "lib"
+
+ - update AutoPrereqs to skip Config and Errno
+
+ - fix docs to not suggest obsolete "Prereq" name (thanks, Ivan
+ Bessarabov!)
+
+4.300034 2013-04-13 16:56:48 Europe/London
+ - delay loading of CPAN::Uploader, and require a newer version to
+ require HTTPS (thanks, Olivier Mengué!)
+
+4.300033 2013-04-05 15:00:37 America/New_York
+ - fix .build/latest (thanks, Karen Etheridge!)
+
+ - doc fixes (thanks, Randy Stauner!)
+
+4.300032 2013-03-29 16:41:11 America/New_York
+ - test_requires support for ModuleBuild and MakeMaker (thanks,
+ Tatsuhiko Miyagawa!)
+
+4.300031 2013-03-17 21:47:31 America/New_York
+ - stacktrace removed from exception when a plugin's minimum version
+ check fails (thanks, Karen Etheridge!)
+
+ - add 'dzil listdeps --json', which lists all prerequisites broken up
+ by phase and type, in readable JSON format (thanks, Karen Etheridge!)
+
+ - improve errors when there's not enough configuration and no global
+ config file can be found (thanks, Dimitar Petrov)
+
+ - delay loading yet more libraries until needed (thanks, Olivier
+ Mengué!)
+
4.300030 2013-01-30 22:25:27 America/New_York
- listdeps --versions now sorts properly (thanks, Karen Etheridge!)
+ - listdeps --versions now sorts properly (thanks, Karen Etheridge!)
- delay loading more libraries until needed (thanks, Olivier Mengué!)
+ - delay loading more libraries until needed (thanks, Olivier Mengué!)
- excluded filenames in GatherDir were sometimes matched too fuzzily
+ - excluded filenames in GatherDir were sometimes matched too fuzzily
(thanks, Mike Doherty)
4.300029 2013-01-14 20:03:15 America/New_York
- allow :version directive in root section to require a given version
+ - allow :version directive in root section to require a given version
of Dist::Zilla
- simply and speedify some of GatherDir (Thanks, Olivier Mengué!)
+ - simply and speedify some of GatherDir (Thanks, Olivier Mengué!)
4.300028 2012-10-19 10:50:42 America/New_York
- when picking modules to treat as "part of the dist," be more lax in
+ - when picking modules to treat as "part of the dist," be more lax in
understanding libraries under ./t: ./t/lib/Foo.pm is now treated as
providing t::lib::Foo, lib::Foo, and Foo
4.300027 2012-10-16 21:07:06 America/New_York
- the "latest" symlink code broke Dist::Zilla on win32; fixed now!
+ - the "latest" symlink code broke Dist::Zilla on win32; fixed now!
(thanks, Brendan Byrd!)
4.300026 2012-10-13 22:21:17 America/New_York
- PodSyntaxTests, PodCoverageTests and MetaTests now add the right
+ - PodSyntaxTests, PodCoverageTests and MetaTests now add the right
develop/requires prereqs (thanks, Olivier Mengué and Ricardo Signes!)
- ModuleBuild now takes an mb_lib argument that can override the
+ - ModuleBuild now takes an mb_lib argument that can override the
default of "inc" (thanks, ben hengst)
- create .build/latest symlink when a build in .build is built (thanks,
+ - create .build/latest symlink when a build in .build is built (thanks,
Alexei Znamensky!)
- allow "-version" arg to [@Filter] to specify the version of the
+ - allow "-version" arg to [@Filter] to specify the version of the
bundle required (thanks, Rob Hoelz)
4.300025 2012-10-07 23:02:33 America/New_York
- add the LicenseProvider and NameProvider roles (thanks, Vyacheslav
+ - add the LicenseProvider and NameProvider roles (thanks, Vyacheslav
Matjukhin!)
- make Dist::Zilla::App::Tester be a CaptureExternal App::Cmd::Tester
+ - make Dist::Zilla::App::Tester be a CaptureExternal App::Cmd::Tester
4.300024 2012-09-26 12:01:45 America/New_York
- include $] in MetaConfig data
+ - include $] in MetaConfig data
4.300023 2012-09-06 09:01:12 America/New_York
- do not use ">" in a filename; fixes the build on Win32 (thanks,
+ - do not use ">" in a filename; fixes the build on Win32 (thanks,
djgoku!)
4.300022 2012-09-05 08:35:27 America/New_York
- do not detect an escaped "\$VERSION =" as an assignment to a variable
+ - do not detect an escaped "\$VERSION =" as an assignment to a variable
(this is sort of a half-measure)
- 'dzil run' also edits $PATH to include ExecDir directories (Karen
+ - 'dzil run' also edits $PATH to include ExecDir directories (Karen
Etheridge)
4.300021 2012-07-31 23:20:50 America/New_York
- plugins can now provide a MANIFEST.SKIP that can be processed by
+ - plugins can now provide a MANIFEST.SKIP that can be processed by
ManifestSkip. Previously generated content was just ignored.
(thanks, Olivier Mengué!)
- GenerateFile can now also template its filename, with the
+ - GenerateFile can now also template its filename, with the
name_is_template option (Thanks, Karen Etheridge!)
4.300020 2012-06-21 11:17:40 America/New_York
- properly set the working directory when testing (thanks, Jesse
+ - properly set the working directory when testing (thanks, Jesse
Luehrs!)
4.300019 2012-06-20 15:36:01 America/New_York
- avoid looking outside the dist during testing (thanks, Jesse Luehrs!)
+ - avoid looking outside the dist during testing (thanks, Jesse Luehrs!)
4.300018 2012-06-07 22:25:03 America/New_York
- format codes %E, %T, %U, & %V added to NextRelease (thanks,
+ - format codes %E, %T, %U, & %V added to NextRelease (thanks,
Karen Etheridge & Christopher J. Madsen!)
4.300017 2012-05-31 12:17:45 America/New_York
- also check plugin version requirements in dzil authordeps --missing
+ - also check plugin version requirements in dzil authordeps --missing
(Karen Etheridge)
- add 'dzil add' to add new modules to an existing dist (thanks, David
+ - add 'dzil add' to add new modules to an existing dist (thanks, David
Golden!)
- misc. bugfixes (thanks, Karen Etheridge and Olivier Mengué!)
+ - misc. bugfixes (thanks, Karen Etheridge and Olivier Mengué!)
4.300016 2012-05-04 22:09:10 America/New_York
- make AutoPrereqs treat .psgi files as scannable (thanks, Jakob Voss!)
+ - make AutoPrereqs treat .psgi files as scannable (thanks, Jakob Voss!)
- add yet more links in plugins documentation to help discoverability
+ - add yet more links in plugins documentation to help discoverability
of other plugins. (thanks, Olivier Mengué!)
- AutoPrereqs: skip author and release tests when scanning (RT#76305).
+ - AutoPrereqs: skip author and release tests when scanning (RT#76305).
(thanks, Olivier Mengué!)
4.300015 2012-04-23 21:38:21 America/New_York
- require a CPAN::Meta::Requirements 2.121 to get the
+ - require a CPAN::Meta::Requirements 2.121 to get the
requirements_for_module (thanks, Olivier Mengué!)
- 'dzil run' with no arguments will now invoke a new shell. (thanks,
+ - 'dzil run' with no arguments will now invoke a new shell. (thanks,
Karen Etheridge!)
- dzil clean now has has a "dry run" option. (thanks, Karen
+ - dzil clean now has has a "dry run" option. (thanks, Karen
Etheridge!)
- add more links in plugins documentation to help discoverability
+ - add more links in plugins documentation to help discoverability
of other plugins. (thanks, Olivier Mengué!)
- support :version requirement for bundles (thanks, Randy Stauner!)
+ - support :version requirement for bundles (thanks, Randy Stauner!)
4.300014 2012-04-05 12:46:33 America/New_York
- added the CPANFile plugin to create "cpanfile" prereq format
+ - added the CPANFile plugin to create "cpanfile" prereq format
- stop emitting an empty line in authordeps output (thanks, Olivier
+ - stop emitting an empty line in authordeps output (thanks, Olivier
Mengué!)
4.300013 2012-03-31 15:55:47 Europe/Paris
- dzil test has a new option, --all, which is the equivalent of
+ - dzil test has a new option, --all, which is the equivalent of
--release --automated --author.
4.300012 2012-03-30 14:31:56 Europe/Paris
- add 0 and never <undef> to the prereqs (thanks, David Golden)
+ - add 0 and never <undef> to the prereqs (thanks, David Golden)
4.300011 2012-03-30 11:42:44 Europe/Paris
- do not claim that a dep is missing in "listdeps" when it is present
+ - do not claim that a dep is missing in "listdeps" when it is present
with an undef $VERSION and we only require version 0 (reported by
Matthew Horsfall)
4.300010 2012-03-15 21:38:58 America/New_York
- The GatherDir::Template documentation has been improved
+ - The GatherDir::Template documentation has been improved
(Thanks, Christopher J. Madsen!)
- Depend on a more recent version of Config::MVP, which requires a fix
+ - Depend on a more recent version of Config::MVP, which requires a fix
in Class::Load to fix detection of plugin compilation errors on
perl5.8.8 (see Class::Load Changes file for details.) (Karen
Etheridge)
- Add --versions support to listdeps and authordeps (Cory G Watson)
+ - Add --versions support to listdeps and authordeps (Cory G Watson)
- Documentation fixes
+ - Documentation fixes
4.300009 2012-02-21 19:38:29 America/New_York
- PruneCruft also excludes the _Inline/ directory and MYMETA.json
+ - PruneCruft also excludes the _Inline/ directory and MYMETA.json
- MakeMaker has been refactored to make it easier to subclass
+ - MakeMaker has been refactored to make it easier to subclass
(Thanks, Christopher J. Madsen!)
4.300008 2012-02-16 17:28:34 America/New_York
- work around qr//m bug in 5.8.8 and earlier (thanks, Randy Stauner!)
+ - work around qr//m bug in 5.8.8 and earlier (thanks, Randy Stauner!)
- Fix to MakeMaker plugin: use separate scope for code that changes
+ - Fix to MakeMaker plugin: use separate scope for code that changes
namespace, when inserting ShareDir code. (RT#74788) (Karen Etheridge)
4.300007 2012-02-02 22:23:05 America/New_York
- Remove configs beginning with ':' from argument list before
+ - Remove configs beginning with ':' from argument list before
constructing that config; fixes issue where :version was
being passed to a plugin that had a strict constructor. (Karen
Etheridge)
4.300006 2011-12-30 15:28:34 America/New_York
- New methods dist_basename & archive_filename allow plugins
+ - New methods dist_basename & archive_filename allow plugins
to reliably get that information. This makes TestRelease
testable. (Thanks, Kent Fredric & Christopher J. Madsen!)
- Your PAUSE password will now no be echoed if entered at the
+ - Your PAUSE password will now no be echoed if entered at the
prompt, on most operating systems (Thanks, Mike Doherty!)
- replace use of Version::Requirements with CPAN::Meta::Requirements,
+ - replace use of Version::Requirements with CPAN::Meta::Requirements,
its replacement
4.300005 2011-12-13 08:49:19 America/New_York
- Prereqs now actually understands -relationship as documented
+ - Prereqs now actually understands -relationship as documented
in 4.300004. Also, it throws an error if you give it a
plugin name that does not specify a relationship (Thanks,
Christopher J. Madsen!)
4.300004 2011-12-12 23:34:30 America/New_York
- a new FileFinder plugin has been added, FileFinder::Filter
+ - a new FileFinder plugin has been added, FileFinder::Filter
(Thanks, Christopher J. Madsen!)
- AutoPrereqs can now be told to determine configure_requires
+ - AutoPrereqs can now be told to determine configure_requires
(Thanks, Christopher J. Madsen!)
- the (lack of) order of check of authordeps is now a bit more
+ - the (lack of) order of check of authordeps is now a bit more
predictible:
- plugins declared with "; authordep" lines are loaded before others
- inc:: plugins are checked first and in ASCII order
(Thanks, Olivier Mengué!)
- Many slow-to-load modules are now loaded opportunistically to improve
+ - Many slow-to-load modules are now loaded opportunistically to improve
startup time. (Thanks Olivier Mengué and rjbs)
- ShareDir documentation has been improved (thanks, Karen
+ - ShareDir documentation has been improved (thanks, Karen
Etheridge)
- Prereqs documentation has been improved
+ - Prereqs documentation has been improved
4.300003 2011-10-31 23:58:19 America/New_York
- If no credentials are found on disk, UploadToCPAN will now prompt for
+ - If no credentials are found on disk, UploadToCPAN will now prompt for
credentials during the BeforeRelease phase, not during release
(Thanks, Christopher J. Madsen!)
- AutoPrereqs can now be told what scanners or extra_scanners args to
+ - AutoPrereqs can now be told what scanners or extra_scanners args to
pass to Perl::PrereqScanner (Thanks, Christopher J. Madsen!)
- Prune perl prereqs out of BUILD_REQUIRES for EU::MM, and pick the
+ - Prune perl prereqs out of BUILD_REQUIRES for EU::MM, and pick the
highest required perl of either runtime or built requires. (Thanks,
Christopher J. Madsen!)
- Test routines should now properly report the calling line for
+ - Test routines should now properly report the calling line for
failures ($Test::Builder::Level is being set) (Thanks, Christopher J.
Madsen!)
- the is_filelist test assertion now works with objects that do the
+ - the is_filelist test assertion now works with objects that do the
Dist::Zilla::Role::File role (Thanks, Christopher J. Madsen!)
- a new FileFinder plugin has been added, FileFinder::ByName
+ - a new FileFinder plugin has been added, FileFinder::ByName
(Thanks, Christopher J. Madsen!)
4.300002 2011-09-22 09:43:45 America/New_York
- fix a bug that does Weird Stuff when a 0b file exists (thanks,
+ - fix a bug that does Weird Stuff when a 0b file exists (thanks,
Christian Walde!)
4.300001 2011-09-19 15:46:18 America/New_York
- Several improvements to how PPI is used should speed up the
+ - Several improvements to how PPI is used should speed up the
performance of Perl file munging and scanning. The PPI role was
added. (Thanks, Dave Rolsky!)
- We now use Archive::Tar::Wrapper if available, to speed up archive
+ - We now use Archive::Tar::Wrapper if available, to speed up archive
building. (Thanks, Dave Rolsky!)
4.300000 2011-08-19 10:12:36 America/New_York
- turn on Useqq option for Dumper, to get unicode string literals set
+ - turn on Useqq option for Dumper, to get unicode string literals set
properly in Makefile.PL and Build.PL without using utf8.pm
- decode user input from Chrome::Term as UTF-8
+ - decode user input from Chrome::Term as UTF-8
- during `dzil setup`, the config.ini file is now created with an added
+ - during `dzil setup`, the config.ini file is now created with an added
umask of 077 to avoid other users reading your PAUSE credentials
- update almost all Moose code to use make_immutable and
+ - update almost all Moose code to use make_immutable and
namespace::autoclean
4.200018 2011-08-18 11:13:03 America/New_York
- correct Perl::PrereqScanner version requirement, which was too low
+ - correct Perl::PrereqScanner version requirement, which was too low
4.200017 2011-08-17 18:54:07 America/New_York
- require and adapt to the new Perl::PrereqScanner, which does not
+ - require and adapt to the new Perl::PrereqScanner, which does not
prune out prereqs just because they're core and common
4.200016 2011-08-17 18:07:21 America/New_York
- add options to exclude files from GatherDir (David Golden)
+ - add options to exclude files from GatherDir (David Golden)
4.200015 2011-08-12 13:45:42 America/New_York
- don't build the dist in a directory with -TRIAL in the name; this
+ - don't build the dist in a directory with -TRIAL in the name; this
should fix bugs in "dzil release --trial" and probably other related
bugs
4.200014 2011-08-07 18:18:01 America/New_York
- add documentation for TemplateModule (thanks, Kent Fredric)
+ - add documentation for TemplateModule (thanks, Kent Fredric)
- fixes to tester.t for Win32 (thanks, Christian Walde)
+ - fixes to tester.t for Win32 (thanks, Christian Walde)
4.200013 2011-08-05 09:30:01 America/New_York
- "dzil listdeps --missing" no longer dies if it encounters an invalid
+ - "dzil listdeps --missing" no longer dies if it encounters an invalid
$VERSION (Jesse Luehrs)
- PkgVersion and PkgDist no longer use BEGIN blocks
+ - PkgVersion and PkgDist no longer use BEGIN blocks
4.200012 2011-07-18 09:02:09 America/New_York
- allow abstracts of more than one line, or with more than one word
+ - allow abstracts of more than one line, or with more than one word
before the dash, to be properly extracted (Florian Ragwitz)
- stringify tarball name to work with older Archive::Tar (Jan Tore
+ - stringify tarball name to work with older Archive::Tar (Jan Tore
Morken)
4.200011 2011-07-14 22:53:34 America/New_York
@@ -1,4 +1,4 @@
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
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 @@ b) the "Artistic License"
--- The GNU General Public License, Version 1, February 1989 ---
-This software is Copyright (c) 2013 by Ricardo SIGNES.
+This software is Copyright (c) 2014 by Ricardo SIGNES.
This is free software, licensed under:
@@ -22,7 +22,7 @@ This is free software, licensed under:
Version 1, February 1989
Copyright (C) 1989 Free Software Foundation, Inc.
- 51 Franklin St, Suite 500, Boston, MA 02110-1335 USA
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -272,7 +272,7 @@ That's all there is to it!
--- The Artistic License 1.0 ---
-This software is Copyright (c) 2013 by Ricardo SIGNES.
+This software is Copyright (c) 2014 by Ricardo SIGNES.
This is free software, licensed under:
@@ -1,3 +1,4 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.024.
Changes
LICENSE
MANIFEST
@@ -7,10 +8,15 @@ Makefile.PL
README
bin/dzil
corpus/README
+corpus/dist/AuthorDeps/dist.ini
corpus/dist/AutoPrereqs/bin/foobar
corpus/dist/AutoPrereqs/dist.ini
corpus/dist/AutoPrereqs/lib/DZPA/Empty.pm
corpus/dist/AutoPrereqs/lib/DZPA/Main.pm
+corpus/dist/AutoPrereqs/t/data.bin
+corpus/dist/DZ-NonAscii/Changes
+corpus/dist/DZ-NonAscii/dist.ini
+corpus/dist/DZ-NonAscii/lib/DZ1.pm
corpus/dist/DZ1/dist.ini
corpus/dist/DZ1/lib/DZ1.pm
corpus/dist/DZ2/dist.pl
@@ -22,6 +28,7 @@ corpus/dist/DZT_Inc/Foo.pm
corpus/dist/DZT_Inc/Foo/Bar.pm
corpus/dist/DZT_NoPm/lib/DZT/Sample.pod
corpus/dist/DZT_NoPm/t/basic.t
+corpus/dist/DZT_Share/my_data.dat
corpus/extra/subdir/index.html
corpus/extra/vader.txt
corpus/global/config.ini
@@ -43,6 +50,7 @@ lib/Dist/Zilla/App/Command/run.pm
lib/Dist/Zilla/App/Command/setup.pm
lib/Dist/Zilla/App/Command/smoke.pm
lib/Dist/Zilla/App/Command/test.pm
+lib/Dist/Zilla/App/Command/version.pm
lib/Dist/Zilla/App/Tester.pm
lib/Dist/Zilla/Chrome/Term.pm
lib/Dist/Zilla/Chrome/Test.pm
@@ -66,6 +74,7 @@ lib/Dist/Zilla/Plugin/BumpVersion.pm
lib/Dist/Zilla/Plugin/CPANFile.pm
lib/Dist/Zilla/Plugin/ConfirmRelease.pm
lib/Dist/Zilla/Plugin/DistINI.pm
+lib/Dist/Zilla/Plugin/Encoding.pm
lib/Dist/Zilla/Plugin/ExecDir.pm
lib/Dist/Zilla/Plugin/ExtraTests.pm
lib/Dist/Zilla/Plugin/FakeRelease.pm
@@ -121,6 +130,7 @@ lib/Dist/Zilla/Role/BuildPL.pm
lib/Dist/Zilla/Role/BuildRunner.pm
lib/Dist/Zilla/Role/Chrome.pm
lib/Dist/Zilla/Role/ConfigDumper.pm
+lib/Dist/Zilla/Role/EncodingProvider.pm
lib/Dist/Zilla/Role/ExecFiles.pm
lib/Dist/Zilla/Role/File.pm
lib/Dist/Zilla/Role/FileFinder.pm
@@ -135,6 +145,7 @@ lib/Dist/Zilla/Role/MetaProvider.pm
lib/Dist/Zilla/Role/MintingProfile.pm
lib/Dist/Zilla/Role/MintingProfile/ShareDir.pm
lib/Dist/Zilla/Role/ModuleMaker.pm
+lib/Dist/Zilla/Role/MutableFile.pm
lib/Dist/Zilla/Role/NameProvider.pm
lib/Dist/Zilla/Role/PPI.pm
lib/Dist/Zilla/Role/Plugin.pm
@@ -146,9 +157,11 @@ lib/Dist/Zilla/Role/ShareDir.pm
lib/Dist/Zilla/Role/Stash.pm
lib/Dist/Zilla/Role/Stash/Authors.pm
lib/Dist/Zilla/Role/Stash/Login.pm
+lib/Dist/Zilla/Role/StubBuild.pm
lib/Dist/Zilla/Role/TestRunner.pm
lib/Dist/Zilla/Role/TextTemplate.pm
lib/Dist/Zilla/Role/VersionProvider.pm
+lib/Dist/Zilla/Stash/Mint.pm
lib/Dist/Zilla/Stash/PAUSE.pm
lib/Dist/Zilla/Stash/Rights.pm
lib/Dist/Zilla/Stash/User.pm
@@ -164,12 +177,15 @@ misc/lib/Dist/Zilla/App/Command/gconf.pm
misc/lib/Dist/Zilla/App/Command/input.pm
profiles/default/extra-dist.ini
profiles/default/profile.ini
-t/00-compile.t
-t/000-report-versions-tiny.t
+t/00-report-prereqs.dd
+t/00-report-prereqs.t
t/commands/authordeps.t
t/compile.t
t/diagnostics/main-module.t
t/diagnostics/plugin-fail.t
+t/empty-abstract.t
+t/file-addedby.t
+t/file.t
t/lib/Dist/Zilla/Plugin/BrokenPlugin.pm
t/lib/Dist/Zilla/Plugin/BrokenPlugin2.pm
t/lib/Dist/Zilla/Plugin/BrokenPlugin3.pm
@@ -184,6 +200,7 @@ t/plugins/autoname.t
t/plugins/autoprereqs.t
t/plugins/autoversion.t
t/plugins/confirmrelease.t
+t/plugins/distmeta-merge.t
t/plugins/distmeta.t
t/plugins/extratests.t
t/plugins/fakerelease.t
@@ -213,6 +230,7 @@ t/plugins/uploadtocpan.t
t/tester-demo.t
t/tester.t
t/util.t
+t/zzz-check-breaks.t
todo/CHECKLIST-testing.mkdn
todo/command-plugins.mkdn
todo/config-arg-prefix.mkdn
@@ -4,7 +4,7 @@
"Ricardo SIGNES <rjbs@cpan.org>"
],
"dynamic_config" : 0,
- "generated_by" : "Dist::Zilla version 4.300030, CPAN::Meta::Converter version 2.120921",
+ "generated_by" : "Dist::Zilla version 5.024, CPAN::Meta::Converter version 2.142690",
"license" : [
"perl_5"
],
@@ -22,30 +22,32 @@
"prereqs" : {
"configure" : {
"requires" : {
- "ExtUtils::MakeMaker" : "6.30",
- "File::ShareDir::Install" : "0.03"
+ "ExtUtils::MakeMaker" : "0",
+ "File::ShareDir::Install" : "0.06"
}
},
"develop" : {
"requires" : {
- "Test::Pod" : "1.41",
- "version" : "0.9901"
+ "Test::Pod" : "1.41"
}
},
"runtime" : {
"recommends" : {
+ "Archive::Tar::Wrapper" : "0.15",
"Term::ReadLine::Gnu" : "0"
},
"requires" : {
+ "App::Cmd::Command::version" : "0",
"App::Cmd::Setup" : "0.309",
"App::Cmd::Tester" : "0.306",
"App::Cmd::Tester::CaptureExternal" : "0",
"Archive::Tar" : "0",
"CPAN::Meta::Converter" : "2.101550",
+ "CPAN::Meta::Merge" : "0",
"CPAN::Meta::Prereqs" : "2.120630",
"CPAN::Meta::Requirements" : "2.121",
"CPAN::Meta::Validator" : "2.101550",
- "CPAN::Uploader" : "0.101550",
+ "CPAN::Uploader" : "0.103004",
"Carp" : "0",
"Class::Load" : "0.17",
"Config::INI::Reader" : "0",
@@ -57,11 +59,11 @@
"Config::MVP::Reader::INI" : "2",
"Config::MVP::Section" : "2.200002",
"Data::Dumper" : "0",
- "Data::Section" : "0.004",
+ "Data::Section" : "0.200002",
"DateTime" : "0.44",
"Digest::MD5" : "0",
"Encode" : "0",
- "ExtUtils::Manifest" : "1.54",
+ "ExtUtils::Manifest" : "1.66",
"File::Copy::Recursive" : "0",
"File::Find::Rule" : "0",
"File::HomeDir" : "0",
@@ -71,14 +73,14 @@
"File::Spec" : "0",
"File::Temp" : "0",
"File::pushd" : "0",
- "Hash::Merge::Simple" : "0",
"JSON" : "2",
- "List::AllUtils" : "0",
"List::MoreUtils" : "0",
- "List::Util" : "0",
+ "List::Util" : "1.33",
"Log::Dispatchouli" : "1.102220",
+ "Mixin::Linewise::Readers" : "0.100",
+ "Module::CoreList" : "0",
"Moose" : "0.92",
- "Moose::Autobox" : "0.10",
+ "Moose::Autobox" : "0.09",
"Moose::Role" : "0",
"Moose::Util::TypeConstraints" : "0",
"MooseX::LazyRequire" : "0",
@@ -88,20 +90,23 @@
"MooseX::Types::Moose" : "0",
"MooseX::Types::Path::Class" : "0",
"MooseX::Types::Perl" : "0",
- "PPI" : "0",
+ "PPI::Document" : "0",
"Params::Util" : "0",
- "Path::Class" : "0",
- "Perl::PrereqScanner" : "1.005",
+ "Path::Class" : "0.22",
+ "Path::Tiny" : "0",
+ "Perl::PrereqScanner" : "1.016",
"Perl::Version" : "0",
"Pod::Eventual" : "0.091480",
"Scalar::Util" : "0",
"Software::License" : "0.101370",
"Software::LicenseUtils" : "0",
+ "Storable" : "0",
"String::Formatter" : "0.100680",
"String::RewritePrefix" : "0.005",
"Sub::Exporter" : "0",
"Sub::Exporter::ForMethods" : "0",
"Sub::Exporter::Util" : "0",
+ "Term::Encoding" : "0",
"Term::ReadKey" : "0",
"Term::ReadLine" : "0",
"Term::UI" : "0",
@@ -118,156 +123,231 @@
"strict" : "0",
"version" : "0",
"warnings" : "0"
+ },
+ "suggests" : {
+ "PPI::XS" : "0"
}
},
"test" : {
+ "recommends" : {
+ "CPAN::Meta" : "2.120900"
+ },
"requires" : {
- "File::Find" : "0",
+ "CPAN::Meta::Check" : "0.007",
+ "CPAN::Meta::Requirements" : "2.121",
+ "ExtUtils::MakeMaker" : "0",
+ "ExtUtils::Manifest" : "1.66",
+ "File::Spec" : "0",
"Software::License::None" : "0",
+ "Test::FailWarnings" : "0",
"Test::Fatal" : "0",
"Test::File::ShareDir" : "0",
- "Test::More" : "0.96"
+ "Test::More" : "0.96",
+ "lib" : "0",
+ "utf8" : "0"
}
}
},
"release_status" : "stable",
"resources" : {
"bugtracker" : {
- "web" : "https://github.com/rjbs/dist-zilla/issues"
+ "web" : "https://github.com/rjbs/Dist-Zilla/issues"
},
- "homepage" : "http://dzil.org/",
+ "homepage" : "https://github.com/rjbs/Dist-Zilla",
"repository" : {
"type" : "git",
- "url" : "http://github.com/rjbs/dist-zilla.git",
- "web" : "http://github.com/rjbs/dist-zilla"
+ "url" : "https://github.com/rjbs/Dist-Zilla.git",
+ "web" : "https://github.com/rjbs/Dist-Zilla"
},
"x_mailing_list" : "http://www.listbox.com/subscribe/?list_id=139292"
},
- "version" : "4.300030",
+ "version" : "5.025",
"x_Dist_Zilla" : {
"perl" : {
- "version" : "5.017008"
+ "version" : "5.021005"
},
"plugins" : [
{
"class" : "Dist::Zilla::Plugin::Git::GatherDir",
+ "config" : {
+ "Dist::Zilla::Plugin::GatherDir" : {
+ "exclude_filename" : [],
+ "exclude_match" : [],
+ "follow_symlinks" : "0",
+ "include_dotfiles" : "0",
+ "prefix" : "",
+ "prune_directory" : [],
+ "root" : "."
+ },
+ "Dist::Zilla::Plugin::Git::GatherDir" : {
+ "include_untracked" : "0"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "repo_root" : "."
+ }
+ },
"name" : "@Filter/Git::GatherDir",
- "version" : "2.007"
+ "version" : "2.025"
},
{
"class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
"name" : "@Filter/CheckPrereqsIndexed",
- "version" : "0.008"
+ "version" : "0.012"
},
{
"class" : "Dist::Zilla::Plugin::CheckExtraTests",
"name" : "@Filter/CheckExtraTests",
- "version" : "0.008"
+ "version" : "0.024"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PromptIfStale",
+ "config" : {
+ "Dist::Zilla::Plugin::PromptIfStale" : {
+ "check_all_plugins" : 0,
+ "check_all_prereqs" : 0,
+ "modules" : [
+ "Dist::Zilla::PluginBundle::RJBS"
+ ],
+ "phase" : "build",
+ "skip" : []
+ }
+ },
+ "name" : "@Filter/RJBS-Outdated",
+ "version" : "0.029"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PromptIfStale",
+ "config" : {
+ "Dist::Zilla::Plugin::PromptIfStale" : {
+ "check_all_plugins" : "1",
+ "check_all_prereqs" : 0,
+ "modules" : [],
+ "phase" : "release",
+ "skip" : []
+ }
+ },
+ "name" : "@Filter/CPAN-Outdated",
+ "version" : "0.029"
},
{
"class" : "Dist::Zilla::Plugin::PruneCruft",
"name" : "@Filter/@Filter/PruneCruft",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::ManifestSkip",
"name" : "@Filter/@Filter/ManifestSkip",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::MetaYAML",
"name" : "@Filter/@Filter/MetaYAML",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::License",
"name" : "@Filter/@Filter/License",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::Readme",
"name" : "@Filter/@Filter/Readme",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::ExecDir",
"name" : "@Filter/@Filter/ExecDir",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::ShareDir",
"name" : "@Filter/@Filter/ShareDir",
- "version" : "4.300030"
- },
- {
- "class" : "Dist::Zilla::Plugin::MakeMaker",
- "name" : "@Filter/@Filter/MakeMaker",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::Manifest",
"name" : "@Filter/@Filter/Manifest",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::TestRelease",
"name" : "@Filter/@Filter/TestRelease",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::ConfirmRelease",
"name" : "@Filter/@Filter/ConfirmRelease",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::UploadToCPAN",
"name" : "@Filter/@Filter/UploadToCPAN",
- "version" : "4.300030"
+ "version" : "5.024"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::MakeMaker",
+ "config" : {
+ "Dist::Zilla::Role::TestRunner" : {
+ "default_jobs" : 9
+ }
+ },
+ "name" : "@Filter/MakeMaker",
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::AutoPrereqs",
"name" : "@Filter/AutoPrereqs",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::Git::NextVersion",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::NextVersion" : {
+ "first_version" : "0.001",
+ "version_by_branch" : "0",
+ "version_regexp" : "(?^:^([0-9]+\\.[0-9]+)$)"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "repo_root" : "."
+ }
+ },
"name" : "@Filter/Git::NextVersion",
- "version" : "2.007"
+ "version" : "2.025"
},
{
"class" : "Dist::Zilla::Plugin::PkgVersion",
"name" : "@Filter/PkgVersion",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::MetaConfig",
"name" : "@Filter/MetaConfig",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::MetaJSON",
"name" : "@Filter/MetaJSON",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::NextRelease",
"name" : "@Filter/NextRelease",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
"name" : "@Filter/Test::ChangesHasContent",
- "version" : "0.006"
+ "version" : "0.007"
},
{
"class" : "Dist::Zilla::Plugin::PodSyntaxTests",
"name" : "@Filter/PodSyntaxTests",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
- "class" : "Dist::Zilla::Plugin::ReportVersions::Tiny",
- "name" : "@Filter/ReportVersions::Tiny",
- "version" : "1.08"
+ "class" : "Dist::Zilla::Plugin::Test::ReportPrereqs",
+ "name" : "@Filter/Test::ReportPrereqs",
+ "version" : "0.019"
},
{
"class" : "Dist::Zilla::Plugin::Prereqs",
@@ -278,57 +358,214 @@
}
},
"name" : "@Filter/TestMoreWithSubtests",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::PodWeaver",
+ "config" : {
+ "Dist::Zilla::Plugin::PodWeaver" : {
+ "config_plugins" : [
+ "@RJBS"
+ ],
+ "finder" : [
+ ":InstallModules",
+ ":ExecFiles"
+ ],
+ "plugins" : [
+ {
+ "class" : "Pod::Weaver::Plugin::EnsurePod5",
+ "name" : "@CorePrep/EnsurePod5",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Plugin::H1Nester",
+ "name" : "@CorePrep/H1Nester",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Plugin::SingleEncoding",
+ "name" : "@RJBS/SingleEncoding",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Name",
+ "name" : "@RJBS/Name",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Version",
+ "name" : "@RJBS/Version",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Region",
+ "name" : "@RJBS/Prelude",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Generic",
+ "name" : "@RJBS/Synopsis",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Generic",
+ "name" : "@RJBS/Description",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Generic",
+ "name" : "@RJBS/Overview",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Generic",
+ "name" : "@RJBS/Stability",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Collect",
+ "name" : "Attributes",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Collect",
+ "name" : "Methods",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Collect",
+ "name" : "Functions",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Leftovers",
+ "name" : "@RJBS/Leftovers",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Region",
+ "name" : "@RJBS/postlude",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Authors",
+ "name" : "@RJBS/Authors",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Section::Legal",
+ "name" : "@RJBS/Legal",
+ "version" : "4.007"
+ },
+ {
+ "class" : "Pod::Weaver::Plugin::Transformer",
+ "name" : "@RJBS/List",
+ "version" : "4.007"
+ }
+ ]
+ }
+ },
"name" : "@Filter/PodWeaver",
- "version" : "3.101641"
+ "version" : "4.006"
},
{
"class" : "Dist::Zilla::Plugin::GithubMeta",
"name" : "@Filter/GithubMeta",
- "version" : "0.28"
+ "version" : "0.46"
},
{
"class" : "Dist::Zilla::Plugin::Git::Check",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Check" : {
+ "untracked_files" : "die"
+ },
+ "Dist::Zilla::Role::Git::DirtyFiles" : {
+ "allow_dirty" : [
+ "dist.ini",
+ "Changes"
+ ],
+ "allow_dirty_match" : [],
+ "changelog" : "Changes"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "repo_root" : "."
+ }
+ },
"name" : "@Filter/@Git/Check",
- "version" : "2.007"
+ "version" : "2.025"
},
{
"class" : "Dist::Zilla::Plugin::Git::Commit",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Commit" : {
+ "add_files_in" : [],
+ "commit_msg" : "v%v%n%n%c",
+ "time_zone" : "local"
+ },
+ "Dist::Zilla::Role::Git::DirtyFiles" : {
+ "allow_dirty" : [
+ "dist.ini",
+ "Changes"
+ ],
+ "allow_dirty_match" : [],
+ "changelog" : "Changes"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "repo_root" : "."
+ }
+ },
"name" : "@Filter/@Git/Commit",
- "version" : "2.007"
+ "version" : "2.025"
},
{
"class" : "Dist::Zilla::Plugin::Git::Tag",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Tag" : {
+ "branch" : null,
+ "signed" : 0,
+ "tag" : "5.025",
+ "tag_format" : "%v",
+ "tag_message" : "v%v",
+ "time_zone" : "local"
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "repo_root" : "."
+ }
+ },
"name" : "@Filter/@Git/Tag",
- "version" : "2.007"
+ "version" : "2.025"
},
{
"class" : "Dist::Zilla::Plugin::Git::Push",
+ "config" : {
+ "Dist::Zilla::Plugin::Git::Push" : {
+ "push_to" : [
+ "origin :",
+ "github :"
+ ],
+ "remotes_must_exist" : 0
+ },
+ "Dist::Zilla::Role::Git::Repo" : {
+ "repo_root" : "."
+ }
+ },
"name" : "@Filter/@Git/Push",
- "version" : "2.007"
- },
- {
- "class" : "Dist::Zilla::Plugin::Test::Compile",
- "name" : "Test::Compile",
- "version" : "1.112820"
+ "version" : "2.025"
},
{
"class" : "Dist::Zilla::Plugin::ModuleShareDirs",
"name" : "ModuleShareDirs",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::MetaNoIndex",
"name" : "MetaNoIndex",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::MetaResources",
"name" : "MetaResources",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::Prereqs",
@@ -339,7 +576,7 @@
}
},
"name" : "TestRequires",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::Prereqs",
@@ -350,7 +587,18 @@
}
},
"name" : "RuntimeRecommends",
- "version" : "4.300030"
+ "version" : "5.024"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Prereqs",
+ "config" : {
+ "Dist::Zilla::Plugin::Prereqs" : {
+ "phase" : "runtime",
+ "type" : "suggests"
+ }
+ },
+ "name" : "RuntimeSuggests",
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::Prereqs",
@@ -361,7 +609,7 @@
}
},
"name" : "Prereqs",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::RemovePrereqs",
@@ -375,42 +623,67 @@
}
},
"name" : "RemovePrereqs",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::CPANFile",
"name" : "CPANFile",
- "version" : "4.300030"
+ "version" : "5.024"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Breaks",
+ "name" : "Breaks",
+ "version" : "0.003"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::CheckBreaks",
+ "config" : {
+ "Dist::Zilla::Plugin::Test::CheckBreaks" : {
+ "conflicts_module" : "Moose::Conflicts"
+ }
+ },
+ "name" : "Test::CheckBreaks",
+ "version" : "0.011"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":InstallModules",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":IncModules",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":TestFiles",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":ExecFiles",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":ShareFiles",
- "version" : "4.300030"
+ "version" : "5.024"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":MainModule",
- "version" : "4.300030"
+ "version" : "5.024"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":AllFiles",
+ "version" : "5.024"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":NoFiles",
+ "version" : "5.024"
}
],
"zilla" : {
@@ -418,8 +691,11 @@
"config" : {
"is_trial" : "0"
},
- "version" : "4.300030"
+ "version" : "5.024"
}
+ },
+ "x_breaks" : {
+ "Dist::Zilla::Plugin::MakeMaker::Awesome" : "< 0.22"
}
}
@@ -3,215 +3,274 @@ abstract: 'distribution builder; installer not included!'
author:
- 'Ricardo SIGNES <rjbs@cpan.org>'
build_requires:
- File::Find: 0
- Software::License::None: 0
- Test::Fatal: 0
- Test::File::ShareDir: 0
- Test::More: 0.96
+ CPAN::Meta::Check: '0.007'
+ CPAN::Meta::Requirements: '2.121'
+ ExtUtils::MakeMaker: '0'
+ ExtUtils::Manifest: '1.66'
+ File::Spec: '0'
+ Software::License::None: '0'
+ Test::FailWarnings: '0'
+ Test::Fatal: '0'
+ Test::File::ShareDir: '0'
+ Test::More: '0.96'
+ lib: '0'
+ utf8: '0'
configure_requires:
- ExtUtils::MakeMaker: 6.30
- File::ShareDir::Install: 0.03
+ ExtUtils::MakeMaker: '0'
+ File::ShareDir::Install: '0.06'
dynamic_config: 0
-generated_by: 'Dist::Zilla version 4.300030, CPAN::Meta::Converter version 2.120921'
+generated_by: 'Dist::Zilla version 5.024, CPAN::Meta::Converter version 2.142690'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
+ version: '1.4'
name: Dist-Zilla
no_index:
directory:
- corpus
- misc
recommends:
- Term::ReadLine::Gnu: 0
+ Archive::Tar::Wrapper: '0.15'
+ Term::ReadLine::Gnu: '0'
requires:
- App::Cmd::Setup: 0.309
- App::Cmd::Tester: 0.306
- App::Cmd::Tester::CaptureExternal: 0
- Archive::Tar: 0
- CPAN::Meta::Converter: 2.101550
- CPAN::Meta::Prereqs: 2.120630
- CPAN::Meta::Requirements: 2.121
- CPAN::Meta::Validator: 2.101550
- CPAN::Uploader: 0.101550
- Carp: 0
- Class::Load: 0.17
- Config::INI::Reader: 0
- Config::MVP::Assembler: 0
- Config::MVP::Assembler::WithBundles: 0
- Config::MVP::Reader: 2.101540
- Config::MVP::Reader::Findable::ByExtension: 0
- Config::MVP::Reader::Finder: 0
- Config::MVP::Reader::INI: 2
- Config::MVP::Section: 2.200002
- Data::Dumper: 0
- Data::Section: 0.004
- DateTime: 0.44
- Digest::MD5: 0
- Encode: 0
- ExtUtils::Manifest: 1.54
- File::Copy::Recursive: 0
- File::Find::Rule: 0
- File::HomeDir: 0
- File::Path: 0
- File::ShareDir: 0
- File::ShareDir::Install: 0.03
- File::Spec: 0
- File::Temp: 0
- File::pushd: 0
- Hash::Merge::Simple: 0
- JSON: 2
- List::AllUtils: 0
- List::MoreUtils: 0
- List::Util: 0
- Log::Dispatchouli: 1.102220
- Moose: 0.92
- Moose::Autobox: 0.10
- Moose::Role: 0
- Moose::Util::TypeConstraints: 0
- MooseX::LazyRequire: 0
- MooseX::Role::Parameterized: 0
- MooseX::SetOnce: 0
- MooseX::Types: 0
- MooseX::Types::Moose: 0
- MooseX::Types::Path::Class: 0
- MooseX::Types::Perl: 0
- PPI: 0
- Params::Util: 0
- Path::Class: 0
- Perl::PrereqScanner: 1.005
- Perl::Version: 0
- Pod::Eventual: 0.091480
- Scalar::Util: 0
- Software::License: 0.101370
- Software::LicenseUtils: 0
- String::Formatter: 0.100680
- String::RewritePrefix: 0.005
- Sub::Exporter: 0
- Sub::Exporter::ForMethods: 0
- Sub::Exporter::Util: 0
- Term::ReadKey: 0
- Term::ReadLine: 0
- Term::UI: 0
- Test::Deep: 0
- Text::Glob: 0.08
- Text::Template: 0
- Try::Tiny: 0
- YAML::Tiny: 0
- autobox: 2.53
- autodie: 0
- namespace::autoclean: 0
- parent: 0
+ App::Cmd::Command::version: '0'
+ App::Cmd::Setup: '0.309'
+ App::Cmd::Tester: '0.306'
+ App::Cmd::Tester::CaptureExternal: '0'
+ Archive::Tar: '0'
+ CPAN::Meta::Converter: '2.101550'
+ CPAN::Meta::Merge: '0'
+ CPAN::Meta::Prereqs: '2.120630'
+ CPAN::Meta::Requirements: '2.121'
+ CPAN::Meta::Validator: '2.101550'
+ CPAN::Uploader: '0.103004'
+ Carp: '0'
+ Class::Load: '0.17'
+ Config::INI::Reader: '0'
+ Config::MVP::Assembler: '0'
+ Config::MVP::Assembler::WithBundles: '0'
+ Config::MVP::Reader: '2.101540'
+ Config::MVP::Reader::Findable::ByExtension: '0'
+ Config::MVP::Reader::Finder: '0'
+ Config::MVP::Reader::INI: '2'
+ Config::MVP::Section: '2.200002'
+ Data::Dumper: '0'
+ Data::Section: '0.200002'
+ DateTime: '0.44'
+ Digest::MD5: '0'
+ Encode: '0'
+ ExtUtils::Manifest: '1.66'
+ File::Copy::Recursive: '0'
+ File::Find::Rule: '0'
+ File::HomeDir: '0'
+ File::Path: '0'
+ File::ShareDir: '0'
+ File::ShareDir::Install: '0.03'
+ File::Spec: '0'
+ File::Temp: '0'
+ File::pushd: '0'
+ JSON: '2'
+ List::MoreUtils: '0'
+ List::Util: '1.33'
+ Log::Dispatchouli: '1.102220'
+ Mixin::Linewise::Readers: '0.100'
+ Module::CoreList: '0'
+ Moose: '0.92'
+ Moose::Autobox: '0.09'
+ Moose::Role: '0'
+ Moose::Util::TypeConstraints: '0'
+ MooseX::LazyRequire: '0'
+ MooseX::Role::Parameterized: '0'
+ MooseX::SetOnce: '0'
+ MooseX::Types: '0'
+ MooseX::Types::Moose: '0'
+ MooseX::Types::Path::Class: '0'
+ MooseX::Types::Perl: '0'
+ PPI::Document: '0'
+ Params::Util: '0'
+ Path::Class: '0.22'
+ Path::Tiny: '0'
+ Perl::PrereqScanner: '1.016'
+ Perl::Version: '0'
+ Pod::Eventual: '0.091480'
+ Scalar::Util: '0'
+ Software::License: '0.101370'
+ Software::LicenseUtils: '0'
+ Storable: '0'
+ String::Formatter: '0.100680'
+ String::RewritePrefix: '0.005'
+ Sub::Exporter: '0'
+ Sub::Exporter::ForMethods: '0'
+ Sub::Exporter::Util: '0'
+ Term::Encoding: '0'
+ Term::ReadKey: '0'
+ Term::ReadLine: '0'
+ Term::UI: '0'
+ Test::Deep: '0'
+ Text::Glob: '0.08'
+ Text::Template: '0'
+ Try::Tiny: '0'
+ YAML::Tiny: '0'
+ autobox: '2.53'
+ autodie: '0'
+ namespace::autoclean: '0'
+ parent: '0'
perl: v5.8.5
- strict: 0
- version: 0
- warnings: 0
+ strict: '0'
+ version: '0'
+ warnings: '0'
resources:
- X_mailing_list: http://www.listbox.com/subscribe/?list_id=139292
- bugtracker: https://github.com/rjbs/dist-zilla/issues
- homepage: http://dzil.org/
- repository: http://github.com/rjbs/dist-zilla.git
-version: 4.300030
+ Mailing_list: http://www.listbox.com/subscribe/?list_id=139292
+ bugtracker: https://github.com/rjbs/Dist-Zilla/issues
+ homepage: https://github.com/rjbs/Dist-Zilla
+ repository: https://github.com/rjbs/Dist-Zilla.git
+version: '5.025'
x_Dist_Zilla:
perl:
- version: 5.017008
+ version: '5.021005'
plugins:
-
class: Dist::Zilla::Plugin::Git::GatherDir
+ config:
+ Dist::Zilla::Plugin::GatherDir:
+ exclude_filename: []
+ exclude_match: []
+ follow_symlinks: '0'
+ include_dotfiles: '0'
+ prefix: ''
+ prune_directory: []
+ root: .
+ Dist::Zilla::Plugin::Git::GatherDir:
+ include_untracked: '0'
+ Dist::Zilla::Role::Git::Repo:
+ repo_root: .
name: '@Filter/Git::GatherDir'
- version: 2.007
+ version: '2.025'
-
class: Dist::Zilla::Plugin::CheckPrereqsIndexed
name: '@Filter/CheckPrereqsIndexed'
- version: 0.008
+ version: '0.012'
-
class: Dist::Zilla::Plugin::CheckExtraTests
name: '@Filter/CheckExtraTests'
- version: 0.008
+ version: '0.024'
+ -
+ class: Dist::Zilla::Plugin::PromptIfStale
+ config:
+ Dist::Zilla::Plugin::PromptIfStale:
+ check_all_plugins: 0
+ check_all_prereqs: 0
+ modules:
+ - Dist::Zilla::PluginBundle::RJBS
+ phase: build
+ skip: []
+ name: '@Filter/RJBS-Outdated'
+ version: '0.029'
+ -
+ class: Dist::Zilla::Plugin::PromptIfStale
+ config:
+ Dist::Zilla::Plugin::PromptIfStale:
+ check_all_plugins: '1'
+ check_all_prereqs: 0
+ modules: []
+ phase: release
+ skip: []
+ name: '@Filter/CPAN-Outdated'
+ version: '0.029'
-
class: Dist::Zilla::Plugin::PruneCruft
name: '@Filter/@Filter/PruneCruft'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::ManifestSkip
name: '@Filter/@Filter/ManifestSkip'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::MetaYAML
name: '@Filter/@Filter/MetaYAML'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::License
name: '@Filter/@Filter/License'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::Readme
name: '@Filter/@Filter/Readme'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::ExecDir
name: '@Filter/@Filter/ExecDir'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::ShareDir
name: '@Filter/@Filter/ShareDir'
- version: 4.300030
- -
- class: Dist::Zilla::Plugin::MakeMaker
- name: '@Filter/@Filter/MakeMaker'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::Manifest
name: '@Filter/@Filter/Manifest'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::TestRelease
name: '@Filter/@Filter/TestRelease'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::ConfirmRelease
name: '@Filter/@Filter/ConfirmRelease'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::UploadToCPAN
name: '@Filter/@Filter/UploadToCPAN'
- version: 4.300030
+ version: '5.024'
+ -
+ class: Dist::Zilla::Plugin::MakeMaker
+ config:
+ Dist::Zilla::Role::TestRunner:
+ default_jobs: 9
+ name: '@Filter/MakeMaker'
+ version: '5.024'
-
class: Dist::Zilla::Plugin::AutoPrereqs
name: '@Filter/AutoPrereqs'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::Git::NextVersion
+ config:
+ Dist::Zilla::Plugin::Git::NextVersion:
+ first_version: '0.001'
+ version_by_branch: '0'
+ version_regexp: (?^:^([0-9]+\.[0-9]+)$)
+ Dist::Zilla::Role::Git::Repo:
+ repo_root: .
name: '@Filter/Git::NextVersion'
- version: 2.007
+ version: '2.025'
-
class: Dist::Zilla::Plugin::PkgVersion
name: '@Filter/PkgVersion'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::MetaConfig
name: '@Filter/MetaConfig'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::MetaJSON
name: '@Filter/MetaJSON'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::NextRelease
name: '@Filter/NextRelease'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::Test::ChangesHasContent
name: '@Filter/Test::ChangesHasContent'
- version: 0.006
+ version: '0.007'
-
class: Dist::Zilla::Plugin::PodSyntaxTests
name: '@Filter/PodSyntaxTests'
- version: 4.300030
+ version: '5.024'
-
- class: Dist::Zilla::Plugin::ReportVersions::Tiny
- name: '@Filter/ReportVersions::Tiny'
- version: 1.08
+ class: Dist::Zilla::Plugin::Test::ReportPrereqs
+ name: '@Filter/Test::ReportPrereqs'
+ version: '0.019'
-
class: Dist::Zilla::Plugin::Prereqs
config:
@@ -219,47 +278,165 @@ x_Dist_Zilla:
phase: test
type: requires
name: '@Filter/TestMoreWithSubtests'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::PodWeaver
+ config:
+ Dist::Zilla::Plugin::PodWeaver:
+ config_plugins:
+ - '@RJBS'
+ finder:
+ - ':InstallModules'
+ - ':ExecFiles'
+ plugins:
+ -
+ class: Pod::Weaver::Plugin::EnsurePod5
+ name: '@CorePrep/EnsurePod5'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Plugin::H1Nester
+ name: '@CorePrep/H1Nester'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Plugin::SingleEncoding
+ name: '@RJBS/SingleEncoding'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Name
+ name: '@RJBS/Name'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Version
+ name: '@RJBS/Version'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Region
+ name: '@RJBS/Prelude'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Generic
+ name: '@RJBS/Synopsis'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Generic
+ name: '@RJBS/Description'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Generic
+ name: '@RJBS/Overview'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Generic
+ name: '@RJBS/Stability'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Collect
+ name: Attributes
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Collect
+ name: Methods
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Collect
+ name: Functions
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Leftovers
+ name: '@RJBS/Leftovers'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Region
+ name: '@RJBS/postlude'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Authors
+ name: '@RJBS/Authors'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Section::Legal
+ name: '@RJBS/Legal'
+ version: '4.007'
+ -
+ class: Pod::Weaver::Plugin::Transformer
+ name: '@RJBS/List'
+ version: '4.007'
name: '@Filter/PodWeaver'
- version: 3.101641
+ version: '4.006'
-
class: Dist::Zilla::Plugin::GithubMeta
name: '@Filter/GithubMeta'
- version: 0.28
+ version: '0.46'
-
class: Dist::Zilla::Plugin::Git::Check
+ config:
+ Dist::Zilla::Plugin::Git::Check:
+ untracked_files: die
+ Dist::Zilla::Role::Git::DirtyFiles:
+ allow_dirty:
+ - dist.ini
+ - Changes
+ allow_dirty_match: []
+ changelog: Changes
+ Dist::Zilla::Role::Git::Repo:
+ repo_root: .
name: '@Filter/@Git/Check'
- version: 2.007
+ version: '2.025'
-
class: Dist::Zilla::Plugin::Git::Commit
+ config:
+ Dist::Zilla::Plugin::Git::Commit:
+ add_files_in: []
+ commit_msg: v%v%n%n%c
+ time_zone: local
+ Dist::Zilla::Role::Git::DirtyFiles:
+ allow_dirty:
+ - dist.ini
+ - Changes
+ allow_dirty_match: []
+ changelog: Changes
+ Dist::Zilla::Role::Git::Repo:
+ repo_root: .
name: '@Filter/@Git/Commit'
- version: 2.007
+ version: '2.025'
-
class: Dist::Zilla::Plugin::Git::Tag
+ config:
+ Dist::Zilla::Plugin::Git::Tag:
+ branch: ~
+ signed: 0
+ tag: '5.025'
+ tag_format: '%v'
+ tag_message: v%v
+ time_zone: local
+ Dist::Zilla::Role::Git::Repo:
+ repo_root: .
name: '@Filter/@Git/Tag'
- version: 2.007
+ version: '2.025'
-
class: Dist::Zilla::Plugin::Git::Push
+ config:
+ Dist::Zilla::Plugin::Git::Push:
+ push_to:
+ - 'origin :'
+ - 'github :'
+ remotes_must_exist: 0
+ Dist::Zilla::Role::Git::Repo:
+ repo_root: .
name: '@Filter/@Git/Push'
- version: 2.007
- -
- class: Dist::Zilla::Plugin::Test::Compile
- name: Test::Compile
- version: 1.112820
+ version: '2.025'
-
class: Dist::Zilla::Plugin::ModuleShareDirs
name: ModuleShareDirs
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::MetaNoIndex
name: MetaNoIndex
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::MetaResources
name: MetaResources
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::Prereqs
config:
@@ -267,7 +444,7 @@ x_Dist_Zilla:
phase: test
type: requires
name: TestRequires
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::Prereqs
config:
@@ -275,7 +452,15 @@ x_Dist_Zilla:
phase: runtime
type: recommends
name: RuntimeRecommends
- version: 4.300030
+ version: '5.024'
+ -
+ class: Dist::Zilla::Plugin::Prereqs
+ config:
+ Dist::Zilla::Plugin::Prereqs:
+ phase: runtime
+ type: suggests
+ name: RuntimeSuggests
+ version: '5.024'
-
class: Dist::Zilla::Plugin::Prereqs
config:
@@ -283,7 +468,7 @@ x_Dist_Zilla:
phase: runtime
type: requires
name: Prereqs
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::RemovePrereqs
config:
@@ -293,37 +478,58 @@ x_Dist_Zilla:
- Dist::Zilla::Tester::_Role
- Some::Package::That::Does::Not::Exist::Due::To::A::Typo
name: RemovePrereqs
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::CPANFile
name: CPANFile
- version: 4.300030
+ version: '5.024'
+ -
+ class: Dist::Zilla::Plugin::Breaks
+ name: Breaks
+ version: '0.003'
+ -
+ class: Dist::Zilla::Plugin::Test::CheckBreaks
+ config:
+ Dist::Zilla::Plugin::Test::CheckBreaks:
+ conflicts_module: Moose::Conflicts
+ name: Test::CheckBreaks
+ version: '0.011'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':InstallModules'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':IncModules'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':TestFiles'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':ExecFiles'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':ShareFiles'
- version: 4.300030
+ version: '5.024'
-
class: Dist::Zilla::Plugin::FinderCode
name: ':MainModule'
- version: 4.300030
+ version: '5.024'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':AllFiles'
+ version: '5.024'
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':NoFiles'
+ version: '5.024'
zilla:
class: Dist::Zilla::Dist::Builder
config:
- is_trial: 0
- version: 4.300030
+ is_trial: '0'
+ version: '5.024'
+x_breaks:
+ Dist::Zilla::Plugin::MakeMaker::Awesome: '< 0.22'
@@ -1,45 +1,44 @@
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.024.
use strict;
use warnings;
use 5.008005;
-use ExtUtils::MakeMaker 6.30;
+use ExtUtils::MakeMaker;
use File::ShareDir::Install;
+$File::ShareDir::Install::INCLUDE_DOTFILES = 1;
+$File::ShareDir::Install::INCLUDE_DOTDIRS = 1;
install_share module => "Dist::Zilla::MintingProfile::Default", "profiles";
my %WriteMakefileArgs = (
"ABSTRACT" => "distribution builder; installer not included!",
"AUTHOR" => "Ricardo SIGNES <rjbs\@cpan.org>",
- "BUILD_REQUIRES" => {
- "File::Find" => 0,
- "Software::License::None" => 0,
- "Test::Fatal" => 0,
- "Test::File::ShareDir" => 0,
- "Test::More" => "0.96"
- },
"CONFIGURE_REQUIRES" => {
- "ExtUtils::MakeMaker" => "6.30",
- "File::ShareDir::Install" => "0.03"
+ "ExtUtils::MakeMaker" => 0,
+ "File::ShareDir::Install" => "0.06"
},
"DISTNAME" => "Dist-Zilla",
"EXE_FILES" => [
"bin/dzil"
],
"LICENSE" => "perl",
+ "MIN_PERL_VERSION" => "5.008005",
"NAME" => "Dist::Zilla",
"PREREQ_PM" => {
+ "App::Cmd::Command::version" => 0,
"App::Cmd::Setup" => "0.309",
"App::Cmd::Tester" => "0.306",
"App::Cmd::Tester::CaptureExternal" => 0,
"Archive::Tar" => 0,
"CPAN::Meta::Converter" => "2.101550",
+ "CPAN::Meta::Merge" => 0,
"CPAN::Meta::Prereqs" => "2.120630",
"CPAN::Meta::Requirements" => "2.121",
"CPAN::Meta::Validator" => "2.101550",
- "CPAN::Uploader" => "0.101550",
+ "CPAN::Uploader" => "0.103004",
"Carp" => 0,
"Class::Load" => "0.17",
"Config::INI::Reader" => 0,
@@ -51,11 +50,11 @@ my %WriteMakefileArgs = (
"Config::MVP::Reader::INI" => 2,
"Config::MVP::Section" => "2.200002",
"Data::Dumper" => 0,
- "Data::Section" => "0.004",
+ "Data::Section" => "0.200002",
"DateTime" => "0.44",
"Digest::MD5" => 0,
"Encode" => 0,
- "ExtUtils::Manifest" => "1.54",
+ "ExtUtils::Manifest" => "1.66",
"File::Copy::Recursive" => 0,
"File::Find::Rule" => 0,
"File::HomeDir" => 0,
@@ -65,14 +64,14 @@ my %WriteMakefileArgs = (
"File::Spec" => 0,
"File::Temp" => 0,
"File::pushd" => 0,
- "Hash::Merge::Simple" => 0,
"JSON" => 2,
- "List::AllUtils" => 0,
"List::MoreUtils" => 0,
- "List::Util" => 0,
+ "List::Util" => "1.33",
"Log::Dispatchouli" => "1.102220",
+ "Mixin::Linewise::Readers" => "0.100",
+ "Module::CoreList" => 0,
"Moose" => "0.92",
- "Moose::Autobox" => "0.10",
+ "Moose::Autobox" => "0.09",
"Moose::Role" => 0,
"Moose::Util::TypeConstraints" => 0,
"MooseX::LazyRequire" => 0,
@@ -82,20 +81,23 @@ my %WriteMakefileArgs = (
"MooseX::Types::Moose" => 0,
"MooseX::Types::Path::Class" => 0,
"MooseX::Types::Perl" => 0,
- "PPI" => 0,
+ "PPI::Document" => 0,
"Params::Util" => 0,
- "Path::Class" => 0,
- "Perl::PrereqScanner" => "1.005",
+ "Path::Class" => "0.22",
+ "Path::Tiny" => 0,
+ "Perl::PrereqScanner" => "1.016",
"Perl::Version" => 0,
"Pod::Eventual" => "0.091480",
"Scalar::Util" => 0,
"Software::License" => "0.101370",
"Software::LicenseUtils" => 0,
+ "Storable" => 0,
"String::Formatter" => "0.100680",
"String::RewritePrefix" => "0.005",
"Sub::Exporter" => 0,
"Sub::Exporter::ForMethods" => 0,
"Sub::Exporter::Util" => 0,
+ "Term::Encoding" => 0,
"Term::ReadKey" => 0,
"Term::ReadLine" => 0,
"Term::UI" => 0,
@@ -112,24 +114,129 @@ my %WriteMakefileArgs = (
"version" => 0,
"warnings" => 0
},
- "VERSION" => "4.300030",
+ "TEST_REQUIRES" => {
+ "CPAN::Meta::Check" => "0.007",
+ "CPAN::Meta::Requirements" => "2.121",
+ "ExtUtils::MakeMaker" => 0,
+ "ExtUtils::Manifest" => "1.66",
+ "File::Spec" => 0,
+ "Software::License::None" => 0,
+ "Test::FailWarnings" => 0,
+ "Test::Fatal" => 0,
+ "Test::File::ShareDir" => 0,
+ "Test::More" => "0.96",
+ "lib" => 0,
+ "utf8" => 0
+ },
+ "VERSION" => "5.025",
"test" => {
"TESTS" => "t/*.t t/commands/*.t t/diagnostics/*.t t/plugins/*.t"
}
);
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
- my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
- my $pp = $WriteMakefileArgs{PREREQ_PM};
- for my $mod ( keys %$br ) {
- if ( exists $pp->{$mod} ) {
- $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
- }
- else {
- $pp->{$mod} = $br->{$mod};
- }
- }
+my %FallbackPrereqs = (
+ "App::Cmd::Command::version" => 0,
+ "App::Cmd::Setup" => "0.309",
+ "App::Cmd::Tester" => "0.306",
+ "App::Cmd::Tester::CaptureExternal" => 0,
+ "Archive::Tar" => 0,
+ "CPAN::Meta::Check" => "0.007",
+ "CPAN::Meta::Converter" => "2.101550",
+ "CPAN::Meta::Merge" => 0,
+ "CPAN::Meta::Prereqs" => "2.120630",
+ "CPAN::Meta::Requirements" => "2.121",
+ "CPAN::Meta::Validator" => "2.101550",
+ "CPAN::Uploader" => "0.103004",
+ "Carp" => 0,
+ "Class::Load" => "0.17",
+ "Config::INI::Reader" => 0,
+ "Config::MVP::Assembler" => 0,
+ "Config::MVP::Assembler::WithBundles" => 0,
+ "Config::MVP::Reader" => "2.101540",
+ "Config::MVP::Reader::Findable::ByExtension" => 0,
+ "Config::MVP::Reader::Finder" => 0,
+ "Config::MVP::Reader::INI" => 2,
+ "Config::MVP::Section" => "2.200002",
+ "Data::Dumper" => 0,
+ "Data::Section" => "0.200002",
+ "DateTime" => "0.44",
+ "Digest::MD5" => 0,
+ "Encode" => 0,
+ "ExtUtils::MakeMaker" => 0,
+ "ExtUtils::Manifest" => "1.66",
+ "File::Copy::Recursive" => 0,
+ "File::Find::Rule" => 0,
+ "File::HomeDir" => 0,
+ "File::Path" => 0,
+ "File::ShareDir" => 0,
+ "File::ShareDir::Install" => "0.06",
+ "File::Spec" => 0,
+ "File::Temp" => 0,
+ "File::pushd" => 0,
+ "JSON" => 2,
+ "List::MoreUtils" => 0,
+ "List::Util" => "1.33",
+ "Log::Dispatchouli" => "1.102220",
+ "Mixin::Linewise::Readers" => "0.100",
+ "Module::CoreList" => 0,
+ "Moose" => "0.92",
+ "Moose::Autobox" => "0.09",
+ "Moose::Role" => 0,
+ "Moose::Util::TypeConstraints" => 0,
+ "MooseX::LazyRequire" => 0,
+ "MooseX::Role::Parameterized" => 0,
+ "MooseX::SetOnce" => 0,
+ "MooseX::Types" => 0,
+ "MooseX::Types::Moose" => 0,
+ "MooseX::Types::Path::Class" => 0,
+ "MooseX::Types::Perl" => 0,
+ "PPI::Document" => 0,
+ "Params::Util" => 0,
+ "Path::Class" => "0.22",
+ "Path::Tiny" => 0,
+ "Perl::PrereqScanner" => "1.016",
+ "Perl::Version" => 0,
+ "Pod::Eventual" => "0.091480",
+ "Scalar::Util" => 0,
+ "Software::License" => "0.101370",
+ "Software::License::None" => 0,
+ "Software::LicenseUtils" => 0,
+ "Storable" => 0,
+ "String::Formatter" => "0.100680",
+ "String::RewritePrefix" => "0.005",
+ "Sub::Exporter" => 0,
+ "Sub::Exporter::ForMethods" => 0,
+ "Sub::Exporter::Util" => 0,
+ "Term::Encoding" => 0,
+ "Term::ReadKey" => 0,
+ "Term::ReadLine" => 0,
+ "Term::UI" => 0,
+ "Test::Deep" => 0,
+ "Test::FailWarnings" => 0,
+ "Test::Fatal" => 0,
+ "Test::File::ShareDir" => 0,
+ "Test::More" => "0.96",
+ "Text::Glob" => "0.08",
+ "Text::Template" => 0,
+ "Try::Tiny" => 0,
+ "YAML::Tiny" => 0,
+ "autobox" => "2.53",
+ "autodie" => 0,
+ "lib" => 0,
+ "namespace::autoclean" => 0,
+ "parent" => 0,
+ "strict" => 0,
+ "utf8" => 0,
+ "version" => 0,
+ "warnings" => 0
+);
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+ delete $WriteMakefileArgs{TEST_REQUIRES};
+ delete $WriteMakefileArgs{BUILD_REQUIRES};
+ $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
}
delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
@@ -1,13 +1,15 @@
This archive contains the distribution Dist-Zilla,
-version 4.300030:
+version 5.025:
distribution builder; installer not included!
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
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 v5.024.
+
@@ -11,17 +11,26 @@ $main::VERSION = $Dist::Zilla::App::VERSION;
# ABSTRACT: do stuff with your dist
Dist::Zilla::App->run;
+#pod =head1 OVERVIEW
+#pod
+#pod For help with Dist::Zilla, start with http://dzil.org/ or by running "dzil
+#pod commands"
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
dzil - do stuff with your dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 OVERVIEW
@@ -34,7 +43,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,24 @@
+name = Foo
+version = 1.23
+author = foobar
+license = Perl_5
+copyright_holder = foobar
+copyright_year = 2009
+
+; authordep perl = 5.005
+
+[GatherDir]
+[ExecDir/BadlyPaddedName]
+:version = 5.0
+
+[AutoPrereqs]
+:version = 5.0
+
+skip = ^DZPA::Skip
+[MetaYAML]
+version = 2
+
+[Encoding / WithDescription]
+:version = 5.0
+encoding = bytes
+filename = t/data.bin
@@ -5,9 +5,15 @@ license = Perl_5
copyright_holder = foobar
copyright_year = 2009
+; authordep perl = 5.005
+
[GatherDir]
[ExecDir]
[AutoPrereqs]
skip = ^DZPA::Skip
[MetaYAML]
version = 2
+
+[Encoding]
+encoding = bytes
+filename = t/data.bin
@@ -0,0 +1 @@
+pretend this is binary, OK?
@@ -0,0 +1,4 @@
+Revision history for {{$dist->name}}
+
+{{$NEXT}}
+ - Olivier Mengué was here!
@@ -0,0 +1,10 @@
+name = DZ-NonAscii
+version = 0.001
+author = Olivier Mengué <dolmen@example.org>
+author = 김도형 <keedi@example.com>
+license = Perl_5
+copyright_holder = ภูมิพลอดุลยเดช
+
+[@Classic]
+[MetaJSON]
+[NextRelease]
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+package DZ1;
+# ABSTRACT: this is a sample package for testing Dist::Zilla;
+
+sub main {
+ return 1;
+}
+
+1;
@@ -0,0 +1 @@
+some random data that should be shared...
@@ -1,12 +1,14 @@
+requires "App::Cmd::Command::version" => "0";
requires "App::Cmd::Setup" => "0.309";
requires "App::Cmd::Tester" => "0.306";
requires "App::Cmd::Tester::CaptureExternal" => "0";
requires "Archive::Tar" => "0";
requires "CPAN::Meta::Converter" => "2.101550";
+requires "CPAN::Meta::Merge" => "0";
requires "CPAN::Meta::Prereqs" => "2.120630";
requires "CPAN::Meta::Requirements" => "2.121";
requires "CPAN::Meta::Validator" => "2.101550";
-requires "CPAN::Uploader" => "0.101550";
+requires "CPAN::Uploader" => "0.103004";
requires "Carp" => "0";
requires "Class::Load" => "0.17";
requires "Config::INI::Reader" => "0";
@@ -18,11 +20,11 @@ requires "Config::MVP::Reader::Finder" => "0";
requires "Config::MVP::Reader::INI" => "2";
requires "Config::MVP::Section" => "2.200002";
requires "Data::Dumper" => "0";
-requires "Data::Section" => "0.004";
+requires "Data::Section" => "0.200002";
requires "DateTime" => "0.44";
requires "Digest::MD5" => "0";
requires "Encode" => "0";
-requires "ExtUtils::Manifest" => "1.54";
+requires "ExtUtils::Manifest" => "1.66";
requires "File::Copy::Recursive" => "0";
requires "File::Find::Rule" => "0";
requires "File::HomeDir" => "0";
@@ -32,14 +34,14 @@ requires "File::ShareDir::Install" => "0.03";
requires "File::Spec" => "0";
requires "File::Temp" => "0";
requires "File::pushd" => "0";
-requires "Hash::Merge::Simple" => "0";
requires "JSON" => "2";
-requires "List::AllUtils" => "0";
requires "List::MoreUtils" => "0";
-requires "List::Util" => "0";
+requires "List::Util" => "1.33";
requires "Log::Dispatchouli" => "1.102220";
+requires "Mixin::Linewise::Readers" => "0.100";
+requires "Module::CoreList" => "0";
requires "Moose" => "0.92";
-requires "Moose::Autobox" => "0.10";
+requires "Moose::Autobox" => "0.09";
requires "Moose::Role" => "0";
requires "Moose::Util::TypeConstraints" => "0";
requires "MooseX::LazyRequire" => "0";
@@ -49,20 +51,23 @@ requires "MooseX::Types" => "0";
requires "MooseX::Types::Moose" => "0";
requires "MooseX::Types::Path::Class" => "0";
requires "MooseX::Types::Perl" => "0";
-requires "PPI" => "0";
+requires "PPI::Document" => "0";
requires "Params::Util" => "0";
-requires "Path::Class" => "0";
-requires "Perl::PrereqScanner" => "1.005";
+requires "Path::Class" => "0.22";
+requires "Path::Tiny" => "0";
+requires "Perl::PrereqScanner" => "1.016";
requires "Perl::Version" => "0";
requires "Pod::Eventual" => "0.091480";
requires "Scalar::Util" => "0";
requires "Software::License" => "0.101370";
requires "Software::LicenseUtils" => "0";
+requires "Storable" => "0";
requires "String::Formatter" => "0.100680";
requires "String::RewritePrefix" => "0.005";
requires "Sub::Exporter" => "0";
requires "Sub::Exporter::ForMethods" => "0";
requires "Sub::Exporter::Util" => "0";
+requires "Term::Encoding" => "0";
requires "Term::ReadKey" => "0";
requires "Term::ReadLine" => "0";
requires "Term::UI" => "0";
@@ -79,22 +84,34 @@ requires "perl" => "v5.8.5";
requires "strict" => "0";
requires "version" => "0";
requires "warnings" => "0";
+recommends "Archive::Tar::Wrapper" => "0.15";
recommends "Term::ReadLine::Gnu" => "0";
+suggests "PPI::XS" => "0";
on 'test' => sub {
- requires "File::Find" => "0";
+ requires "CPAN::Meta::Check" => "0.007";
+ requires "CPAN::Meta::Requirements" => "2.121";
+ requires "ExtUtils::MakeMaker" => "0";
+ requires "ExtUtils::Manifest" => "1.66";
+ requires "File::Spec" => "0";
requires "Software::License::None" => "0";
+ requires "Test::FailWarnings" => "0";
requires "Test::Fatal" => "0";
requires "Test::File::ShareDir" => "0";
requires "Test::More" => "0.96";
+ requires "lib" => "0";
+ requires "utf8" => "0";
+};
+
+on 'test' => sub {
+ recommends "CPAN::Meta" => "2.120900";
};
on 'configure' => sub {
- requires "ExtUtils::MakeMaker" => "6.30";
- requires "File::ShareDir::Install" => "0.03";
+ requires "ExtUtils::MakeMaker" => "0";
+ requires "File::ShareDir::Install" => "0.06";
};
on 'develop' => sub {
requires "Test::Pod" => "1.41";
- requires "version" => "0.9901";
};
@@ -5,11 +5,8 @@ copyright_holder = Ricardo SIGNES
[@Filter]
-bundle = @RJBS
--remove = Test::Compile
github_issues = 1
-
-[Test::Compile]
-skip = Dist::Zilla::Tutorial
+homepage = http://dzil.org/
[ModuleShareDirs]
Dist::Zilla::MintingProfile::Default = profiles
@@ -19,10 +16,6 @@ dir = corpus
dir = misc
[MetaResources]
-homepage = http://dzil.org/
-repository.web = http://github.com/rjbs/dist-zilla
-repository.url = http://github.com/rjbs/dist-zilla.git
-repository.type = git
x_mailing_list = http://www.listbox.com/subscribe/?list_id=139292
[Prereqs / TestRequires]
@@ -30,6 +23,10 @@ Test::More = 0.90
[Prereqs / RuntimeRecommends]
Term::ReadLine::Gnu = 0
+Archive::Tar::Wrapper = 0.15
+
+[Prereqs / RuntimeSuggests]
+PPI::XS = 0
[Prereqs]
perl = v5.8.5 ; how tempted am I to set this to v5.10? very!
@@ -39,8 +36,13 @@ parent = 0 ; used by the AutoPrereq test corpus
File::ShareDir::Install = 0.03 ; for EUMM
Class::Load = 0.17
-Config::MVP::Reader::INI = 2 ; ensure there's a basic config format
-ExtUtils::Manifest = 1.54 ; for ManifestSkip that needs maniskip()
+Config::MVP::Reader::INI = 2 ; ensure there's a basic config format
+Data::Section = 0.200000 ; default encodings to UTF-8
+ExtUtils::Manifest = 1.54 ; for ManifestSkip that needs maniskip()
+Mixin::Linewise::Readers = 0.100 ; default encodings to UTF-8
+Path::Class = 0.22 ; basename
+
+DateTime = 0.44 ; CLDR fixes, used by AutoVersion and NextRelease
[RemovePrereqs]
remove = Config ; why isn't this indexed?? -- rjbs, 2011-02-11
@@ -48,3 +50,9 @@ remove = Dist::Zilla::Tester::_Role ; mistakenly added by autoprereq
remove = Some::Package::That::Does::Not::Exist::Due::To::A::Typo
[CPANFile]
+
+[Breaks]
+Dist::Zilla::Plugin::MakeMaker::Awesome = < 0.22
+
+[Test::CheckBreaks]
+conflicts_module = Moose::Conflicts
@@ -1,14 +1,20 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::add;
-{
- $Dist::Zilla::App::Command::add::VERSION = '4.300030';
-}
# ABSTRACT: add a module to a dist
+$Dist::Zilla::App::Command::add::VERSION = '5.025';
use Dist::Zilla::App -command;
-use Path::Class;
-use File::pushd ();
+#pod =head1 SYNOPSIS
+#pod
+#pod Adds a new module to a Dist::Zilla-based distribution
+#pod
+#pod $ dzil add Some::New::Module
+#pod
+#pod There are two arguments, C<-p> and C<-P>. C<-P> specify the minting profile
+#pod provider and C<-p> - the profile name. These work just like C<dzil new>.
+#pod
+#pod =cut
sub abstract { 'add modules to an existing dist' }
@@ -43,6 +49,9 @@ sub execute {
my $zilla = $self->zilla;
my $dist = $zilla->name;
+ require Path::Class;
+ require File::pushd;
+
require Dist::Zilla::Dist::Minter;
my $minter = Dist::Zilla::Dist::Minter->_new_from_profile(
[ $opt->provider, $opt->profile ],
@@ -53,15 +62,17 @@ sub execute {
},
);
- my $root = dir($zilla->root)->absolute;
+ my $root = Path::Class::dir($zilla->root)->absolute;
my $wd = File::pushd::pushd($minter->root);
+ my $factory = $minter->plugin_named(':DefaultModuleMaker');
+
for my $name ( @$arg ) {
- my $factory = $minter->plugin_named(':DefaultModuleMaker');
$factory->make_module({ name => $name });
- for my $file ( @{ $factory->zilla->files} ) {
- $zilla->_write_out_file($file, $root);
- }
+ }
+
+ for my $file ( @{ $factory->zilla->files} ) {
+ $zilla->_write_out_file($file, $root);
}
}
@@ -71,17 +82,19 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::add - add a module to a dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
-Adds a a new module to a Dist::Zilla-based distribution
+Adds a new module to a Dist::Zilla-based distribution
$ dzil add Some::New::Module
@@ -94,7 +107,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,22 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::authordeps;
-{
- $Dist::Zilla::App::Command::authordeps::VERSION = '4.300030';
-}
-use Dist::Zilla::App -command;
# ABSTRACT: List your distribution's author dependencies
+$Dist::Zilla::App::Command::authordeps::VERSION = '5.025';
+use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod $ dzil authordeps
+#pod
+#pod This will scan the F<dist.ini> file and print a list of plugin modules that
+#pod probably need to be installed for the dist to be buildable. This is a very
+#pod naive scan, but tends to be pretty accurate. Modules can be added to its
+#pod results by using special comments in the form:
+#pod
+#pod ; authordep Some::Package
+#pod
+#pod =cut
sub abstract { "list your distribution's author dependencies" }
@@ -42,13 +52,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::authordeps - List your distribution's author dependencies
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -67,7 +79,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,32 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::build;
-{
- $Dist::Zilla::App::Command::build::VERSION = '4.300030';
-}
# ABSTRACT: build your dist
+$Dist::Zilla::App::Command::build::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod dzil build [ --trial ] [ --tgz | --no-tgz ] [ --in /path/to/build/dir ]
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This command is a very thin layer over the Dist::Zilla C<build> method, which
+#pod does all the things required to build your distribution. By default, it will
+#pod also archive your distribution and leave you with a complete, ready-to-release
+#pod distribution tarball.
+#pod
+#pod =cut
sub abstract { 'build your dist' }
+#pod =head1 EXAMPLE
+#pod
+#pod $ dzil build
+#pod $ dzil build --no-tgz
+#pod $ dzil build --in /path/to/build/dir
+#pod
+#pod =cut
sub opt_spec {
[ 'trial' => 'build a trial release that PAUSE will not index' ],
@@ -17,6 +34,25 @@ sub opt_spec {
[ 'in=s' => 'the directory in which to build the distribution' ]
}
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --trial
+#pod
+#pod This will build a trial distribution. Among other things, it will generally
+#pod mean that the built tarball's basename ends in F<-TRIAL>.
+#pod
+#pod =head2 --tgz | --no-tgz
+#pod
+#pod Builds a .tar.gz in your project directory after building the distribution.
+#pod
+#pod --tgz behaviour is by default, use --no-tgz to disable building an archive.
+#pod
+#pod =head2 --in
+#pod
+#pod Specifies the directory into which the distribution should be built. If
+#pod necessary, the directory will be created. An archive will not be created.
+#pod
+#pod =cut
sub execute {
my ($self, $opt, $args) = @_;
@@ -29,6 +65,8 @@ sub execute {
$zilla->is_trial(1) if $opt->trial;
$zilla->$method;
}
+
+ $self->zilla->log('built in ' . $self->zilla->built_in);
}
1;
@@ -37,13 +75,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::build - build your dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -86,7 +126,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,17 +1,32 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::clean;
-{
- $Dist::Zilla::App::Command::clean::VERSION = '4.300030';
-}
# ABSTRACT: clean up after build, test, or install
+$Dist::Zilla::App::Command::clean::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod dzil clean [ --dry-run|-n ]
+#pod
+#pod This command removes some files that are created during build, test, and
+#pod install. It's a very thin layer over the C<L<clean|Dist::Zilla/clean>> method
+#pod on the Dist::Zilla object. The documentation for that method gives more
+#pod information about the files that will be removed.
+#pod
+#pod =cut
sub opt_spec {
[ 'dry-run|n' => 'don\'t actually remove anything, just show what would be done' ],
}
+#pod =head1 OPTIONS
+#pod
+#pod =head2 -n, --dry-run
+#pod
+#pod Nothing is removed; instead, everything that would be removed will be listed.
+#pod
+#pod =cut
sub abstract { 'clean up after build, test, or install' }
@@ -27,13 +42,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::clean - clean up after build, test, or install
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -56,7 +73,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,19 +1,47 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::install;
-{
- $Dist::Zilla::App::Command::install::VERSION = '4.300030';
-}
# ABSTRACT: install your dist
+$Dist::Zilla::App::Command::install::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod Installs your distribution using a specified command.
+#pod
+#pod dzil install [--install-command="cmd"]
+#pod
+#pod =cut
sub abstract { 'install your dist' }
+#pod =head1 EXAMPLE
+#pod
+#pod $ dzil install
+#pod $ dzil install --install-command="cpan ."
+#pod
+#pod =cut
sub opt_spec {
[ 'install-command=s', 'command to run to install (e.g. "cpan .")' ],
+ [ 'keep-build-dir|keep' => 'keep the build directory even after a success' ],
}
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --install-command
+#pod
+#pod This defines what command to run after building the dist in the dist dir.
+#pod
+#pod Any value that works with L<C<system>|perlfunc/system> is accepted.
+#pod
+#pod If not specified, calls (roughly):
+#pod
+#pod cpanm .
+#pod
+#pod For more information, look at the L<install|Dist::Zilla::Dist::Builder/install> method in
+#pod Dist::Zilla.
+#pod
+#pod =cut
sub execute {
my ($self, $opt, $arg) = @_;
@@ -22,6 +50,9 @@ sub execute {
$opt->install_command
? (install_command => [ $opt->install_command ])
: (),
+ $opt->keep_build_dir
+ ? (keep_build_dir => 1)
+ : (),
});
}
@@ -31,13 +62,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::install - install your dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -60,7 +93,7 @@ Any value that works with L<C<system>|perlfunc/system> is accepted.
If not specified, calls (roughly):
- perl -MCPAN -einstall "."
+ cpanm .
For more information, look at the L<install|Dist::Zilla::Dist::Builder/install> method in
Dist::Zilla.
@@ -71,7 +104,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,47 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::listdeps;
-{
- $Dist::Zilla::App::Command::listdeps::VERSION = '4.300030';
-}
-use Dist::Zilla::App -command;
# ABSTRACT: print your distribution's prerequisites
+$Dist::Zilla::App::Command::listdeps::VERSION = '5.025';
+use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod $ dzil listdeps | cpan
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a command plugin for L<Dist::Zilla>. It provides the C<listdeps>
+#pod command, which prints your distribution's prerequisites. You could pipe that
+#pod list to a CPAN client like L<cpan> to install all of the dependencies in one
+#pod quick go.
+#pod
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --author
+#pod
+#pod Include author dependencies (those listed under C<develop_requires>).
+#pod
+#pod =head2 --missing
+#pod
+#pod List only dependencies which are unsatisfied.
+#pod
+#pod =head2 --versions
+#pod
+#pod Also display the required versions of listed modules.
+#pod
+#pod =head2 --json
+#pod
+#pod Lists all prerequisites in JSON format, as they would appear in META.json
+#pod (broken out into phases and types)
+#pod
+#pod =head1 ACKNOWLEDGEMENTS
+#pod
+#pod This code was originally more or less a direct copy of Marcel Gruenauer (hanekomu)
+#pod Dist::Zilla::App::Command::prereqs, updated to work with the Dist::Zilla v2
+#pod API.
+#pod
+#pod =cut
use Try::Tiny;
@@ -15,21 +50,52 @@ sub abstract { "print your distribution's prerequisites" }
sub opt_spec {
[ 'author', 'include author dependencies' ],
[ 'missing', 'list only the missing dependencies' ],
- [ 'versions', 'include required version numbers in listing' ]
+ [ 'versions', 'include required version numbers in listing' ],
+ [ 'json', 'list dependencies by phase, in JSON format' ],
+ [ 'omit-core=s', 'Omit dependencies that are shipped with the specified version of perl' ],
}
-sub extract_dependencies {
- my ($self, $zilla, $phases, $missing) = @_;
+sub prereqs {
+ my ($self, $zilla) = @_;
$_->before_build for @{ $zilla->plugins_with(-BeforeBuild) };
$_->gather_files for @{ $zilla->plugins_with(-FileGatherer) };
+ $_->set_file_encodings for @{ $zilla->plugins_with(-EncodingProvider) };
$_->prune_files for @{ $zilla->plugins_with(-FilePruner) };
$_->munge_files for @{ $zilla->plugins_with(-FileMunger) };
$_->register_prereqs for @{ $zilla->plugins_with(-PrereqSource) };
+ my $prereqs = $zilla->prereqs;
+}
+
+my @phases = qw/configure build test runtime develop/;
+my @relationships = qw/requires recommends suggests/;
+
+sub filter_core {
+ my ($prereqs, $core_version) = @_;
+ $core_version = sprintf '%7.6f', $core_version if $core_version >= 5.010;
+ $prereqs = $prereqs->clone if $prereqs->is_finalized;
+ require Module::CoreList;
+ for my $phase (@phases) {
+ for my $relation (@relationships) {
+ my $req = $prereqs->requirements_for($phase, $relation);
+ for my $module ($req->required_modules) {
+ next if not exists $Module::CoreList::version{$core_version}{$module};
+ $req->clear_requirement($module) if $req->accepts_module($module, $Module::CoreList::version{$core_version}{$module});
+ }
+ }
+ }
+ return $prereqs;
+}
+
+sub extract_dependencies {
+ my ($self, $zilla, $phases, $missing, $omit_core) = @_;
+
+ my $prereqs = $self->prereqs($zilla);
+ $prereqs = filter_core($prereqs, $omit_core) if $omit_core;
+
require CPAN::Meta::Requirements;
my $req = CPAN::Meta::Requirements->new;
- my $prereqs = $zilla->prereqs;
for my $phase (@$phases) {
$req->add_requirements( $prereqs->requirements_for($phase, 'requires') );
@@ -66,7 +132,18 @@ sub execute {
my @phases = qw(build test configure runtime);
push @phases, 'develop' if $opt->author;
- my %modules = $self->extract_dependencies($self->zilla, \@phases, $opt->missing);
+ my $omit_core = $opt->omit_core;
+ if($opt->json) {
+ my $prereqs = $self->prereqs($self->zilla);
+ $prereqs = filter_core($prereqs, $omit_core) if $omit_core;
+ my $output = $prereqs->as_string_hash;
+
+ require JSON; JSON->VERSION(2);
+ print JSON->new->ascii(1)->canonical(1)->pretty->encode($output), "\n";
+ return 1;
+ }
+
+ my %modules = $self->extract_dependencies($self->zilla, \@phases, $opt->missing, $opt->omit_core);
if($opt->versions) {
for(sort { lc $a cmp lc $b } keys %modules) {
@@ -83,13 +160,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::listdeps - print your distribution's prerequisites
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -99,7 +178,7 @@ version 4.300030
This is a command plugin for L<Dist::Zilla>. It provides the C<listdeps>
command, which prints your distribution's prerequisites. You could pipe that
-list to a CPAN client like L<cpan> to install all of the dependecies in one
+list to a CPAN client like L<cpan> to install all of the dependencies in one
quick go.
=head1 OPTIONS
@@ -116,9 +195,14 @@ List only dependencies which are unsatisfied.
Also display the required versions of listed modules.
+=head2 --json
+
+Lists all prerequisites in JSON format, as they would appear in META.json
+(broken out into phases and types)
+
=head1 ACKNOWLEDGEMENTS
-This code is more or less a direct copy of Marcel Gruenauer (hanekomu)
+This code was originally more or less a direct copy of Marcel Gruenauer (hanekomu)
Dist::Zilla::App::Command::prereqs, updated to work with the Dist::Zilla v2
API.
@@ -128,7 +212,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,43 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::new;
-{
- $Dist::Zilla::App::Command::new::VERSION = '4.300030';
-}
# ABSTRACT: mint a new dist
+$Dist::Zilla::App::Command::new::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod Creates a new Dist-Zilla based distribution under the current directory.
+#pod
+#pod $ dzil new Main::Module::Name
+#pod
+#pod There are two arguments, C<-p> and C<-P>. C<-P> specify the minting profile
+#pod provider and C<-p> - the profile name.
+#pod
+#pod The default profile provider first looks in the
+#pod F<~/.dzil/profiles/$profile_name> and then among standard profiles, shipped
+#pod with Dist::Zilla. For example:
+#pod
+#pod $ dzil new -p work Corporate::Library
+#pod
+#pod This command would instruct C<dzil> to look in F<~/.dzil/profiles/work> for a
+#pod F<profile.ini> (or other "profile" config file). If no profile name is given,
+#pod C<dzil> will look for the C<default> profile. If no F<default> directory
+#pod exists, it will use a very simple configuration shipped with Dist::Zilla.
+#pod
+#pod $ dzil new -P Foo Corporate::Library
+#pod
+#pod This command would instruct C<dzil> to consult the Foo provider about the
+#pod directory of 'default' profile.
+#pod
+#pod Furthermore, it is possible to specify the default minting provider and profile
+#pod in the F<~/.dzil/config.ini> file, for example:
+#pod
+#pod [%Mint]
+#pod provider = FooCorp
+#pod profile = work
+#pod
+#pod =cut
sub abstract { 'mint a new dist' }
@@ -46,12 +77,16 @@ sub execute {
my $dist = $arg->[0];
require Dist::Zilla::Dist::Minter;
+ my $stash = $self->app->_build_global_stashes;
my $minter = Dist::Zilla::Dist::Minter->_new_from_profile(
- [ $opt->provider, $opt->profile ],
+ ( exists $stash->{'%Mint'} ?
+ [ $stash->{'%Mint'}->provider, $stash->{'%Mint'}->profile ] :
+ [ $opt->provider, $opt->profile ]
+ ),
{
chrome => $self->app->chrome,
name => $dist,
- _global_stashes => $self->app->_build_global_stashes,
+ _global_stashes => $stash,
},
);
@@ -66,13 +101,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::new - mint a new dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -99,13 +136,20 @@ exists, it will use a very simple configuration shipped with Dist::Zilla.
This command would instruct C<dzil> to consult the Foo provider about the
directory of 'default' profile.
+Furthermore, it is possible to specify the default minting provider and profile
+in the F<~/.dzil/config.ini> file, for example:
+
+ [%Mint]
+ provider = FooCorp
+ profile = work
+
=head1 AUTHOR
Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,29 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::nop;
-{
- $Dist::Zilla::App::Command::nop::VERSION = '4.300030';
-}
# ABSTRACT: initialize dzil, then exit
+$Dist::Zilla::App::Command::nop::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod This command does nothing. It initializes Dist::Zilla, then exits. This is
+#pod useful to see the logging output of plugin initialization.
+#pod
+#pod dzil nop -v
+#pod
+#pod Seriously, this command is almost entirely for diagnostic purposes. Don't
+#pod overthink it, okay?
+#pod
+#pod =cut
sub abstract { 'do nothing: initialize dzil, then exit' }
+sub description {
+ "This command does nothing but initialize Dist::Zilla and exit.\n" .
+ "It is sometimes useful for diagnostic purposes."
+}
+
sub execute {
my ($self, $opt, $arg) = @_;
@@ -22,13 +36,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::nop - initialize dzil, then exit
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -46,7 +62,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,22 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::release;
-{
- $Dist::Zilla::App::Command::release::VERSION = '4.300030';
-}
# ABSTRACT: release your dist to the CPAN
+$Dist::Zilla::App::Command::release::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod dzil release
+#pod
+#pod dzil release --trial
+#pod
+#pod This command is a very, very thin wrapper around the
+#pod C<L<release|Dist::Zilla/release>> method on the Dist::Zilla object. It will
+#pod build, archive, and release your distribution using your Releaser plugins. The
+#pod only option, C<--trial>, will cause it to build a trial build.
+#pod
+#pod =cut
sub abstract { 'release your dist' }
@@ -30,13 +40,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::release - release your dist to the CPAN
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -55,7 +67,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,17 +1,56 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::run;
-{
- $Dist::Zilla::App::Command::run::VERSION = '4.300030';
-}
# ABSTRACT: run stuff in a dir where your dist is built
+$Dist::Zilla::App::Command::run::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod $ dzil run ./bin/myscript
+#pod $ dzil run prove -bv t/mytest.t
+#pod $ dzil run bash
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This command will build your dist with Dist::Zilla, then build the
+#pod distribution and then run a command in the build directory. It's something
+#pod like doing this:
+#pod
+#pod dzil build
+#pod rsync -avp My-Project-version/ .build/
+#pod cd .build
+#pod perl Makefile.PL # or perl Build.PL
+#pod make # or ./Build
+#pod export PERL5LIB=$PWD/blib/lib:$PWD/blib/arch
+#pod <your command as defined by rest of params>
+#pod
+#pod Except for the fact it's built directly in a subdir of .build (like
+#pod F<.build/69105y2>).
+#pod
+#pod A command returning with an non-zero error code will left the build directory
+#pod behind for analysis, and C<dzil> will exit with a non-zero status. Otherwise,
+#pod the build directory will be removed and dzil will exit with status zero.
+#pod
+#pod If no run command is provided, a new default shell is invoked. This can be
+#pod useful for testing your distribution as if it were installed.
+#pod
+#pod =cut
sub abstract { 'run stuff in a dir where your dist is built' }
+sub opt_spec {
+ [ 'build!' => 'do the Build actions before running the command; done by default',
+ { default => 1 } ],
+}
+
+sub description {
+ "This will build your dist and run the given 'command' in the build dir.\n" .
+ "If no command was specified, your shell will be run there instead."
+}
+
sub usage_desc {
- return '%c run %o [ run command [ arg1 arg2 ... ] ]';
+ return '%c run %o [ command [ arg1 arg2 ... ] ]';
}
sub execute {
@@ -26,7 +65,7 @@ sub execute {
$self->log("no command supplied to run so using \$$envname: $args->[0]");
}
- $self->zilla->run_in_build($args);
+ $self->zilla->run_in_build($args, { build => $opt->build });
}
1;
@@ -35,13 +74,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::run - run stuff in a dir where your dist is built
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -79,7 +120,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,17 +1,33 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::setup;
-{
- $Dist::Zilla::App::Command::setup::VERSION = '4.300030';
-}
# ABSTRACT: set up a basic global config file
+$Dist::Zilla::App::Command::setup::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod $ dzil setup
+#pod Enter your name> Ricardo Signes
+#pod ...
+#pod
+#pod Dist::Zilla looks for per-user configuration in F<~/.dzil/config.ini>. This
+#pod command prompts the user for some basic information that can be used to produce
+#pod the most commonly needed F<config.ini> sections.
+#pod
+#pod B<WARNING>: PAUSE account details are stored within config.ini in plain text.
+#pod
+#pod =cut
use autodie;
sub abstract { 'set up a basic global config file' }
+sub description {
+ "This command will run through a short interactive process to set up\n" .
+ "a basic Dist::Zilla configuration in ~/.dzil/config.ini"
+}
+
sub validate_args {
my ($self, $opt, $args) = @_;
@@ -23,6 +39,7 @@ sub execute {
my $chrome = $self->app->chrome;
+ require Dist::Zilla::Util;
my $config_root = Dist::Zilla::Util->_global_config_root;
if (
@@ -77,7 +94,9 @@ sub execute {
if (
$chrome->prompt_yn(
- 'Do you want to enter your PAUSE account details? ',
+ '
+ * WARNING - Your account details will be stored in plain text *
+Do you want to enter your PAUSE account details? ',
{ default => 0 },
)
) {
@@ -98,11 +117,14 @@ sub execute {
"What is your PAUSE password? ",
{
check => sub { defined $_[0] and length $_[0] },
+ noecho => 1,
},
);
}
$config_root->mkpath unless -d $config_root;
+ $config_root->subdir('profiles')->mkpath
+ unless -d $config_root->subdir('profiles');
my $umask = umask;
umask( $umask | 077 ); # this file might contain PAUSE pw; make it go-r
@@ -138,13 +160,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::setup - set up a basic global config file
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -156,13 +180,15 @@ Dist::Zilla looks for per-user configuration in F<~/.dzil/config.ini>. This
command prompts the user for some basic information that can be used to produce
the most commonly needed F<config.ini> sections.
+B<WARNING>: PAUSE account details are stored within config.ini in plain text.
+
=head1 AUTHOR
Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,34 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::smoke;
-{
- $Dist::Zilla::App::Command::smoke::VERSION = '4.300030';
-}
# ABSTRACT: smoke your dist
+$Dist::Zilla::App::Command::smoke::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod dzil smoke [ --release ] [ --author ] [ --no-automated ]
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This command builds and tests the distribution in "smoke testing mode."
+#pod
+#pod This command is a thin wrapper around the L<test|Dist::Zilla::Dist::Builder/test> method in
+#pod Dist::Zilla. It builds your dist and runs the tests with the AUTOMATED_TESTING
+#pod environment variable turned on, so it's like doing this:
+#pod
+#pod export AUTOMATED_TESTING=1
+#pod dzil build --no-tgz
+#pod cd $BUILD_DIRECTORY
+#pod perl Makefile.PL
+#pod make
+#pod make test
+#pod
+#pod A build that fails tests will be left behind for analysis, and F<dzil> will
+#pod exit a non-zero value. If the tests are successful, the build directory will
+#pod be removed and F<dzil> will exit with status 0.
+#pod
+#pod =cut
sub opt_spec {
[ 'release' => 'enables the RELEASE_TESTING env variable', { default => 0 } ],
@@ -14,6 +36,21 @@ sub opt_spec {
[ 'author' => 'enables the AUTHOR_TESTING env variable', { default => 0 } ]
}
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --release
+#pod
+#pod This will run the test suite with RELEASE_TESTING=1
+#pod
+#pod =head2 --no-automated
+#pod
+#pod This will run the test suite without setting AUTOMATED_TESTING
+#pod
+#pod =head2 --author
+#pod
+#pod This will run the test suite with AUTHOR_TESTING=1
+#pod
+#pod =cut
sub abstract { 'smoke your dist' }
@@ -33,13 +70,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::smoke - smoke your dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -84,7 +123,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,20 +1,61 @@
use strict;
use warnings;
package Dist::Zilla::App::Command::test;
-{
- $Dist::Zilla::App::Command::test::VERSION = '4.300030';
-}
# ABSTRACT: test your dist
+$Dist::Zilla::App::Command::test::VERSION = '5.025';
use Dist::Zilla::App -command;
+#pod =head1 SYNOPSIS
+#pod
+#pod dzil test [ --release ] [ --no-author ] [ --automated ] [ --all ]
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This command is a thin wrapper around the L<test|Dist::Zilla::Dist::Builder/test> method in
+#pod Dist::Zilla. It builds your dist and runs the tests with the AUTHOR_TESTING
+#pod environment variable turned on, so it's like doing this:
+#pod
+#pod export AUTHOR_TESTING=1
+#pod dzil build --no-tgz
+#pod cd $BUILD_DIRECTORY
+#pod perl Makefile.PL
+#pod make
+#pod make test
+#pod
+#pod A build that fails tests will be left behind for analysis, and F<dzil> will
+#pod exit a non-zero value. If the tests are successful, the build directory will
+#pod be removed and F<dzil> will exit with status 0.
+#pod
+#pod =cut
sub opt_spec {
[ 'release' => 'enables the RELEASE_TESTING env variable', { default => 0 } ],
[ 'automated' => 'enables the AUTOMATED_TESTING env variable', { default => 0 } ],
[ 'author!' => 'enables the AUTHOR_TESTING env variable (default behavior)', { default => 1 } ],
- [ 'all' => 'enables the RELEASE_TESTING, AUTOMATED_TESTING and AUTHOR_TESTING env variables', { default => 0 } ]
+ [ 'all' => 'enables the RELEASE_TESTING, AUTOMATED_TESTING and AUTHOR_TESTING env variables', { default => 0 } ],
+ [ 'keep-build-dir|keep' => 'keep the build directory even after a success' ],
+ [ 'jobs|j=i' => 'number of parallel test jobs to run' ],
}
+#pod =head1 OPTIONS
+#pod
+#pod =head2 --release
+#pod
+#pod This will run the test suite with RELEASE_TESTING=1
+#pod
+#pod =head2 --automated
+#pod
+#pod This will run the test suite with AUTOMATED_TESTING=1
+#pod
+#pod =head2 --no-author
+#pod
+#pod This will run the test suite without setting AUTHOR_TESTING
+#pod
+#pod =head2 --all
+#pod
+#pod Equivalent to --release --automated --author
+#pod
+#pod =cut
sub abstract { 'test your dist' }
@@ -25,7 +66,14 @@ sub execute {
local $ENV{AUTHOR_TESTING} = 1 if $opt->author or $opt->all;
local $ENV{AUTOMATED_TESTING} = 1 if $opt->automated or $opt->all;
- $self->zilla->test;
+ $self->zilla->test({
+ $opt->keep_build_dir
+ ? (keep_build_dir => 1)
+ : (),
+ $opt->jobs
+ ? (jobs => $opt->jobs)
+ : (),
+ });
}
1;
@@ -34,13 +82,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command::test - test your dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -87,7 +137,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,62 @@
+use strict;
+use warnings;
+package Dist::Zilla::App::Command::version;
+# ABSTRACT: display dzil's version
+$Dist::Zilla::App::Command::version::VERSION = '5.025';
+use Dist::Zilla::App -command;
+use App::Cmd::Command::version;
+BEGIN {
+ ## parent and base dont work here. ??? -- kentnl 2014-10-31
+ our @ISA;
+ unshift @ISA, 'App::Cmd::Command::version';
+}
+
+#pod =head1 SYNOPSIS
+#pod
+#pod Print dzil version
+#pod
+#pod $ dzil --version or $dzil version
+#pod
+#pod =cut
+
+sub version_for_display {
+ my $version_pkg = $_[0]->version_package;
+ my $version = ( $version_pkg->VERSION ?
+ $version_pkg->VERSION :
+ 'dev' );
+}
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::App::Command::version - display dzil's version
+
+=head1 VERSION
+
+version 5.025
+
+=head1 SYNOPSIS
+
+Print dzil version
+
+ $ dzil --version or $dzil version
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,18 +1,28 @@
use strict;
use warnings;
package Dist::Zilla::App::Command;
-{
- $Dist::Zilla::App::Command::VERSION = '4.300030';
-}
# ABSTRACT: base class for dzil commands
+$Dist::Zilla::App::Command::VERSION = '5.025';
use App::Cmd::Setup -command;
-use Moose::Autobox;
+#pod =method zilla
+#pod
+#pod This returns the Dist::Zilla object in use by the command. If none has yet
+#pod been constructed, one will be by calling C<< Dist::Zilla->from_config >>.
+#pod
+#pod (This method just delegates to the Dist::Zilla::App object!)
+#pod
+#pod =cut
sub zilla {
return $_[0]->app->zilla;
}
+#pod =method log
+#pod
+#pod This method calls the C<log> method of the application's chrome.
+#pod
+#pod =cut
sub log {
$_[0]->app->chrome->logger->log($_[1]);
@@ -24,13 +34,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Command - base class for dzil commands
=head1 VERSION
-version 4.300030
+version 5.025
=head1 METHODS
@@ -51,7 +63,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,9 @@
use strict;
package Dist::Zilla::App::Tester;
-{
- $Dist::Zilla::App::Tester::VERSION = '4.300030';
-}
+# ABSTRACT: testing library for Dist::Zilla::App
+$Dist::Zilla::App::Tester::VERSION = '5.025';
use parent 'App::Cmd::Tester::CaptureExternal';
use App::Cmd::Tester 0.306 (); # result_class, ->app
-# ABSTRACT: testing library for Dist::Zilla::App
use Dist::Zilla::App;
use File::Copy::Recursive qw(dircopy);
@@ -45,10 +43,8 @@ sub test_dzil {
{
package Dist::Zilla::App::Tester::Result;
-{
- $Dist::Zilla::App::Tester::Result::VERSION = '4.300030';
-}
- BEGIN { our @ISA = qw(App::Cmd::Tester::Result); }
+$Dist::Zilla::App::Tester::Result::VERSION = '5.025';
+BEGIN { our @ISA = qw(App::Cmd::Tester::Result); }
sub tempdir {
my ($self) = @_;
@@ -88,13 +84,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App::Tester - testing library for Dist::Zilla::App
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -102,7 +100,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,16 +1,11 @@
use strict;
use warnings;
package Dist::Zilla::App;
-{
- $Dist::Zilla::App::VERSION = '4.300030';
-}
# ABSTRACT: Dist::Zilla's App::Cmd
+$Dist::Zilla::App::VERSION = '5.025';
use App::Cmd::Setup 0.309 -app; # better compilation error detection
use Carp ();
-use Dist::Zilla::MVP::Reader::Finder;
-use Dist::Zilla::Util;
-use Moose::Autobox;
use Try::Tiny;
sub global_opt_spec {
@@ -32,10 +27,12 @@ sub _build_global_stashes {
my $stash_registry = $self->{__global_stashes__} = {};
+ require Dist::Zilla::Util;
my $config_dir = Dist::Zilla::Util->_global_config_root;
my $config_base = $config_dir->file('config');
+ require Dist::Zilla::MVP::Reader::Finder;
require Dist::Zilla::MVP::Assembler::GlobalConfig;
require Dist::Zilla::MVP::Section;
my $assembler = Dist::Zilla::MVP::Assembler::GlobalConfig->new({
@@ -74,6 +71,12 @@ END_DIE
return $stash_registry;
}
+#pod =method zilla
+#pod
+#pod This returns the Dist::Zilla object in use by the command. If none has yet
+#pod been constructed, one will be by calling C<< Dist::Zilla->from_config >>.
+#pod
+#pod =cut
sub chrome {
my ($self) = @_;
@@ -126,7 +129,7 @@ sub zilla {
VERBOSE_PLUGIN: for my $plugin_name (grep { ! m{\A[-_]\z} } @v_plugins) {
my @plugins = grep { $_->plugin_name =~ /\b\Q$plugin_name\E\b/ }
- $zilla->plugins->flatten;
+ @{ $zilla->plugins };
$zilla->log_fatal("can't find plugins matching $plugin_name to set debug")
unless @plugins;
@@ -144,13 +147,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::App - Dist::Zilla's App::Cmd
=head1 VERSION
-version 4.300030
+version 5.025
=head1 METHODS
@@ -165,7 +170,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,14 @@
package Dist::Zilla::Chrome::Term;
-{
- $Dist::Zilla::Chrome::Term::VERSION = '4.300030';
-}
-use Moose;
# ABSTRACT: chrome used for terminal-based interaction
+$Dist::Zilla::Chrome::Term::VERSION = '5.025';
+use Moose;
+#pod =head1 OVERVIEW
+#pod
+#pod This class provides a L<Dist::Zilla::Chrome> implementation for use in a
+#pod terminal environment. It's the default chrome used by L<Dist::Zilla::App>.
+#pod
+#pod =cut
use Dist::Zilla::Types qw(OneZero);
use Log::Dispatchouli 1.102220;
@@ -16,16 +20,25 @@ has logger => (
isa => 'Log::Dispatchouli',
init_arg => undef,
writer => '_set_logger',
- default => sub {
- Log::Dispatchouli->new({
+ lazy_build => 1,
+);
+
+sub _build_logger {
+ my $self = shift;
+ my $enc = $self->term_enc;
+ if ( $enc ) {
+ my $layer = sprintf(":encoding(%s)", $enc);
+ binmode( STDOUT, $layer );
+ binmode( STDERR, $layer );
+ }
+ return Log::Dispatchouli->new({
ident => 'Dist::Zilla',
to_stdout => 1,
log_pid => 0,
to_self => ($ENV{DZIL_TESTING} ? 1 : 0),
quiet_fatal => 'stdout',
- });
- }
-);
+ });
+}
has term_ui => (
is => 'ro',
@@ -38,14 +51,14 @@ has term_ui => (
},
);
-sub decode_utf8 ($;$)
-{
- require Encode;
- no warnings 'redefine';
- *decode_utf8 = \&Encode::decode_utf8;
- goto \&decode_utf8;
-}
-
+has term_enc => (
+ is => 'ro',
+ lazy => 1,
+ default => sub {
+ require Term::Encoding;
+ return Term::Encoding::get_encoding();
+ },
+);
sub prompt_str {
my ($self, $prompt, $arg) = @_;
@@ -53,14 +66,27 @@ sub prompt_str {
my $default = $arg->{default};
my $check = $arg->{check};
+ require Encode;
+ my $term_enc = $self->term_enc;
+
+ my $encode = $term_enc
+ ? sub { Encode::encode($term_enc, shift, Encode::FB_CROAK()) }
+ : sub { shift };
+ my $decode = $term_enc
+ ? sub { Encode::decode($term_enc, shift, Encode::FB_CROAK()) }
+ : sub { shift };
+
if ($arg->{noecho}) {
require Term::ReadKey;
Term::ReadKey::ReadMode('noecho');
}
my $input_bytes = $self->term_ui->get_reply(
- prompt => $prompt,
+ prompt => $encode->($prompt),
allow => $check || sub { defined $_[0] and length $_[0] },
- (defined $default ? (default => $default) : ()),
+ (defined $default
+ ? (default => $encode->($default))
+ : ()
+ ),
);
if ($arg->{noecho}) {
Term::ReadKey::ReadMode('normal');
@@ -69,7 +95,7 @@ sub prompt_str {
print "\n";
}
- my $input = decode_utf8( $input_bytes );
+ my $input = $decode->($input_bytes);
chomp $input;
return $input;
@@ -115,13 +141,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Chrome::Term - chrome used for terminal-based interaction
=head1 VERSION
-version 4.300030
+version 5.025
=head1 OVERVIEW
@@ -134,7 +162,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,7 @@
package Dist::Zilla::Chrome::Test;
-{
- $Dist::Zilla::Chrome::Test::VERSION = '4.300030';
-}
-use Moose;
# ABSTRACT: the chrome used by Dist::Zilla::Tester
+$Dist::Zilla::Chrome::Test::VERSION = '5.025';
+use Moose;
use MooseX::Types::Moose qw(ArrayRef HashRef Str);
use Dist::Zilla::Types qw(OneZero);
@@ -20,6 +18,24 @@ has logger => (
}
);
+#pod =attr response_for
+#pod
+#pod The response_for attribute (which exists only in the Test chrome) is a
+#pod hashref that lets you specify the answer to questions asked by
+#pod C<prompt_str> or C<prompt_yn>. The key is the prompt string. If the
+#pod value is a string, it is returned every time that question is asked.
+#pod If the value is an arrayref, the first element is shifted off and
+#pod returned every time the question is asked. If the arrayref is empty
+#pod (or the prompt is not listed in the hash), the default answer (if any)
+#pod is returned.
+#pod
+#pod Since you can't pass arguments to the Chrome constructor, response_for
+#pod is initialized to an empty hash, and you can add entries after
+#pod construction with the C<set_response_for> method:
+#pod
+#pod $chrome->set_response_for($prompt => $response);
+#pod
+#pod =cut
has response_for => (
isa => HashRef[ ArrayRef | Str ],
@@ -63,13 +79,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Chrome::Test - the chrome used by Dist::Zilla::Tester
=head1 VERSION
-version 4.300030
+version 5.025
=head1 ATTRIBUTES
@@ -96,7 +114,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,21 +1,35 @@
package Dist::Zilla::Dist::Builder;
-{
- $Dist::Zilla::Dist::Builder::VERSION = '4.300030';
-}
# ABSTRACT: dist zilla subclass for building dists
+$Dist::Zilla::Dist::Builder::VERSION = '5.025';
use Moose 0.92; # role composition fixes
extends 'Dist::Zilla';
-use Moose::Autobox 0.09; # ->flatten
use MooseX::Types::Moose qw(HashRef);
use MooseX::Types::Path::Class qw(Dir File);
use File::pushd ();
use Path::Class;
+use Path::Tiny; # because more Path::* is better, eh?
use Try::Tiny;
use namespace::autoclean;
+#pod =method from_config
+#pod
+#pod my $zilla = Dist::Zilla->from_config(\%arg);
+#pod
+#pod This routine returns a new Zilla from the configuration in the current working
+#pod directory.
+#pod
+#pod This method should not be relied upon, yet. Its semantics are B<certain> to
+#pod change.
+#pod
+#pod Valid arguments are:
+#pod
+#pod config_class - the class to use to read the config
+#pod default: Dist::Zilla::MVP::Reader::Finder
+#pod
+#pod =cut
sub from_config {
my ($class, $arg) = @_;
@@ -49,12 +63,11 @@ sub _setup_default_plugins {
my ($file, $self) = @_;
local $_ = $file->name;
return 1 if m{\Alib/} and m{\.(pm|pod)$};
- return 1 if $_ eq $self->zilla->main_module;
return;
},
});
- $self->plugins->push($plugin);
+ push @{ $self->plugins }, $plugin;
}
unless ($self->plugin_named(':IncModules')) {
@@ -71,7 +84,7 @@ sub _setup_default_plugins {
},
});
- $self->plugins->push($plugin);
+ push @{ $self->plugins }, $plugin;
}
unless ($self->plugin_named(':TestFiles')) {
@@ -83,7 +96,7 @@ sub _setup_default_plugins {
code => sub { local $_ = $_->name; m{\At/} },
});
- $self->plugins->push($plugin);
+ push @{ $self->plugins }, $plugin;
}
unless ($self->plugin_named(':ExecFiles')) {
@@ -100,7 +113,7 @@ sub _setup_default_plugins {
},
});
- $self->plugins->push($plugin);
+ push @{ $self->plugins }, $plugin;
}
unless ($self->plugin_named(':ShareFiles')) {
@@ -110,25 +123,24 @@ sub _setup_default_plugins {
zilla => $self,
style => 'list',
code => sub {
+ my $self = shift;
my $map = $self->zilla->_share_dir_map;
my @files;
if ( $map->{dist} ) {
- push @files, $self->zilla->files->grep(sub {
- local $_ = $_->name; m{\A\Q$map->{dist}\E/}
- });
+ push @files, grep {; $_->name =~ m{\A\Q$map->{dist}\E/} }
+ @{ $self->zilla->files };
}
if ( my $mod_map = $map->{module} ) {
for my $mod ( keys %$mod_map ) {
- push @files, $self->zilla->files->grep(sub {
- local $_ = $_->name; m{\A\Q$mod_map->{$mod}\E/}
- });
+ push @files, grep { $_->name =~ m{\A\Q$mod_map->{$mod}\E/} }
+ @{ $self->zilla->files };
}
}
return \@files;
},
});
- $self->plugins->push($plugin);
+ push @{ $self->plugins }, $plugin;
}
unless ($self->plugin_named(':MainModule')) {
@@ -145,7 +157,31 @@ sub _setup_default_plugins {
},
});
- $self->plugins->push($plugin);
+ push @{ $self->plugins }, $plugin;
+ }
+
+ unless ($self->plugin_named(':AllFiles')) {
+ require Dist::Zilla::Plugin::FinderCode;
+ my $plugin = Dist::Zilla::Plugin::FinderCode->new({
+ plugin_name => ':AllFiles',
+ zilla => $self,
+ style => 'grep',
+ code => sub { return 1 },
+ });
+
+ push @{ $self->plugins }, $plugin;
+ }
+
+ unless ($self->plugin_named(':NoFiles')) {
+ require Dist::Zilla::Plugin::FinderCode;
+ my $plugin = Dist::Zilla::Plugin::FinderCode->new({
+ plugin_name => ':NoFiles',
+ zilla => $self,
+ style => 'list',
+ code => sub { return },
+ });
+
+ push @{ $self->plugins }, $plugin;
}
}
@@ -162,7 +198,7 @@ sub _build_share_dir_map {
my $share_dir_map = {};
- for my $plugin ( $self->plugins_with(-ShareDir)->flatten ) {
+ for my $plugin (@{ $self->plugins_with(-ShareDir) }) {
next unless my $sub_map = $plugin->share_dir_map;
if ( $sub_map->{dist} ) {
@@ -191,7 +227,7 @@ sub _load_config {
my $config_class =
$arg->{config_class} ||= 'Dist::Zilla::MVP::Reader::Finder';
- Class::MOP::load_class($config_class);
+ Class::Load::load_class($config_class);
$arg->{chrome}->logger->log_debug(
{ prefix => '[DZ] ' },
@@ -231,13 +267,14 @@ sub _load_config {
my $package = $_->package;
+ my $bundle = $package =~ /^@/ ? ' bundle' : '';
die <<"END_DIE";
-Required plugin $package isn't installed.
+Required plugin$bundle $package isn't installed.
Run 'dzil authordeps' to see a list of all required plugins.
You can pipe the list to your CPAN client to install or update them:
- dzil authordeps | cpanm
+ dzil authordeps --missing | cpanm
END_DIE
@@ -246,6 +283,21 @@ END_DIE
return $seq;
}
+#pod =method build_in
+#pod
+#pod $zilla->build_in($root);
+#pod
+#pod This method builds the distribution in the given directory. If no directory
+#pod name is given, it defaults to DistName-Version. If the distribution has
+#pod already been built, an exception will be thrown.
+#pod
+#pod =method build
+#pod
+#pod This method just calls C<build_in> with no arguments. It gets you the default
+#pod behavior without the weird-looking formulation of C<build_in> with no object
+#pod for the preposition!
+#pod
+#pod =cut
sub build { $_[0]->build_in }
@@ -258,22 +310,26 @@ sub build_in {
$self->log_fatal("attempted to build " . $self->name . " a second time")
if $self->built_in;
- $_->before_build for $self->plugins_with(-BeforeBuild)->flatten;
+ $_->before_build for @{ $self->plugins_with(-BeforeBuild) };
$self->log("beginning to build " . $self->name);
- $_->gather_files for $self->plugins_with(-FileGatherer)->flatten;
- $_->prune_files for $self->plugins_with(-FilePruner)->flatten;
- $_->munge_files for $self->plugins_with(-FileMunger)->flatten;
+ $_->gather_files for @{ $self->plugins_with(-FileGatherer) };
+ $_->set_file_encodings for @{ $self->plugins_with(-EncodingProvider) };
+ $_->prune_files for @{ $self->plugins_with(-FilePruner) };
- $_->register_prereqs for $self->plugins_with(-PrereqSource)->flatten;
+ $self->version; # instantiate this lazy attribute now that files are gathered
+
+ $_->munge_files for @{ $self->plugins_with(-FileMunger) };
+
+ $_->register_prereqs for @{ $self->plugins_with(-PrereqSource) };
$self->prereqs->finalize;
# Barf if someone has already set up a prereqs entry? -- rjbs, 2010-04-13
$self->distmeta->{prereqs} = $self->prereqs->as_string_hash;
- $_->setup_installer for $self->plugins_with(-InstallTool)->flatten;
+ $_->setup_installer for @{ $self->plugins_with(-InstallTool) };
$self->_check_dupe_files;
@@ -281,16 +337,21 @@ sub build_in {
$self->log("writing " . $self->name . " in $build_root");
- for my $file ($self->files->flatten) {
+ for my $file (@{ $self->files }) {
$self->_write_out_file($file, $build_root);
}
$_->after_build({ build_root => $build_root })
- for $self->plugins_with(-AfterBuild)->flatten;
+ for @{ $self->plugins_with(-AfterBuild) };
$self->built_in($build_root);
}
+#pod =attr built_in
+#pod
+#pod This is the L<Path::Class::Dir>, if any, in which the dist has been built.
+#pod
+#pod =cut
has built_in => (
is => 'rw',
@@ -298,6 +359,20 @@ has built_in => (
init_arg => undef,
);
+#pod =method ensure_built_in
+#pod
+#pod $zilla->ensure_built_in($root);
+#pod
+#pod This method behaves like C<L</build_in>>, but if the dist is already built in
+#pod C<$root> (or the default root, if no root is given), no exception is raised.
+#pod
+#pod =method ensure_built
+#pod
+#pod This method just calls C<ensure_built_in> with no arguments. It gets you the
+#pod default behavior without the weird-looking formulation of C<ensure_built_in>
+#pod with no object for the preposition!
+#pod
+#pod =cut
sub ensure_built {
$_[0]->ensure_built_in;
@@ -314,6 +389,15 @@ sub ensure_built_in {
$self->build_in($root);
}
+#pod =method dist_basename
+#pod
+#pod my $basename = $zilla->dist_basename;
+#pod
+#pod This method will return the dist's basename (e.g. C<Dist-Name-1.01>.
+#pod The basename is used as the top-level directory in the tarball. It
+#pod does not include C<-TRIAL>, even if building a trial dist.
+#pod
+#pod =cut
sub dist_basename {
my ($self) = @_;
@@ -324,6 +408,15 @@ sub dist_basename {
);
}
+#pod =method archive_filename
+#pod
+#pod my $tarball = $zilla->archive_filename;
+#pod
+#pod This method will return the filename (e.g. C<Dist-Name-1.01.tar.gz>)
+#pod of the tarball of this dist. It will include C<-TRIAL> if building a
+#pod trial dist. The tarball might not exist.
+#pod
+#pod =cut
sub archive_filename {
my ($self) = @_;
@@ -334,6 +427,14 @@ sub archive_filename {
);
}
+#pod =method build_archive
+#pod
+#pod $zilla->build_archive;
+#pod
+#pod This method will ensure that the dist has been built, and will then build a
+#pod tarball of the build directory in the current directory.
+#pod
+#pod =cut
sub build_archive {
my ($self) = @_;
@@ -343,9 +444,10 @@ sub build_archive {
my $basename = $self->dist_basename;
my $basedir = dir($basename);
- $_->before_archive for $self->plugins_with(-BeforeArchive)->flatten;
+ $_->before_archive for @{ $self->plugins_with(-BeforeArchive) };
- my $method = Class::Load::load_optional_class('Archive::Tar::Wrapper')
+ my $method = Class::Load::load_optional_class('Archive::Tar::Wrapper',
+ { -version => 0.15 })
? '_build_archive_with_wrapper'
: '_build_archive';
@@ -362,13 +464,13 @@ sub build_archive {
sub _build_archive {
my ($self, $built_in, $basename, $basedir) = @_;
- $self->log("building archive with Archive::Tar; install Archive::Tar::Wrapper for improved speed");
+ $self->log("building archive with Archive::Tar; install Archive::Tar::Wrapper 0.15 or newer for improved speed");
require Archive::Tar;
my $archive = Archive::Tar->new;
my %seen_dir;
for my $distfile (
- sort { length($a->name) <=> length($b->name) } $self->files->flatten
+ sort { length($a->name) <=> length($b->name) } @{ $self->files }
) {
my $in = file($distfile->name)->dir;
@@ -381,15 +483,9 @@ sub _build_archive {
}
my $filename = $built_in->file( $distfile->name );
- my $content = do {
- use autodie;
- local $/;
- open my $fh, '<', $filename;
- <$fh>;
- };
$archive->add_data(
$basedir->file( $distfile->name ),
- $content,
+ path($filename)->slurp_raw,
{ mode => (stat $filename)[2] & ~022 },
);
}
@@ -405,7 +501,7 @@ sub _build_archive_with_wrapper {
my $archive = Archive::Tar::Wrapper->new;
for my $distfile (
- sort { length($a->name) <=> length($b->name) } $self->files->flatten
+ sort { length($a->name) <=> length($b->name) } @{ $self->files }
) {
my $in = file($distfile->name)->dir;
@@ -434,27 +530,44 @@ sub _prep_build_root {
return $build_root;
}
+#pod =method release
+#pod
+#pod $zilla->release;
+#pod
+#pod This method releases the distribution, probably by uploading it to the CPAN.
+#pod The actual effects of this method (as with most of the methods) is determined
+#pod by the loaded plugins.
+#pod
+#pod =cut
sub release {
my $self = shift;
Carp::croak("you can't release without any Releaser plugins")
- unless my @releasers = $self->plugins_with(-Releaser)->flatten;
+ unless my @releasers = @{ $self->plugins_with(-Releaser) };
$ENV{DZIL_RELEASING} = 1;
my $tgz = $self->build_archive;
# call all plugins implementing BeforeRelease role
- $_->before_release($tgz) for $self->plugins_with(-BeforeRelease)->flatten;
+ $_->before_release($tgz) for @{ $self->plugins_with(-BeforeRelease) };
# do the actual release
$_->release($tgz) for @releasers;
# call all plugins implementing AfterRelease role
- $_->after_release($tgz) for $self->plugins_with(-AfterRelease)->flatten;
+ $_->after_release($tgz) for @{ $self->plugins_with(-AfterRelease) };
}
+#pod =method clean
+#pod
+#pod This method removes temporary files and directories suspected to have been
+#pod produced by the Dist::Zilla build process. Specifically, it deletes the
+#pod F<.build> directory and any entity that starts with the dist name and a hyphen,
+#pod like matching the glob C<Your-Dist-*>.
+#pod
+#pod =cut
sub clean {
my ($self, $dry_run) = @_;
@@ -470,6 +583,14 @@ sub clean {
};
}
+#pod =method ensure_built_in_tmpdir
+#pod
+#pod $zilla->ensure_built_in_tmpdir;
+#pod
+#pod This method will consistently build the distribution in a temporary
+#pod subdirectory. It will return the path for the temporary build location.
+#pod
+#pod =cut
sub ensure_built_in_tmpdir {
my $self = shift;
@@ -497,7 +618,7 @@ sub ensure_built_in_tmpdir {
rename $latest, $previous
or $self->log("cannot move .build/latest link to .build/previous");
}
- symlink $target, $latest
+ symlink $target->basename, $latest
or $self->log('cannot create link .build/latest');
}
@@ -506,6 +627,24 @@ sub ensure_built_in_tmpdir {
return ($target, $latest, $previous);
}
+#pod =method install
+#pod
+#pod $zilla->install( \%arg );
+#pod
+#pod This method installs the distribution locally. The distribution will be built
+#pod in a temporary subdirectory, then the process will change directory to that
+#pod subdir and an installer will be run.
+#pod
+#pod Valid arguments are:
+#pod
+#pod keep_build_dir - if true, don't rmtree the build dir, even if everything
+#pod seemed to work
+#pod install_command - the command to run in the subdir to install the dist
+#pod default (roughly): $^X -MCPAN -einstall .
+#pod
+#pod this argument should be an arrayref
+#pod
+#pod =cut
sub install {
my ($self, $arg) = @_;
@@ -513,21 +652,26 @@ sub install {
my ($target, $latest) = $self->ensure_built_in_tmpdir;
- eval {
+ my $ok = eval {
## no critic Punctuation
my $wd = File::pushd::pushd($target);
my @cmd = $arg->{install_command}
? @{ $arg->{install_command} }
- : ($^X => '-MCPAN' =>
- $^O eq 'MSWin32' ? q{-e"install '.'"} : '-einstall "."');
+ : (cpanm => ".");
$self->log_debug([ 'installing via %s', \@cmd ]);
system(@cmd) && $self->log_fatal([ "error running %s", \@cmd ]);
+ 1;
};
- if ($@) {
- $self->log($@);
- $self->log("left failed dist in place at $target");
+ unless ($ok) {
+ my $error = $@ || '(exception clobered)';
+ $self->log("install failed, left failed dist in place at $target");
+ die $error;
+ }
+
+ if ($arg->{keep_build_dir}) {
+ $self->log("all's well; left dist in place at $target");
} else {
$self->log("all's well; removing $target");
$target->rmtree;
@@ -537,43 +681,82 @@ sub install {
return;
}
+#pod =method test
+#pod
+#pod $zilla->test(\%arg);
+#pod
+#pod This method builds a new copy of the distribution and tests it using
+#pod C<L</run_tests_in>>.
+#pod
+#pod C<\%arg> may be omitted. Otherwise, valid arguments are:
+#pod
+#pod keep_build_dir - if true, don't rmtree the build dir, even if everything
+#pod seemed to work
+#pod
+#pod =cut
sub test {
- my ($self) = @_;
+ my ($self, $arg) = @_;
Carp::croak("you can't test without any TestRunner plugins")
- unless my @testers = $self->plugins_with(-TestRunner)->flatten;
+ unless my @testers = @{ $self->plugins_with(-TestRunner) };
my ($target, $latest) = $self->ensure_built_in_tmpdir;
- my $error = $self->run_tests_in($target);
+ my $error = $self->run_tests_in($target, $arg);
+
+ if ($arg and $arg->{keep_build_dir}) {
+ $self->log("all's well; left dist in place at $target");
+ return;
+ }
$self->log("all's well; removing $target");
$target->rmtree;
$latest->remove if $latest;
}
+#pod =method run_tests_in
+#pod
+#pod my $error = $zilla->run_tests_in($directory, $arg);
+#pod
+#pod This method runs the tests in $directory (a Path::Class::Dir), which
+#pod must contain an already-built copy of the distribution. It will throw an
+#pod exception if there are test failures.
+#pod
+#pod It does I<not> set any of the C<*_TESTING> environment variables, nor
+#pod does it clean up C<$directory> afterwards.
+#pod
+#pod =cut
sub run_tests_in {
- my ($self, $target) = @_;
+ my ($self, $target, $arg) = @_;
Carp::croak("you can't test without any TestRunner plugins")
- unless my @testers = $self->plugins_with(-TestRunner)->flatten;
+ unless my @testers = @{ $self->plugins_with(-TestRunner) };
for my $tester (@testers) {
my $wd = File::pushd::pushd($target);
- $tester->test( $target );
+ $tester->test( $target, $arg );
}
}
+#pod =method run_in_build
+#pod
+#pod $zilla->run_in_build( \@cmd );
+#pod
+#pod This method makes a temporary directory, builds the distribution there,
+#pod executes the dist's first L<BuildRunner|Dist::Zilla::Role::BuildRunner>, and
+#pod then runs the given command in the build directory. If the command exits
+#pod non-zero, the directory will be left in place.
+#pod
+#pod =cut
sub run_in_build {
- my ($self, $cmd) = @_;
+ my ($self, $cmd, $arg) = @_;
# The sort below is a cheap hack to get ModuleBuild ahead of
# ExtUtils::MakeMaker. -- rjbs, 2010-01-05
$self->log_fatal("you can't build without any BuildRunner plugins")
- unless my @builders =
- $self->plugins_with(-BuildRunner)->sort->reverse->flatten;
+ unless my @builders = reverse sort @{ $self->plugins_with(-BuildRunner) };
require "Config.pm"; # skip autoprereq
@@ -583,6 +766,12 @@ sub run_in_build {
# building the dist for real
my $ok = eval {
my $wd = File::pushd::pushd($target);
+
+ if ($arg and exists $arg->{build} and ! $arg->{build}) {
+ system(@$cmd) and die "error while running: @$cmd";
+ return 1;
+ }
+
$builders[0]->build;
local $ENV{PERL5LIB} = join $Config::Config{path_sep},
@@ -615,13 +804,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Dist::Builder - dist zilla subclass for building dists
=head1 VERSION
-version 4.300030
+version 5.025
=head1 ATTRIBUTES
@@ -728,6 +919,8 @@ subdir and an installer will be run.
Valid arguments are:
+ keep_build_dir - if true, don't rmtree the build dir, even if everything
+ seemed to work
install_command - the command to run in the subdir to install the dist
default (roughly): $^X -MCPAN -einstall .
@@ -735,14 +928,19 @@ Valid arguments are:
=head2 test
- $zilla->test;
+ $zilla->test(\%arg);
This method builds a new copy of the distribution and tests it using
C<L</run_tests_in>>.
+C<\%arg> may be omitted. Otherwise, valid arguments are:
+
+ keep_build_dir - if true, don't rmtree the build dir, even if everything
+ seemed to work
+
=head2 run_tests_in
- my $error = $zilla->run_tests_in($directory);
+ my $error = $zilla->run_tests_in($directory, $arg);
This method runs the tests in $directory (a Path::Class::Dir), which
must contain an already-built copy of the distribution. It will throw an
@@ -766,7 +964,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Dist::Minter;
-{
- $Dist::Zilla::Dist::Minter::VERSION = '4.300030';
-}
# ABSTRACT: distribution builder; installer not included!
+$Dist::Zilla::Dist::Minter::VERSION = '5.025';
use Moose 0.92; # role composition fixes
extends 'Dist::Zilla';
@@ -32,7 +30,7 @@ sub _new_from_profile {
my $config_class =
$arg->{config_class} ||= 'Dist::Zilla::MVP::Reader::Finder';
- Class::MOP::load_class($config_class);
+ Class::Load::load_class($config_class);
$arg->{chrome}->logger->log_debug(
{ prefix => '[DZ] ' },
@@ -58,7 +56,7 @@ sub _new_from_profile {
{ '' => 'Dist::Zilla::MintingProfile::', '=', => '' },
$profile_data->[0],
);
- Class::MOP::load_class($module);
+ Class::Load::load_class($module);
my $profile_dir = $module->profile_dir($profile_data->[1]);
@@ -116,9 +114,10 @@ sub mint_dist {
$minter->make_module({ name => $module->{name} })
}
- $_->gather_files for $self->plugins_with(-FileGatherer)->flatten;
- $_->prune_files for $self->plugins_with(-FilePruner)->flatten;
- $_->munge_files for $self->plugins_with(-FileMunger)->flatten;
+ $_->gather_files for $self->plugins_with(-FileGatherer)->flatten;
+ $_->set_file_encodings for $self->plugins_with(-EncodingProvider)->flatten;
+ $_->prune_files for $self->plugins_with(-FilePruner)->flatten;
+ $_->munge_files for $self->plugins_with(-FileMunger)->flatten;
$self->_check_dupe_files;
@@ -141,13 +140,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Dist::Minter - distribution builder; installer not included!
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -155,7 +156,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,24 @@
package Dist::Zilla::File::FromCode;
-{
- $Dist::Zilla::File::FromCode::VERSION = '4.300030';
-}
# ABSTRACT: a file whose content is (re-)built on demand
+$Dist::Zilla::File::FromCode::VERSION = '5.025';
use Moose;
+use Moose::Util::TypeConstraints;
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This represents a file whose contents will be generated on demand from a
+#pod callback or method name.
+#pod
+#pod It has one attribute, C<code>, which may be a method name (string) or a
+#pod coderef. When the file's C<content> method is called, the code is used to
+#pod generate the content. This content is I<not> cached. It is recomputed every
+#pod time the content is requested.
+#pod
+#pod =cut
+
+with 'Dist::Zilla::Role::File';
has code => (
is => 'rw',
@@ -14,16 +26,81 @@ has code => (
required => 1,
);
+#pod =attr code_return_type
+#pod
+#pod 'text' or 'bytes'
+#pod
+#pod =cut
+
+has code_return_type => (
+ is => 'ro',
+ isa => enum([ qw(text bytes) ]),
+ default => 'text',
+);
+
+#pod =attr encoding
+#pod
+#pod =cut
+
+sub encoding;
+
+has encoding => (
+ is => 'ro',
+ isa => 'Str',
+ lazy => 1,
+ builder => "_build_encoding",
+);
+
+sub _build_encoding {
+ my ($self) = @_;
+ return $self->code_return_type eq 'text' ? 'UTF-8' : 'bytes';
+}
+
+#pod =attr content
+#pod
+#pod =cut
+
sub content {
my ($self) = @_;
- confess "cannot set content of a FromCode file" if @_ > 1;
+ confess("cannot set content of a FromCode file") if @_ > 1;
my $code = $self->code;
- return $self->$code;
+ my $result = $self->$code;
+
+ if ( $self->code_return_type eq 'text' ) {
+ return $result;
+ }
+ else {
+ $self->_decode($result);
+ }
}
-with 'Dist::Zilla::Role::File';
+#pod =attr encoded_content
+#pod
+#pod =cut
+
+sub encoded_content {
+ my ($self) = @_;
+
+ confess( "cannot set encoded_content of a FromCode file" ) if @_ > 1;
+
+ my $code = $self->code;
+ my $result = $self->$code;
+
+ if ( $self->code_return_type eq 'bytes' ) {
+ return $result;
+ }
+ else {
+ $self->_encode($result);
+ }
+}
+
+sub _set_added_by {
+ my ($self, $value) = @_;
+ return $self->_push_added_by(sprintf("%s from coderef added by %s", $self->code_return_type, $value));
+};
+
__PACKAGE__->meta->make_immutable;
1;
@@ -31,13 +108,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::File::FromCode - a file whose content is (re-)built on demand
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -49,13 +128,25 @@ coderef. When the file's C<content> method is called, the code is used to
generate the content. This content is I<not> cached. It is recomputed every
time the content is requested.
+=head1 ATTRIBUTES
+
+=head2 code_return_type
+
+'text' or 'bytes'
+
+=head2 encoding
+
+=head2 content
+
+=head2 encoded_content
+
=head1 AUTHOR
Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,20 +1,41 @@
package Dist::Zilla::File::InMemory;
-{
- $Dist::Zilla::File::InMemory::VERSION = '4.300030';
-}
# ABSTRACT: a file that you build entirely in memory
+$Dist::Zilla::File::InMemory::VERSION = '5.025';
use Moose;
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This represents a file created in memory -- it's not much more than a glorified
+#pod string.
+#pod
+#pod See L<Dist::Zilla::Role::MutableFile> for details.
+#pod
+#pod =cut
+
+with 'Dist::Zilla::Role::MutableFile', 'Dist::Zilla::Role::StubBuild';
+
+after 'BUILD' => sub {
+ my ($self,$opts) = @_;
+ my @sources = qw/encoded_content content/;
+ my @given = grep { exists $opts->{$_} } @sources;
+ unless ( @given == 1 ) {
+ $self->log_fatal(__PACKAGE__ . " requires have one and only one of: @sources");
+ }
+ my $source = $given[0];
+ my $setter = "_$source";
+ $self->_content_source($source);
+ $self->$setter( $opts->{$source} );
+};
+
+# these should never be called since we ensure one of _content or
+# _encoded_content content is set in BUILD and set the source accordingly
+
+sub _build_content { die "shouldn't reach here" }
+sub _build_encoded_content { die "shouldn't reach here" }
+sub _build_content_source { die "shouldn't reach here" }
-has content => (
- is => 'rw',
- isa => 'Str',
- required => 1,
-);
-
-with 'Dist::Zilla::Role::File';
__PACKAGE__->meta->make_immutable;
1;
@@ -22,19 +43,22 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::File::InMemory - a file that you build entirely in memory
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
This represents a file created in memory -- it's not much more than a glorified
-string. It has a read/write C<content> attribute that holds the octets that
-will be written to disk.
+string.
+
+See L<Dist::Zilla::Role::MutableFile> for details.
=head1 AUTHOR
@@ -42,7 +66,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,46 +1,44 @@
package Dist::Zilla::File::OnDisk;
-{
- $Dist::Zilla::File::OnDisk::VERSION = '4.300030';
-}
# ABSTRACT: a file that comes from your filesystem
+$Dist::Zilla::File::OnDisk::VERSION = '5.025';
use Moose;
+use Path::Tiny;
+
use namespace::autoclean;
+with 'Dist::Zilla::Role::MutableFile', 'Dist::Zilla::Role::StubBuild';
-has content => (
- is => 'rw',
- isa => 'Str',
- lazy => 1,
- default => sub { shift->_read_file },
-);
+#pod =head1 DESCRIPTION
+#pod
+#pod This represents a file stored on disk. Its C<content> attribute is read from
+#pod the originally given file name when first read, but is then kept in memory and
+#pod may be altered by plugins.
+#pod
+#pod =cut
has _original_name => (
is => 'ro',
+ writer => '_set_original_name',
isa => 'Str',
init_arg => undef,
);
-sub BUILD {
+after 'BUILD' => sub {
my ($self) = @_;
- $self->{_original_name} = $self->name;
-}
+ $self->_set_original_name( $self->name );
+};
-sub _read_file {
+sub _build_encoded_content {
my ($self) = @_;
-
- my $fname = $self->_original_name;
- open my $fh, '<', $fname or die "can't open $fname for reading: $!";
-
- # This is needed or \r\n is filtered to be just \n on win32.
- # Maybe :raw:utf8, not sure.
- # -- Kentnl - 2010-06-10
- binmode $fh, ':raw';
-
- my $content = do { local $/; <$fh> };
+ return path($self->_original_name)->slurp_raw;
}
-with 'Dist::Zilla::Role::File';
+sub _build_content_source { return "encoded_content" }
+
+# should never be called, as content will always be generated from
+# encoded content
+sub _build_content { die "shouldn't reach here" }
__PACKAGE__->meta->make_immutable;
1;
@@ -49,13 +47,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::File::OnDisk - a file that comes from your filesystem
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -69,7 +69,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,22 @@
package Dist::Zilla::MVP::Assembler::GlobalConfig;
-{
- $Dist::Zilla::MVP::Assembler::GlobalConfig::VERSION = '4.300030';
-}
+# ABSTRACT: Dist::Zilla::MVP::Assembler for global configuration
+$Dist::Zilla::MVP::Assembler::GlobalConfig::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::MVP::Assembler';
-# ABSTRACT: Dist::Zilla::MVP::Assembler for global configuration
use namespace::autoclean;
+#pod =head1 OVERVIEW
+#pod
+#pod This is a subclass of L<Dist::Zilla::MVP::Assembler> used when assembling the
+#pod global configuration. It has a C<stash_registry> attribute, a hashref, into
+#pod which stashes will be registered.
+#pod
+#pod They get registered via the C<register_stash> method, below, generally called
+#pod by the C<register_component> method on L<Dist::Zilla::Role::Stash>-performing
+#pod class.
+#pod
+#pod =cut
has stash_registry => (
is => 'ro',
@@ -15,6 +24,14 @@ has stash_registry => (
default => sub { {} },
);
+#pod =method register_stash
+#pod
+#pod $assembler->register_stash($name => $stash_object);
+#pod
+#pod This adds a stash to the assembler's stash registry -- unless the name is
+#pod already taken, in which case an exception is raised.
+#pod
+#pod =cut
sub register_stash {
my ($self, $name, $object) = @_;
@@ -34,13 +51,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::MVP::Assembler::GlobalConfig - Dist::Zilla::MVP::Assembler for global configuration
=head1 VERSION
-version 4.300030
+version 5.025
=head1 OVERVIEW
@@ -67,7 +86,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,24 @@
package Dist::Zilla::MVP::Assembler::Zilla;
-{
- $Dist::Zilla::MVP::Assembler::Zilla::VERSION = '4.300030';
-}
+# ABSTRACT: Dist::Zilla::MVP::Assembler for the Dist::Zilla object
+$Dist::Zilla::MVP::Assembler::Zilla::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::MVP::Assembler';
-# ABSTRACT: Dist::Zilla::MVP::Assembler for the Dist::Zilla object
use namespace::autoclean;
+#pod =head1 OVERVIEW
+#pod
+#pod This is a subclass of L<Dist::Zilla::MVP::Assembler> used when assembling the
+#pod Dist::Zilla object.
+#pod
+#pod It has a C<zilla_class> attribute, which is used to determine what class of
+#pod Dist::Zilla object to create. (This isn't very useful now, but will be in the
+#pod future when minting and building use different subclasses of Dist::Zilla.)
+#pod
+#pod Upon construction, the assembler will create a L<Dist::Zilla::MVP::RootSection>
+#pod as the initial section.
+#pod
+#pod =cut
use MooseX::Types::Perl qw(PackageName);
use Dist::Zilla::MVP::RootSection;
@@ -25,12 +36,27 @@ has zilla_class => (
required => 1
);
+#pod =method zilla
+#pod
+#pod This method is a shortcut for retrieving the C<zilla> from the root section.
+#pod If called before that section has been finalized, it will result in an
+#pod exception.
+#pod
+#pod =cut
sub zilla {
my ($self) = @_;
$self->sequence->section_named('_')->zilla;
}
+#pod =method register_stash
+#pod
+#pod $assembler->register_stash($name => $stash_object);
+#pod
+#pod This adds a stash to the assembler's zilla's stash registry -- unless the name
+#pod is already taken, in which case an exception is raised.
+#pod
+#pod =cut
sub register_stash {
my ($self, $name, $object) = @_;
@@ -48,13 +74,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::MVP::Assembler::Zilla - Dist::Zilla::MVP::Assembler for the Dist::Zilla object
=head1 VERSION
-version 4.300030
+version 5.025
=head1 OVERVIEW
@@ -89,7 +117,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,16 +1,35 @@
package Dist::Zilla::MVP::Assembler;
-{
- $Dist::Zilla::MVP::Assembler::VERSION = '4.300030';
-}
+# ABSTRACT: Dist::Zilla-specific subclass of Config::MVP::Assembler
+$Dist::Zilla::MVP::Assembler::VERSION = '5.025';
use Moose;
extends 'Config::MVP::Assembler';
with 'Config::MVP::Assembler::WithBundles';
-# ABSTRACT: Dist::Zilla-specific subclass of Config::MVP::Assembler
use namespace::autoclean;
use Dist::Zilla::Util;
+#pod =head1 DESCRIPTION
+#pod
+#pod B<Take this next bit seriously!> If you don't understand how L<Config::MVP>
+#pod works, reading about how the Dist::Zilla-specific Assembler works is not going
+#pod to be useful.
+#pod
+#pod Dist::Zilla::MVP::Assembler extends L<Config::MVP::Assembler> and composes
+#pod L<Config::MVP::Assembler::WithBundles>. For potential plugin bundles (things
+#pod composing L<Dist::Zilla::Role::PluginBundle>)
+#pod
+#pod The Assembler has chrome, so it can log and will (eventually) be able to get
+#pod input from the user.
+#pod
+#pod The Assembler's C<expand_package> method delegates to Dist::Zilla::Util's
+#pod L<expand_config_package_name|Dist::Zilla::Util/expand_config_package_name>
+#pod method.
+#pod
+#pod The Assembler will throw an exception if it is instructed to add a value for
+#pod C<plugin_name> or C<zilla>.
+#pod
+#pod =cut
has chrome => (
is => 'rw',
@@ -57,13 +76,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::MVP::Assembler - Dist::Zilla-specific subclass of Config::MVP::Assembler
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -91,7 +112,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,9 @@
package Dist::Zilla::MVP::Reader::Finder;
-{
- $Dist::Zilla::MVP::Reader::Finder::VERSION = '4.300030';
-}
+# ABSTRACT: the reader for dist.ini files
+$Dist::Zilla::MVP::Reader::Finder::VERSION = '5.025';
use Moose;
use Config::MVP::Reader 2.101540; # if_none
extends 'Config::MVP::Reader::Finder';
-# ABSTRACT: the reader for dist.ini files
use namespace::autoclean;
@@ -22,13 +20,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::MVP::Reader::Finder - the reader for dist.ini files
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -36,7 +36,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,17 @@
package Dist::Zilla::MVP::Reader::Perl;
-{
- $Dist::Zilla::MVP::Reader::Perl::VERSION = '4.300030';
-}
+# ABSTRACT: the reader for dist.pl files
+$Dist::Zilla::MVP::Reader::Perl::VERSION = '5.025';
use Moose;
extends 'Config::MVP::Reader';
with qw(Config::MVP::Reader::Findable::ByExtension);
-# ABSTRACT: the reader for dist.pl files
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Dist::Zilla::Config reads in the F<dist.pl> file for a distribution.
+#pod
+#pod =cut
sub default_extension { 'pl' }
@@ -52,13 +55,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::MVP::Reader::Perl - the reader for dist.pl files
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -70,7 +75,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,26 @@
package Dist::Zilla::MVP::RootSection;
-{
- $Dist::Zilla::MVP::RootSection::VERSION = '4.300030';
-}
+# ABSTRACT: a standard section in Dist::Zilla's configuration sequence
+$Dist::Zilla::MVP::RootSection::VERSION = '5.025';
use Moose;
extends 'Config::MVP::Section';
-# ABSTRACT: a standard section in Dist::Zilla's configuration sequence
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a subclass of L<Config::MVP::Section>, used as the starting section by
+#pod L<Dist::Zilla::MVP::Assembler::Zilla>. It has a number of useful defaults, as
+#pod well as a C<zilla> attribute which will, after section finalization, contain a
+#pod Dist::Zilla object with which subsequent plugin sections may register.
+#pod
+#pod Those useful defaults are:
+#pod
+#pod =for :list
+#pod * name defaults to _
+#pod * aliases defaults to { author => 'authors' }
+#pod * multivalue_args defaults to [ 'authors' ]
+#pod
+#pod =cut
use MooseX::LazyRequire;
use MooseX::SetOnce;
@@ -56,13 +69,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::MVP::RootSection - a standard section in Dist::Zilla's configuration sequence
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -95,7 +110,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,17 +1,13 @@
package Dist::Zilla::MVP::Section;
-{
- $Dist::Zilla::MVP::Section::VERSION = '4.300030';
-}
+# ABSTRACT: a standard section in Dist::Zilla's configuration sequence
+$Dist::Zilla::MVP::Section::VERSION = '5.025';
use Moose;
extends 'Config::MVP::Section';
-# ABSTRACT: a standard section in Dist::Zilla's configuration sequence
use namespace::autoclean;
use Config::MVP::Section 2.200002; # for not-installed error
-use Moose::Autobox;
-
after finalize => sub {
my ($self) = @_;
@@ -45,13 +41,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::MVP::Section - a standard section in Dist::Zilla's configuration sequence
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -59,7 +57,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::MintingProfile::Default;
-{
- $Dist::Zilla::MintingProfile::Default::VERSION = '4.300030';
-}
# ABSTRACT: Default minting profile provider
+$Dist::Zilla::MintingProfile::Default::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::MintingProfile::ShareDir';
@@ -11,6 +9,14 @@ use namespace::autoclean;
use Dist::Zilla::Util;
use Path::Class;
+#pod =head1 DESCRIPTION
+#pod
+#pod Default minting profile provider.
+#pod
+#pod This provider looks first in the F<~/.dzil/profiles/$profile_name> directory,
+#pod if not found it looks among the default profiles shipped with Dist::Zilla.
+#pod
+#pod =cut
around profile_dir => sub {
my ($orig, $self, $profile_name) = @_;
@@ -35,13 +41,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::MintingProfile::Default - Default minting profile provider
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -56,7 +64,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,8 @@
package Dist::Zilla::Plugin::AutoPrereq;
-{
- $Dist::Zilla::Plugin::AutoPrereq::VERSION = '4.300030';
-}
+# ABSTRACT: (DEPRECATED) the old name for Dist::Zilla::Plugin::AutoPrereqs
+$Dist::Zilla::Plugin::AutoPrereq::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::Plugin::AutoPrereqs';
-# ABSTRACT: (DEPRECATED) the old name for Dist::Zilla::Plugin::AutoPrereqs
use namespace::autoclean;
@@ -18,17 +16,25 @@ before register_component => sub {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod L<AutoPrereqs|Dist::Zilla::Plugin::AutoPrereqs>
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::AutoPrereq - (DEPRECATED) the old name for Dist::Zilla::Plugin::AutoPrereqs
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SEE ALSO
@@ -40,7 +46,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,10 @@
package Dist::Zilla::Plugin::AutoPrereqs;
-{
- $Dist::Zilla::Plugin::AutoPrereqs::VERSION = '4.300030';
-}
+# ABSTRACT: automatically extract prereqs from your modules
+$Dist::Zilla::Plugin::AutoPrereqs::VERSION = '5.025';
use Moose;
with(
'Dist::Zilla::Role::PrereqSource',
+ 'Dist::Zilla::Role::PPI',
'Dist::Zilla::Role::FileFinderUser' => {
default_finders => [ ':InstallModules', ':ExecFiles' ],
},
@@ -20,18 +20,75 @@ with(
},
);
+#pod =attr finder
+#pod
+#pod This is the name of a L<FileFinder|Dist::Zilla::Role::FileFinder>
+#pod whose files will be scanned to determine runtime prerequisites. It
+#pod may be specified multiple times. The default value is
+#pod C<:InstallModules> and C<:ExecFiles>.
+#pod
+#pod =attr test_finder
+#pod
+#pod Just like C<finder>, but for test-phase prerequisites. The default
+#pod value is C<:TestFiles>.
+#pod
+#pod =attr configure_finder
+#pod
+#pod Just like C<finder>, but for configure-phase prerequisites. There is
+#pod no default value; AutoPrereqs will not determine configure-phase
+#pod prerequisites unless you set configure_finder.
+#pod
+#pod =cut
use namespace::autoclean;
-# ABSTRACT: automatically extract prereqs from your modules
-
-use List::AllUtils 'uniq';
use Moose::Autobox;
-use Perl::PrereqScanner 1.005; # do not prune common libs
-use PPI;
-use CPAN::Meta::Requirements;
-use version;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [AutoPrereqs]
+#pod skip = ^Foo|Bar$
+#pod skip = ^Other::Dist
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will extract loosely your distribution prerequisites from
+#pod your files using L<Perl::PrereqScanner>.
+#pod
+#pod If some prereqs are not found, you can still add them manually with the
+#pod L<Prereqs|Dist::Zilla::Plugin::Prereqs> plugin.
+#pod
+#pod This plugin will skip the modules shipped within your dist.
+#pod
+#pod =attr extra_scanners
+#pod
+#pod This is an arrayref of scanner names (as expected by Perl::PrereqScanner).
+#pod It will be passed as the C<extra_scanners> parameter to Perl::PrereqScanner.
+#pod
+#pod =attr scanners
+#pod
+#pod This is an arrayref of scanner names (as expected by Perl::PrereqScanner).
+#pod If present, it will be passed as the C<scanners> parameter to
+#pod Perl::PrereqScanner, which means that it will replace the default list
+#pod of scanners.
+#pod
+#pod =attr skips
+#pod
+#pod This is an arrayref of regular expressions, derived from all the 'skip' lines
+#pod in the configuration. Any module names matching any of these regexes will not
+#pod be registered as prerequisites.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod L<Prereqs|Dist::Zilla::Plugin::Prereqs>, L<Perl::PrereqScanner>.
+#pod
+#pod =head1 CREDITS
+#pod
+#pod This plugin was originally contributed by Jerome Quelin.
+#pod
+#pod =cut
sub mvp_multivalue_args { qw(extra_scanners scanners skips) }
sub mvp_aliases { return { extra_scanner => 'extra_scanners',
@@ -57,6 +114,11 @@ has skips => (
sub register_prereqs {
my $self = shift;
+ require Perl::PrereqScanner;
+ Perl::PrereqScanner->VERSION('1.016'); # don't skip "lib"
+ require CPAN::Meta::Requirements;
+ require List::MoreUtils; # uniq
+
my @modules;
my $scanner = Perl::PrereqScanner->new(
@@ -79,6 +141,8 @@ sub register_prereqs {
my $files = $self->$method;
foreach my $file (@$files) {
+ # skip binary files
+ next if $file->is_bytes;
# parse only perl files
next unless $file->name =~ /\.(?:pm|pl|t|psgi)$/i
|| $file->content =~ /^#!(?:.*)perl(?:$|\s)/;
@@ -94,13 +158,15 @@ sub register_prereqs {
} else {
$this_thing[0] =~ s{^lib/}{};
}
- @this_thing = uniq @this_thing;
+ @this_thing = List::MoreUtils::uniq @this_thing;
s{\.pm$}{} for @this_thing;
s{/}{::}g for @this_thing;
push @modules, @this_thing;
# parse a file, and merge with existing prereqs
- my $file_req = $scanner->scan_string($file->content);
+ my $file_req = $scanner->scan_ppi_document(
+ $self->ppi_document_for_file($file)
+ );
$req->add_requirements($file_req);
}
@@ -108,6 +174,8 @@ sub register_prereqs {
# remove prereqs shipped with current dist
$req->clear_requirement($_) for @modules;
+ $req->clear_requirement($_) for qw(Config Errno); # never indexed
+
# remove prereqs from skiplist
for my $skip (($self->skips || [])->flatten) {
my $re = qr/$skip/;
@@ -138,13 +206,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::AutoPrereqs - automatically extract prereqs from your modules
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -216,7 +286,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::AutoVersion;
-{
- $Dist::Zilla::Plugin::AutoVersion::VERSION = '4.300030';
-}
# ABSTRACT: take care of numbering versions so you don't have to
+$Dist::Zilla::Plugin::AutoVersion::VERSION = '5.025';
use Moose;
with(
'Dist::Zilla::Role::VersionProvider',
@@ -11,9 +9,22 @@ with(
use namespace::autoclean;
-use DateTime 0.44 (); # CLDR fixes
-
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin automatically produces a version string, generally based on the
+#pod current time. By default, it will be in the format: 1.yyDDDn
+#pod
+#pod =cut
+
+#pod =attr major
+#pod
+#pod The C<major> attribute is just an integer that is meant to store the major
+#pod version number. If no value is specified in configuration, it will default to
+#pod 1.
+#pod
+#pod This attribute's value can be referred to in the autoversion format template.
+#pod
+#pod =cut
has major => (
is => 'ro',
@@ -22,6 +33,20 @@ has major => (
default => 1,
);
+#pod =attr format
+#pod
+#pod The format is a L<Text::Template> string that will be rendered to form the
+#pod version. It is meant to access to one variable, C<$major>, and one subroutine,
+#pod C<cldr>, which will format the current time (in GMT) using CLDR patterns (for
+#pod which consult the L<DateTime> documentation).
+#pod
+#pod The default value is:
+#pod
+#pod {{ $major }}.{{ cldr('yyDDD') }}
+#pod {{ sprintf('%01u', ($ENV{N} || 0)) }}
+#pod {{$ENV{DEV} ? (sprintf '_%03u', $ENV{DEV}) : ''}}
+#pod
+#pod =cut
has time_zone => (
is => 'ro',
@@ -42,13 +67,25 @@ has format => (
sub provide_version {
my ($self) = @_;
- my $now = DateTime->now(time_zone => $self->time_zone);
+ # TODO declare this as a 'develop' prereq as we want it in
+ # `dzil listdeps --author`
+ require DateTime;
+ DateTime->VERSION('0.44'); # CLDR fixes
+
+ my $now;
my $version = $self->fill_in_string(
$self->format,
{
major => \( $self->major ),
- cldr => sub { $now->format_cldr($_[0]) },
+ cldr => sub {
+ $now ||= do {
+ require DateTime;
+ DateTime->VERSION('0.44'); # CLDR fixes
+ DateTime->now(time_zone => $self->time_zone);
+ };
+ $now->format_cldr($_[0])
+ },
},
);
@@ -60,17 +97,32 @@ sub provide_version {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<PkgVersion|Dist::Zilla::Plugin::PkgVersion>,
+#pod L<PodVersion|Dist::Zilla::Plugin::PodVersion>,
+#pod L<NextRelease|Dist::Zilla::Plugin::NextRelease>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<VersionProvider|Dist::Zilla::Role::VersionProvider>,
+#pod L<TextTemplate|Dist::Zilla::Role::TextTemplate>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::AutoVersion - take care of numbering versions so you don't have to
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -117,7 +169,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,22 @@
package Dist::Zilla::Plugin::BumpVersion;
-{
- $Dist::Zilla::Plugin::BumpVersion::VERSION = '4.300030';
-}
# ABSTRACT: (DEPRECATED) bump the version number by one before building
+$Dist::Zilla::Plugin::BumpVersion::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::BeforeBuild';
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod B<WARNING> This plugin is deprecated and will be removed. It is generally
+#pod useless. It does not do what you think it does.
+#pod
+#pod If loaded, this plugin will ensure that the distribution's version number is
+#pod bumped up by one (in the smallest already-defined version units) before
+#pod building begins. In other words, if F<dist.ini>'s version reads C<0.002> then
+#pod the newly built dist will be C<0.003>.
+#pod
+#pod =cut
sub before_build {
my ($self) = @_;
@@ -44,13 +53,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::BumpVersion - (DEPRECATED) bump the version number by one before building
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -68,7 +79,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,16 +1,23 @@
package Dist::Zilla::Plugin::CPANFile;
-{
- $Dist::Zilla::Plugin::CPANFile::VERSION = '4.300030';
-}
# ABSTRACT: produce a cpanfile prereqs file
+$Dist::Zilla::Plugin::CPANFile::VERSION = '5.025';
use Moose;
-use Moose::Autobox;
with 'Dist::Zilla::Role::FileGatherer';
use namespace::autoclean;
use Dist::Zilla::File::FromCode;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add a F<cpanfile> file to the distribution.
+#pod
+#pod =attr filename
+#pod
+#pod If given, parameter allows you to specify an alternate name for the generated
+#pod file. It defaults, of course, to F<cpanfile>.
+#pod
+#pod =cut
has filename => (
is => 'ro',
@@ -73,13 +80,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::CPANFile - produce a cpanfile prereqs file
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -98,7 +107,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,24 +1,20 @@
package Dist::Zilla::Plugin::ConfirmRelease;
-{
- $Dist::Zilla::Plugin::ConfirmRelease::VERSION = '4.300030';
-}
+# ABSTRACT: prompt for confirmation before releasing
+$Dist::Zilla::Plugin::ConfirmRelease::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::BeforeRelease';
-# ABSTRACT: prompt for confirmation before releasing
use namespace::autoclean;
-use Moose::Autobox;
-
sub before_release {
my ($self, $tgz) = @_;
my $releasers = join q{, },
map {; $_->plugin_name }
- $self->zilla->plugins_with(-Releaser)->flatten;
+ @{ $self->zilla->plugins_with(-Releaser) };
- my $prompt = "*** Preparing to release $tgz with $releasers ***\n"
- . "Do you want to continue the release process?";
+ $self->log("*** Preparing to release $tgz with $releasers ***");
+ my $prompt = "Do you want to continue the release process?";
my $default = exists $ENV{DZIL_CONFIRMRELEASE_DEFAULT}
? $ENV{DZIL_CONFIRMRELEASE_DEFAULT}
@@ -35,17 +31,29 @@ sub before_release {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin prompts the author whether or not to continue before releasing
+#pod the distribution to CPAN. It gives authors a chance to abort before
+#pod they upload.
+#pod
+#pod The default is "no", but you can set the environment variable
+#pod C<DZIL_CONFIRMRELEASE_DEFAULT> to "yes" if you just want to hit enter to
+#pod release.
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::ConfirmRelease - prompt for confirmation before releasing
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -63,7 +71,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,18 +1,55 @@
package Dist::Zilla::Plugin::DistINI;
-{
- $Dist::Zilla::Plugin::DistINI::VERSION = '4.300030';
-}
# ABSTRACT: a plugin to add a dist.ini to newly-minted dists
+$Dist::Zilla::Plugin::DistINI::VERSION = '5.025';
use Moose;
with qw(Dist::Zilla::Role::FileGatherer);
use Dist::Zilla::File::FromCode;
-use Moose::Autobox 0.10; # for ->each_value
use MooseX::Types::Moose qw(ArrayRef Str);
+use Path::Tiny;
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugins produces a F<dist.ini> file in a new dist, specifying the required
+#pod core attributes from the dist being minted.
+#pod
+#pod This plugin is dead simple and pretty stupid, but should get better as dist
+#pod minting facilities improve. For example, it will not specify any plugins.
+#pod
+#pod In the meantime, you may be happier with a F<dist.ini> template.
+#pod
+#pod =attr append_file
+#pod
+#pod This parameter may be a filename in the profile's directory to append to the
+#pod generated F<dist.ini> with things like plugins. In other words, if your make
+#pod this file, called F<plugins.ini>:
+#pod
+#pod [@Basic]
+#pod [NextRelease]
+#pod [@Git]
+#pod
+#pod ...and your F<profile.ini> includes:
+#pod
+#pod [DistINI]
+#pod append_file = plugins.ini
+#pod
+#pod ...then the generated C<dist.ini> in a newly-minted dist will look something
+#pod like this:
+#pod
+#pod name = My-New-Dist
+#pod author = E. Xavier Ample <example@example.com>
+#pod license = Perl_5
+#pod copyright_holder = E. Xavier Ample
+#pod copyright_year = 2010
+#pod
+#pod [@Basic]
+#pod [NextRelease]
+#pod [@Git]
+#pod
+#pod =cut
sub mvp_multivalue_args { qw(append_file) }
@@ -28,16 +65,12 @@ sub gather_files {
my $zilla = $self->zilla;
my $postlude = '';
- $self->append_file->each_value(sub {
+
+ for (@{ $self->append_file }) {
my $fn = $self->zilla->root->file($_);
- $postlude .= do {
- use autodie;
- local $/;
- open my $fh, '<', $fn;
- <$fh>;
- };
- });
+ $postlude .= path($fn)->slurp_utf8;
+ }
my $code = sub {
my @core_attrs = qw(name authors copyright_holder);
@@ -75,13 +108,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::DistINI - a plugin to add a dist.ini to newly-minted dists
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -129,7 +164,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,152 @@
+package Dist::Zilla::Plugin::Encoding;
+# ABSTRACT: set the encoding of arbitrary files
+$Dist::Zilla::Plugin::Encoding::VERSION = '5.025';
+use Moose;
+with 'Dist::Zilla::Role::EncodingProvider';
+
+use namespace::autoclean;
+
+#pod =head1 SYNOPSIS
+#pod
+#pod This plugin allows you to explicitly set the encoding on some files in your
+#pod distribution. You can either specify the exact set of files (with the
+#pod "filenames" parameter) or provide the regular expressions to check (using
+#pod "match").
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [Encoding]
+#pod encoding = Latin-3
+#pod
+#pod filename = t/esperanto.t ; this file is Esperanto
+#pod match = ^t/urkish/ ; these are all Turkish
+#pod
+#pod =cut
+
+sub mvp_multivalue_args { qw(filenames matches) }
+sub mvp_aliases { return { filename => 'filenames', match => 'matches' } }
+
+#pod =attr encoding
+#pod
+#pod This is the encoding to set on the selected files. The special value "bytes"
+#pod can be used to indicate raw files that should not be encoded.
+#pod
+#pod =cut
+
+has encoding => (
+ is => 'ro',
+ isa => 'Str',
+ required => 1,
+);
+
+#pod =attr filenames
+#pod
+#pod This is an arrayref of filenames to have their encoding set.
+#pod
+#pod =cut
+
+has filenames => (
+ is => 'ro',
+ isa => 'ArrayRef',
+ default => sub { [] },
+);
+
+#pod =attr matches
+#pod
+#pod This is an arrayref of regular expressions. Any file whose name matches one of
+#pod these regex will have its encoding set.
+#pod
+#pod =cut
+
+has matches => (
+ is => 'ro',
+ isa => 'ArrayRef',
+ default => sub { [] },
+);
+
+sub set_file_encodings {
+ my ($self) = @_;
+
+ # never match (at least the filename characters)
+ my $matches_regex = qr/\000/;
+
+ $matches_regex = qr/$matches_regex|$_/ for @{$self->matches};
+
+ # \A\Q$_\E should also handle the `eq` check
+ $matches_regex = qr/$matches_regex|\A\Q$_\E/ for @{$self->filenames};
+
+ for my $file (@{$self->zilla->files}) {
+ next unless $file->name =~ $matches_regex;
+
+ $self->log_debug([
+ 'setting encoding of %s to %s',
+ $file->name,
+ $self->encoding,
+ ]);
+
+ $file->encoding($self->encoding);
+ }
+
+ return;
+}
+
+__PACKAGE__->meta->make_immutable;
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Plugin::Encoding - set the encoding of arbitrary files
+
+=head1 VERSION
+
+version 5.025
+
+=head1 SYNOPSIS
+
+This plugin allows you to explicitly set the encoding on some files in your
+distribution. You can either specify the exact set of files (with the
+"filenames" parameter) or provide the regular expressions to check (using
+"match").
+
+In your F<dist.ini>:
+
+ [Encoding]
+ encoding = Latin-3
+
+ filename = t/esperanto.t ; this file is Esperanto
+ match = ^t/urkish/ ; these are all Turkish
+
+=head1 ATTRIBUTES
+
+=head2 encoding
+
+This is the encoding to set on the selected files. The special value "bytes"
+can be used to indicate raw files that should not be encoded.
+
+=head2 filenames
+
+This is an arrayref of filenames to have their encoding set.
+
+=head2 matches
+
+This is an arrayref of regular expressions. Any file whose name matches one of
+these regex will have its encoding set.
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,14 +1,20 @@
package Dist::Zilla::Plugin::ExecDir;
-{
- $Dist::Zilla::Plugin::ExecDir::VERSION = '4.300030';
-}
# ABSTRACT: install a directory's contents as executables
+$Dist::Zilla::Plugin::ExecDir::VERSION = '5.025';
use Moose;
use namespace::autoclean;
-use Moose::Autobox;
-
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [ExecDir]
+#pod dir = scripts
+#pod
+#pod If no C<dir> is provided, the default is F<bin>.
+#pod
+#pod =cut
has dir => (
is => 'ro',
@@ -20,7 +26,9 @@ sub find_files {
my ($self) = @_;
my $dir = $self->dir;
- my $files = $self->zilla->files->grep(sub { index($_->name, "$dir/") == 0 });
+ my $files = [
+ grep { index($_->name, "$dir/") == 0 } @{ $self->zilla->files }
+ ];
}
with 'Dist::Zilla::Role::ExecFiles';
@@ -31,13 +39,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::ExecDir - install a directory's contents as executables
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -54,7 +64,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,24 @@
package Dist::Zilla::Plugin::ExtraTests;
-{
- $Dist::Zilla::Plugin::ExtraTests::VERSION = '4.300030';
-}
# ABSTRACT: rewrite ./xt tests to ./t tests with skips
+$Dist::Zilla::Plugin::ExtraTests::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::FileMunger';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin rewrites tests found in the following directories:
+#pod
+#pod ./xt/author - tests for author testing (env AUTHOR_TESTING is true)
+#pod ./xt/release - tests for pre-release testers (env RELEASE_TESTING is true)
+#pod ./xt/smoke - tests for automated testers (env AUTOMATED_TESTING is true)
+#pod
+#pod The tests are renamed and moved to F<./t>, and they are rewritten to include
+#pod some simple Perl code to skip all included tests if the correct env vars are
+#pod not set.
+#pod
+#pod =cut
sub munge_file {
my ($self, $file) = @_;
@@ -63,13 +74,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::ExtraTests - rewrite ./xt tests to ./t tests with skips
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -89,7 +102,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,6 @@
package Dist::Zilla::Plugin::FakeRelease;
-{
- $Dist::Zilla::Plugin::FakeRelease::VERSION = '4.300030';
-}
# ABSTRACT: fake plugin to test release
-
+$Dist::Zilla::Plugin::FakeRelease::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::Releaser';
@@ -32,17 +29,49 @@ sub release {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SYNOPSIS
+#pod
+#pod [FakeRelease]
+#pod user = CPANAUTHORID ; # optional.
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin is a L<Releaser|Dist::Zilla::Role::Releaser> that does nothing. It
+#pod is directed to plugin authors, who may need a dumb release plugin to test their
+#pod shiny plugin implementing L<BeforeRelease|Dist::Zilla::Role::BeforeRelease>
+#pod and L<AfterRelease|Dist::Zilla::Role::AfterRelease>.
+#pod
+#pod When this plugin does the release, it will just log a message and finish.
+#pod
+#pod If you set the environment variable C<DZIL_FAKERELEASE_FAIL> to a true value,
+#pod the plugin will die instead of doing nothing. This can be useful for
+#pod authors wanting to test reliably that release failed.
+#pod
+#pod You can optionally provide the 'user' parameter, which defaults to 'AUTHORID',
+#pod which will allow things that depend on this metadata
+#pod ( Sometimes provided by L<UploadToCPAN|Dist::Zilla::Plugin::UploadToCPAN> ) to still work.
+#pod ( For example: L<Dist::Zilla::Plugin::Twitter> )
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<ConfirmRelease|Dist::Zilla::Plugin::ConfirmRelease>,
+#pod L<UploadToCPAN|Dist::Zilla::Plugin::UploadToCPAN>.
+#pod
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::FakeRelease - fake plugin to test release
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -79,7 +108,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,19 +1,45 @@
package Dist::Zilla::Plugin::FileFinder::ByName;
-{
- $Dist::Zilla::Plugin::FileFinder::ByName::VERSION = '4.300030';
-}
+# ABSTRACT: FileFinder matching on pathnames
+$Dist::Zilla::Plugin::FileFinder::ByName::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::FileFinder';
-# ABSTRACT: FileFinder matching on pathnames
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [FileFinder::ByName / MyFiles]
+#pod dir = bin ; look in the bin/ directory
+#pod dir = lib ; and the lib/ directory
+#pod file = *.pl ; for .pl files
+#pod match = \.pm$ ; and for .pm files
+#pod skip = ignore ; that don't have "ignore" in the path
+#pod
+#pod =head1 CREDITS
+#pod
+#pod This plugin was originally contributed by Christopher J. Madsen.
+#pod
+#pod =cut
use Moose::Util::TypeConstraints;
use MooseX::Types::Moose qw(ArrayRef RegexpRef Str);
use Text::Glob 0.08 qw(glob_to_regex_string);
+#pod =attr dir
+#pod
+#pod The file must be located in one of the specified directories (relative
+#pod to the root directory of the dist).
+#pod
+#pod =attr file
+#pod
+#pod The filename must match one of the specified patterns (which are
+#pod converted to regexs using L<Text::Glob> and combined with any C<match>
+#pod rules).
+#pod
+#pod =cut
has dirs => (
is => 'ro',
@@ -31,6 +57,15 @@ has files => (
my $type = subtype as ArrayRef[RegexpRef];
coerce $type, from ArrayRef[Str], via { [map { qr/$_/ } @$_] };
+#pod =attr match
+#pod
+#pod The pathname must match one of these regular expressions.
+#pod
+#pod =attr skip
+#pod
+#pod The pathname must I<not> match any of these regular expressions.
+#pod
+#pod =cut
has matches => (
is => 'ro',
@@ -101,17 +136,51 @@ sub find_files {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 DESCRIPTION
+#pod
+#pod FileFinder::ByName is a L<FileFinder|Dist::Zilla::Role::FileFinder> that
+#pod selects files by matching the criteria you specify against the pathname.
+#pod
+#pod There are three types of criteria you can use. C<dir> limits the
+#pod search to a particular directory. C<match> is a regular expression
+#pod that must match the pathname. C<skip> is a regular expression that
+#pod must not match the pathname.
+#pod
+#pod Each key can be specified multiple times. Multiple occurrences of the
+#pod same key are ORed together. Different keys are ANDed together. That
+#pod means that to be selected, a file must be located in one of the
+#pod C<dir>s, must match one of the C<match> regexs, and must not match any
+#pod of the C<skip> regexs.
+#pod
+#pod Note that C<file> and C<match> are considered to be the I<same> key.
+#pod They're just different ways to write a regex that the pathname must match.
+#pod
+#pod Omitting a particular key means that criterion will not apply to the
+#pod search. Omitting all keys will select every file in your dist.
+#pod
+#pod Note: If you need to OR different types of criteria, then use more
+#pod than one instance of FileFinder::ByName. A
+#pod L<FileFinderUser|Dist::Zilla::Role::FileFinderUser> should allow you
+#pod to specify more than one FileFinder to use.
+#pod
+#pod =for Pod::Coverage
+#pod mvp_aliases
+#pod mvp_multivalue_args
+#pod find_files
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::FileFinder::ByName - FileFinder matching on pathnames
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -186,7 +255,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,7 +1,6 @@
package Dist::Zilla::Plugin::FileFinder::Filter;
-{
- $Dist::Zilla::Plugin::FileFinder::Filter::VERSION = '4.300030';
-}
+# ABSTRACT: filter matches from other FileFinders
+$Dist::Zilla::Plugin::FileFinder::Filter::VERSION = '5.025';
use Moose;
with(
'Dist::Zilla::Role::FileFinder',
@@ -9,10 +8,23 @@ with(
default_finders => [],
},
);
-# ABSTRACT: filter matches from other FileFinders
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [FileFinder::Filter / MyFiles]
+#pod finder = :InstallModules ; find files from :InstallModules
+#pod finder = :ExecFiles ; or :ExecFiles
+#pod skip = ignore ; that don't have "ignore" in the path
+#pod
+#pod =head1 CREDITS
+#pod
+#pod This plugin was originally contributed by Christopher J. Madsen.
+#pod
+#pod =cut
use Moose::Util::TypeConstraints;
use MooseX::Types::Moose qw(ArrayRef RegexpRef Str);
@@ -21,6 +33,17 @@ use MooseX::Types::Moose qw(ArrayRef RegexpRef Str);
my $type = subtype as ArrayRef[RegexpRef];
coerce $type, from ArrayRef[Str], via { [map { qr/$_/ } @$_] };
+#pod =attr finder
+#pod
+#pod A FileFinder to supply the initial list of files.
+#pod May occur multiple times.
+#pod
+#pod =attr skip
+#pod
+#pod The pathname must I<not> match any of these regular expressions.
+#pod May occur multiple times.
+#pod
+#pod =cut
has skips => (
is => 'ro',
@@ -54,17 +77,33 @@ sub find_files {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 DESCRIPTION
+#pod
+#pod FileFinder::Filter is a L<FileFinder|Dist::Zilla::Role::FileFinder> that
+#pod selects files by filtering the selections of other FileFinders.
+#pod
+#pod You specify one or more FileFinders to generate the initial list of
+#pod files. Any file whose pathname matches any of the C<skip> regexs is
+#pod removed from that list.
+#pod
+#pod =for Pod::Coverage
+#pod mvp_aliases
+#pod mvp_multivalue_args
+#pod find_files
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::FileFinder::Filter - filter matches from other FileFinders
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -110,7 +149,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,11 @@
package Dist::Zilla::Plugin::FinderCode;
-{
- $Dist::Zilla::Plugin::FinderCode::VERSION = '4.300030';
-}
+# ABSTRACT: a callback-based FileFinder plugin
+$Dist::Zilla::Plugin::FinderCode::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::FileFinder';
-# ABSTRACT: a callback-based FileFinder plugin
use namespace::autoclean;
-use Moose::Autobox;
use Moose::Util::TypeConstraints;
has code => (
@@ -34,7 +31,7 @@ sub find_files {
sub _find_via_grep {
my ($self) = @_;
- my @files = grep { $self->code->($_, $self) } $self->zilla->files->flatten;
+ my @files = grep { $self->code->($_, $self) } @{ $self->zilla->files };
return \@files;
}
@@ -52,13 +49,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::FinderCode - a callback-based FileFinder plugin
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -66,7 +65,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::GatherDir::Template;
-{
- $Dist::Zilla::Plugin::GatherDir::Template::VERSION = '4.300030';
-}
# ABSTRACT: gather all the files in a directory and use them as templates
+$Dist::Zilla::Plugin::GatherDir::Template::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::Plugin::GatherDir';
with 'Dist::Zilla::Role::TextTemplate';
@@ -10,22 +8,34 @@ with 'Dist::Zilla::Role::TextTemplate';
use namespace::autoclean;
use autodie;
-use Moose::Autobox;
use Dist::Zilla::File::FromCode;
-
+use Path::Tiny;
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a subclass of the L<GatherDir|Dist::Zilla::Plugin::GatherDir>
+#pod plugin. It works just like its parent class, except that each
+#pod gathered file is processed through L<Text::Template>.
+#pod
+#pod The variables C<$plugin> and C<$dist> will be provided to the
+#pod template, set to the GatherDir::Template plugin and the Dist::Zilla
+#pod object, respectively.
+#pod
+#pod It is meant to be used when minting dists with C<dzil new>, but could be used
+#pod in building existing dists, too.
+#pod
+#pod =cut
sub _file_from_filename {
my ($self, $filename) = @_;
- my $template = do {
- open my $fh, '<', $filename;
- local $/;
- <$fh>;
- };
+ my $template = path($filename)->slurp_utf8;
+
+ my @stat = stat $filename or $self->log_fatal("$filename does not exist!");
return Dist::Zilla::File::FromCode->new({
name => $filename,
- mode => ((stat $filename)[2] & 0755) | 0200, # kill world-writeability, make sure owner-writable.
+ mode => ($stat[2] & 0755) | 0200, # kill world-writeability, make sure owner-writable.
code => sub {
my ($file_obj) = @_;
$self->fill_in_string(
@@ -46,13 +56,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::GatherDir::Template - gather all the files in a directory and use them as templates
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -73,7 +85,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::GatherDir;
-{
- $Dist::Zilla::Plugin::GatherDir::VERSION = '4.300030';
-}
# ABSTRACT: gather all the files in a directory
+$Dist::Zilla::Plugin::GatherDir::VERSION = '5.025';
use Moose;
use Moose::Autobox;
use MooseX::Types::Path::Class qw(Dir File);
@@ -10,14 +8,47 @@ with 'Dist::Zilla::Role::FileGatherer';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a very, very simple L<FileGatherer|Dist::Zilla::Role::FileGatherer>
+#pod plugin. It looks in the directory named in the L</root> attribute and adds all
+#pod the files it finds there. If the root begins with a tilde, the tilde is
+#pod replaced with the current user's home directory according to L<File::HomeDir>.
+#pod
+#pod Almost every dist will be built with one GatherDir plugin, since it's the
+#pod easiest way to get files from disk into your dist. Most users just need:
+#pod
+#pod [GatherDir]
+#pod
+#pod ...and this will pick up all the files from the current directory into the
+#pod dist. You can use it multiple times, as you can any other plugin, by providing
+#pod a plugin name. For example, if you want to include external specification
+#pod files into a subdir of your dist, you might write:
+#pod
+#pod [GatherDir]
+#pod ; this plugin needs no config and gathers most of your files
+#pod
+#pod [GatherDir / SpecFiles]
+#pod ; this plugin gets all the files in the root dir and adds them under ./spec
+#pod root = ~/projects/my-project/spec
+#pod prefix = spec
+#pod
+#pod =cut
use File::Find::Rule;
-use File::HomeDir;
use File::Spec;
-use Path::Class;
+use Path::Tiny;
+use List::Util 1.33 'all';
use namespace::autoclean;
+#pod =attr root
+#pod
+#pod This is the directory in which to look for files. If not given, it defaults to
+#pod the dist root -- generally, the place where your F<dist.ini> or other
+#pod configuration file is located.
+#pod
+#pod =cut
has root => (
is => 'ro',
@@ -28,6 +59,12 @@ has root => (
default => sub { shift->zilla->root },
);
+#pod =attr prefix
+#pod
+#pod This parameter can be set to place the gathered files under a particular
+#pod directory. See the L<description|DESCRIPTION> above for an example.
+#pod
+#pod =cut
has prefix => (
is => 'ro',
@@ -35,6 +72,14 @@ has prefix => (
default => '',
);
+#pod =attr include_dotfiles
+#pod
+#pod By default, files will not be included if they begin with a dot. This goes
+#pod both for files and for directories relative to the C<root>.
+#pod
+#pod In almost all cases, the default value (false) is correct.
+#pod
+#pod =cut
has include_dotfiles => (
is => 'ro',
@@ -42,6 +87,13 @@ has include_dotfiles => (
default => 0,
);
+#pod =attr follow_symlinks
+#pod
+#pod By default, directories that are symlinks will not be followed. Note on the
+#pod other hand that in all followed directories, files which are symlinks are
+#pod always gathered.
+#pod
+#pod =cut
has follow_symlinks => (
is => 'ro',
@@ -49,8 +101,15 @@ has follow_symlinks => (
default => 0,
);
-sub mvp_multivalue_args { qw(exclude_filename exclude_match) }
+sub mvp_multivalue_args { qw(exclude_filename exclude_match prune_directory) }
+#pod =attr exclude_filename
+#pod
+#pod To exclude certain files from being gathered, use the C<exclude_filename>
+#pod option. The filename is matched exactly, relative to C<root>.
+#pod This may be used multiple times to specify multiple files to exclude.
+#pod
+#pod =cut
has exclude_filename => (
is => 'ro',
@@ -58,6 +117,14 @@ has exclude_filename => (
default => sub { [] },
);
+#pod =attr exclude_match
+#pod
+#pod This is just like C<exclude_filename> but provides a regular expression
+#pod pattern. Filenames matching the pattern (relative to C<root>) are not
+#pod gathered. This may be used
+#pod multiple times to specify multiple patterns to exclude.
+#pod
+#pod =cut
has exclude_match => (
is => 'ro',
@@ -65,38 +132,76 @@ has exclude_match => (
default => sub { [] },
);
+#pod =attr prune_directory
+#pod
+#pod While traversing, any directory matching the regular expression pattern will
+#pod not be traversed further. This may be used multiple times to specify multiple
+#pod directories to skip.
+#pod
+#pod =cut
+
+has prune_directory => (
+ is => 'ro',
+ isa => 'ArrayRef',
+ default => sub { [] },
+);
+
+around dump_config => sub {
+ my $orig = shift;
+ my $self = shift;
+
+ my $config = $self->$orig;
+
+ $config->{+__PACKAGE__} = {
+ map { $_ => $self->$_ }
+ qw(root prefix include_dotfiles follow_symlinks exclude_filename exclude_match prune_directory),
+ };
+
+ return $config;
+};
+
sub gather_files {
my ($self) = @_;
my $exclude_regex = qr/\000/;
- $exclude_regex = qr/$exclude_regex|$_/
+ $exclude_regex = qr/(?:$exclude_regex)|$_/
for ($self->exclude_match->flatten);
- my %is_excluded = map {; $_ => 1 } $self->exclude_filename->flatten;
-
my $root = "" . $self->root;
- $root =~ s{^~([\\/])}{File::HomeDir->my_home . $1}e;
- $root = Path::Class::dir($root);
+ $root =~ s{^~([\\/])}{require File::HomeDir; File::HomeDir::->my_home . $1}e;
+
+ my $prune_regex = qr/\000/;
+ $prune_regex = qr/$prune_regex|$_/
+ for ( $self->prune_directory->flatten,
+ $self->include_dotfiles ? () : ( qr/^\.[^.]/ ) );
+ # build up the rules
my $rule = File::Find::Rule->new();
$rule->extras({follow => $self->follow_symlinks});
- FILE: for my $filename ($rule->file->in($root)) {
- my $file = file($filename)->relative($root);
-
- unless ($self->include_dotfiles) {
- next FILE if $file->basename =~ qr/^\./;
- next FILE if grep { /^\.[^.]/ } $file->dir->dir_list;
- }
-
- next if $file =~ $exclude_regex;
- next if $is_excluded{ $file };
+ $rule->exec(sub { $self->log_debug('considering ' . path($_[-1])->relative($root)); 1 })
+ if $self->zilla->logger->get_debug;
+
+ $rule->or(
+ $rule->new->directory->exec(sub { /$prune_regex/ })->prune->discard,
+ $rule->new,
+ );
+
+ $rule->or($rule->new->file, $rule->new->symlink);
+ $rule->not_exec(sub { /^\.[^.]/ }) unless $self->include_dotfiles; # exec passes basename as $_
+ $rule->exec(sub {
+ my $relative = path($_[-1])->relative($root);
+ $relative !~ $exclude_regex &&
+ all { $relative ne $_ } @{ $self->exclude_filename }
+ });
+ FILE: for my $filename ($rule->in($root)) {
# _file_from_filename is overloaded in GatherDir::Template
my $fileobj = $self->_file_from_filename($filename);
- $file = Path::Class::file($self->prefix, $file) if $self->prefix;
+ my $file = path($filename)->relative($root);
+ $file = path($self->prefix, $file) if $self->prefix;
- $fileobj->name($file->as_foreign('Unix')->stringify);
+ $fileobj->name($file->stringify);
$self->add_file($fileobj);
}
@@ -106,9 +211,11 @@ sub gather_files {
sub _file_from_filename {
my ($self, $filename) = @_;
+ my @stat = stat $filename or $self->log_fatal("$filename does not exist!");
+
return Dist::Zilla::File::OnDisk->new({
name => $filename,
- mode => (stat $filename)[2] & 0755, # kill world-writeability
+ mode => $stat[2] & 0755, # kill world-writeability
});
}
@@ -119,13 +226,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::GatherDir - gather all the files in a directory
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -162,7 +271,7 @@ configuration file is located.
=head2 prefix
-This parameter can be set to gather all the files found under a common
+This parameter can be set to place the gathered files under a particular
directory. See the L<description|DESCRIPTION> above for an example.
=head2 include_dotfiles
@@ -181,21 +290,29 @@ always gathered.
=head2 exclude_filename
To exclude certain files from being gathered, use the C<exclude_filename>
-option. This may be used multiple times to specify multiple files to exclude.
+option. The filename is matched exactly, relative to C<root>.
+This may be used multiple times to specify multiple files to exclude.
=head2 exclude_match
This is just like C<exclude_filename> but provides a regular expression
-pattern. Files matching the pattern are not gathered. This may be used
+pattern. Filenames matching the pattern (relative to C<root>) are not
+gathered. This may be used
multiple times to specify multiple patterns to exclude.
+=head2 prune_directory
+
+While traversing, any directory matching the regular expression pattern will
+not be traversed further. This may be used multiple times to specify multiple
+directories to skip.
+
=head1 AUTHOR
Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::GenerateFile;
-{
- $Dist::Zilla::Plugin::GenerateFile::VERSION = '4.300030';
-}
# ABSTRACT: build a custom file from only the plugin configuration
+$Dist::Zilla::Plugin::GenerateFile::VERSION = '5.025';
use Moose;
use Moose::Autobox;
with (
@@ -14,11 +12,51 @@ use namespace::autoclean;
use Dist::Zilla::File::InMemory;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [GenerateFile]
+#pod filename = todo/{{ $dist->name }}-master-plan.txt
+#pod name_is_template = 1
+#pod content_is_template = 1
+#pod content = # Outlines the plan for world domination by {{$dist->name}}
+#pod content =
+#pod content = Item 1: Think of an idea!
+#pod content = Item 2: ?
+#pod content = Item 3: Profit!
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a file to the distribution.
+#pod
+#pod You can specify the content, as a sequence of lines, in your configuration.
+#pod The specified filename and content might be literals or might be Text::Template
+#pod templates.
+#pod
+#pod =head2 Templating of the content
+#pod
+#pod If you provide C<content_is_template> (or C<is_template>) parameter of "1", the
+#pod content will be run through Text::Template. The variables C<$plugin> and
+#pod C<$dist> will be provided, set to the GenerateFile plugin and the Dist::Zilla
+#pod object respectively.
+#pod
+#pod If you provide a C<name_is_template> parameter of "1", the filename will be run
+#pod through Text::Template. The variables C<$plugin> and C<$dist> will be
+#pod provided, set to the GenerateFile plugin and the Dist::Zilla object
+#pod respectively.
+#pod
+#pod =cut
sub mvp_aliases { +{ is_template => 'content_is_template' } }
sub mvp_multivalue_args { qw(content) }
+#pod =attr filename
+#pod
+#pod This attribute names the file you want to generate. It is required.
+#pod
+#pod =cut
has filename => (
is => 'ro',
@@ -26,12 +64,24 @@ has filename => (
required => 1,
);
+#pod =attr content
+#pod
+#pod The C<content> attribute is an arrayref of lines that will be joined together
+#pod with newlines to form the file content.
+#pod
+#pod =cut
has content => (
is => 'ro',
isa => 'ArrayRef',
);
+#pod =attr content_is_template, is_template
+#pod
+#pod This attribute is a bool indicating whether or not the content should be
+#pod treated as a Text::Template template. By default, it is false.
+#pod
+#pod =cut
has content_is_template => (
is => 'ro',
@@ -39,6 +89,14 @@ has content_is_template => (
default => 0,
);
+#pod =cut
+#pod
+#pod =attr name_is_template
+#pod
+#pod This attribute is a bool indicating whether or not the filename should be
+#pod treated as a Text::Template template. By default, it is false.
+#pod
+#pod =cut
has name_is_template => (
is => 'ro',
@@ -102,20 +160,22 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::GenerateFile - build a custom file from only the plugin configuration
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
In your F<dist.ini>:
[GenerateFile]
- filename = todo/{{ $dist->name =~ s/::/-/r }}_master-plan.txt
+ filename = todo/{{ $dist->name }}-master-plan.txt
name_is_template = 1
content_is_template = 1
content = # Outlines the plan for world domination by {{$dist->name}}
@@ -171,7 +231,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,19 +1,24 @@
package Dist::Zilla::Plugin::InlineFiles;
-{
- $Dist::Zilla::Plugin::InlineFiles::VERSION = '4.300030';
-}
# ABSTRACT: files in a data section
+$Dist::Zilla::Plugin::InlineFiles::VERSION = '5.025';
use Moose;
use Moose::Autobox;
with 'Dist::Zilla::Role::FileGatherer';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin exists only to be extended, and gathers all files contained in its
+#pod data section and those of its ancestors. For more information, see
+#pod L<Data::Section|Data::Section>.
+#pod
+#pod =cut
use Sub::Exporter::ForMethods;
-use Data::Section 0.004 # fixed header_re
+use Data::Section 0.200002 # encoding and bytes
{ installer => Sub::Exporter::ForMethods::method_installer },
- '-setup';
+ '-setup' => { encoding => 'bytes' };
use Dist::Zilla::File::InMemory;
sub gather_files {
@@ -37,17 +42,28 @@ sub gather_files {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins inheriting from L<InlineFiles>:
+#pod L<MetaTests|Dist::Zilla::Plugin::MetaTests>,
+#pod L<PodCoverageTests|Dist::Zilla::Plugin::PodCoverageTests>,
+#pod L<PodSyntaxTests|Dist::Zilla::Plugin::PodSyntaxTests>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::InlineFiles - files in a data section
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -68,7 +84,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,18 @@
package Dist::Zilla::Plugin::License;
-{
- $Dist::Zilla::Plugin::License::VERSION = '4.300030';
-}
# ABSTRACT: output a LICENSE file
+$Dist::Zilla::Plugin::License::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::FileGatherer';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a F<LICENSE> file containing the full text of the
+#pod distribution's license, as produced by the C<fulltext> method of the
+#pod dist's L<Software::License> object.
+#pod
+#pod =cut
use Dist::Zilla::File::InMemory;
@@ -26,17 +31,43 @@ sub gather_files {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod the C<license> attribute of the L<Dist::Zilla> object to select the license
+#pod to use.
+#pod
+#pod =item *
+#pod
+#pod Dist::Zilla roles:
+#pod L<FileGatherer|Dist::Zilla::Role::FileGatherer>.
+#pod
+#pod =item *
+#pod
+#pod Other modules:
+#pod L<Software::License>,
+#pod L<Software::License::Artistic_2_0>.
+#pod
+#pod =back
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::License - output a LICENSE file
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -72,7 +103,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,6 @@
package Dist::Zilla::Plugin::MakeMaker::Runner;
-{
- $Dist::Zilla::Plugin::MakeMaker::Runner::VERSION = '4.300030';
-}
# ABSTRACT: Test and build dists with a Makefile.PL
-
+$Dist::Zilla::Plugin::MakeMaker::Runner::VERSION = '5.025';
use Moose;
with(
'Dist::Zilla::Role::BuildRunner',
@@ -24,17 +21,36 @@ sub build {
my $self = shift;
my $make = $self->make_path;
- system($^X => 'Makefile.PL') and die "error with Makefile.PL\n";
- system($make) and die "error running $make\n";
+
+ my $makefile = $^O eq 'VMS' ? 'Descrip.MMS' : 'Makefile';
+
+ return
+ if -e $makefile and (stat 'Makefile.PL')[9] <= (stat $makefile)[9];
+
+ $self->log_debug("running $^X Makefile.PL");
+ system($^X => qw(Makefile.PL INSTALLMAN1DIR=none INSTALLMAN3DIR=none)) and die "error with Makefile.PL\n";
+
+ $self->log_debug("running $make");
+ system($make) and die "error running $make\n";
return;
}
sub test {
- my ( $self, $target ) = @_;
+ my ($self, $target, $arg) = @_;
my $make = $self->make_path;
$self->build;
+
+ my $job_count = $arg && exists $arg->{jobs}
+ ? $arg->{jobs}
+ : $self->default_jobs;
+
+ my $jobs = "j$job_count";
+ my $ho = "HARNESS_OPTIONS";
+ local $ENV{$ho} = $ENV{$ho} ? "$ENV{$ho}:$jobs" : $jobs;
+
+ $self->log_debug(join(' ', "running $make test", ( $self->zilla->logger->get_debug ? 'TEST_VERBOSE=1' : () )));
system($make, 'test',
( $self->zilla->logger->get_debug ? 'TEST_VERBOSE=1' : () ),
) and die "error running $make test\n";
@@ -49,13 +65,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::MakeMaker::Runner - Test and build dists with a Makefile.PL
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -63,7 +81,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,28 +1,49 @@
package Dist::Zilla::Plugin::MakeMaker;
-{
- $Dist::Zilla::Plugin::MakeMaker::VERSION = '4.300030';
-}
-
# ABSTRACT: build a Makefile.PL that uses ExtUtils::MakeMaker
+$Dist::Zilla::Plugin::MakeMaker::VERSION = '5.025';
use Moose;
use Moose::Autobox;
use namespace::autoclean;
use Config;
-use List::MoreUtils qw(any uniq);
+use CPAN::Meta::Requirements 2.121; # requirements_for_module
+use List::Util 'first';
use Dist::Zilla::File::InMemory;
use Dist::Zilla::Plugin::MakeMaker::Runner;
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will produce an L<ExtUtils::MakeMaker>-powered F<Makefile.PL> for
+#pod the distribution. If loaded, the L<Manifest|Dist::Zilla::Plugin::Manifest>
+#pod plugin should also be loaded.
+#pod
+#pod =cut
+
+#pod =attr eumm_version
+#pod
+#pod This option declares the version of ExtUtils::MakeMaker required to configure
+#pod and build the distribution. There is no default, although one may be added if
+#pod it can be determined that the generated F<Makefile.PL> requires some specific
+#pod minimum. I<No testing has been done on this front.>
+#pod
+#pod =cut
has eumm_version => (
isa => 'Str',
is => 'rw',
- default => '6.30',
);
+#pod =attr make_path
+#pod
+#pod This option sets the path to F<make>, used to build your dist and run tests.
+#pod It defaults to the value for C<make> in L<Config>, or to C<make> if that isn't
+#pod set.
+#pod
+#pod You probably won't need to set this option.
+#pod
+#pod =cut
has 'make_path' => (
isa => 'Str',
@@ -37,48 +58,46 @@ has '_runner' => (
default => sub {
my ($self) = @_;
Dist::Zilla::Plugin::MakeMaker::Runner->new({
- zilla => $self->zilla,
- plugin_name => $self->plugin_name . '::Runner',
- make_path => $self->make_path,
+ zilla => $self->zilla,
+ plugin_name => $self->plugin_name . '::Runner',
+ make_path => $self->make_path,
+ default_jobs => $self->default_jobs,
});
},
);
# This is here, rather than at the top, so that the "build" and "test" methods
# will exist, as they are required by BuildRunner and TestRunner respectively.
-# I had originally fixed this with stub methods, but stub methods to not behave
+# I had originally fixed this with stub methods, but stub methods do not behave
# properly with this use case until Moose 2.0300. -- rjbs, 2012-02-08
with qw(
Dist::Zilla::Role::BuildRunner
Dist::Zilla::Role::InstallTool
Dist::Zilla::Role::PrereqSource
+ Dist::Zilla::Role::FileGatherer
Dist::Zilla::Role::TestRunner
Dist::Zilla::Role::TextTemplate
);
my $template = q!
+# This file was automatically generated by {{ $generated_by }}.
use strict;
use warnings;
{{ $perl_prereq ? qq[use $perl_prereq;] : ''; }}
-use ExtUtils::MakeMaker {{ $eumm_version }};
+use ExtUtils::MakeMaker{{ defined $eumm_version && 0+$eumm_version ? ' ' . $eumm_version : '' }};
{{ $share_dir_code{preamble} || '' }}
my {{ $WriteMakefileArgs }}
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
- my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
- my $pp = $WriteMakefileArgs{PREREQ_PM};
- for my $mod ( keys %$br ) {
- if ( exists $pp->{$mod} ) {
- $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
- }
- else {
- $pp->{$mod} = $br->{$mod};
- }
- }
+my {{ $fallback_prereqs }}
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+ delete $WriteMakefileArgs{TEST_REQUIRES};
+ delete $WriteMakefileArgs{BUILD_REQUIRES};
+ $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
}
delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
@@ -95,17 +114,31 @@ sub register_prereqs {
$self->zilla->register_prereqs(
{ phase => 'configure' },
- 'ExtUtils::MakeMaker' => $self->eumm_version,
+ 'ExtUtils::MakeMaker' => $self->eumm_version || 0,
);
return unless keys %{ $self->zilla->_share_dir_map };
$self->zilla->register_prereqs(
{ phase => 'configure' },
- 'File::ShareDir::Install' => 0.03,
+ 'File::ShareDir::Install' => 0.06,
);
}
+sub gather_files {
+ my ($self) = @_;
+
+ require Dist::Zilla::File::InMemory;
+
+ my $file = Dist::Zilla::File::InMemory->new({
+ name => 'Makefile.PL',
+ content => $template, # template evaluated later
+ });
+
+ $self->add_file($file);
+ return;
+}
+
sub share_dir_code {
my ($self) = @_;
@@ -113,7 +146,11 @@ sub share_dir_code {
my $share_dir_map = $self->zilla->_share_dir_map;
if ( keys %$share_dir_map ) {
- my $preamble = qq{use File::ShareDir::Install;\n};
+ my $preamble = <<'PREAMBLE';
+use File::ShareDir::Install;
+$File::ShareDir::Install::INCLUDE_DOTFILES = 1;
+$File::ShareDir::Install::INCLUDE_DOTDIRS = 1;
+PREAMBLE
if ( my $dist_share_dir = $share_dir_map->{dist} ) {
$dist_share_dir = quotemeta $dist_share_dir;
@@ -157,24 +194,24 @@ sub write_makefile_args {
my $prereqs = $self->zilla->prereqs;
my $perl_prereq = $prereqs->requirements_for(qw(runtime requires))
->clone
+ ->add_requirements($prereqs->requirements_for(qw(configure requires)))
->add_requirements($prereqs->requirements_for(qw(build requires)))
+ ->add_requirements($prereqs->requirements_for(qw(test requires)))
->as_string_hash->{perl};
$perl_prereq = version->parse($perl_prereq)->numify if $perl_prereq;
my $prereqs_dump = sub {
- $prereqs->requirements_for(@_)
- ->clone
- ->clear_requirement('perl')
- ->as_string_hash;
+ $self->_normalize_eumm_versions(
+ $prereqs->requirements_for(@_)
+ ->clone
+ ->clear_requirement('perl')
+ ->as_string_hash
+ );
};
- my $build_prereq
- = $prereqs->requirements_for(qw(build requires))
- ->clone
- ->add_requirements($prereqs->requirements_for(qw(test requires)))
- ->clear_requirement('perl')
- ->as_string_hash;
+ my $build_prereq = $prereqs_dump->(qw(build requires));
+ my $test_prereq = $prereqs_dump->(qw(test requires));
my %write_makefile_args = (
DISTNAME => $self->zilla->name,
@@ -186,7 +223,8 @@ sub write_makefile_args {
EXE_FILES => [ @exe_files ],
CONFIGURE_REQUIRES => $prereqs_dump->(qw(configure requires)),
- BUILD_REQUIRES => $build_prereq,
+ keys %$build_prereq ? ( BUILD_REQUIRES => $build_prereq ) : (),
+ keys %$test_prereq ? ( TEST_REQUIRES => $test_prereq ) : (),
PREREQ_PM => $prereqs_dump->(qw(runtime requires)),
test => { TESTS => join q{ }, sort keys %test_dirs },
@@ -197,40 +235,75 @@ sub write_makefile_args {
return \%write_makefile_args;
}
+sub _normalize_eumm_versions {
+ my ($self, $prereqs) = @_;
+ for my $v (values %$prereqs) {
+ if (version::is_strict($v)) {
+ my $version = version->parse($v);
+ if ($version->is_qv) {
+ if ((() = $v =~ /\./g) > 1) {
+ $v =~ s/^v//;
+ }
+ else {
+ $v = $version->numify;
+ }
+ }
+ }
+ }
+ return $prereqs;
+}
+
+sub _dump_as {
+ my ($self, $ref, $name) = @_;
+ require Data::Dumper;
+ my $dumper = Data::Dumper->new( [ $ref ], [ $name ] );
+ $dumper->Sortkeys( 1 );
+ $dumper->Indent( 1 );
+ $dumper->Useqq( 1 );
+ return $dumper->Dump;
+}
+
+sub fallback_prereq_pm {
+ my $self = shift;
+ my $fallback
+ = $self->_normalize_eumm_versions(
+ $self->zilla->prereqs->merged_requires
+ ->clone
+ ->clear_requirement('perl')
+ ->as_string_hash
+ );
+ return $self->_dump_as( $fallback, '*FallbackPrereqs' );
+}
+
sub setup_installer {
- my ($self, $arg) = @_;
+ my ($self) = @_;
my $write_makefile_args = $self->write_makefile_args;
$self->__write_makefile_args($write_makefile_args); # save for testing
- my $perl_prereq = delete $write_makefile_args->{MIN_PERL_VERSION};
+ my $perl_prereq = $write_makefile_args->{MIN_PERL_VERSION};
- require Data::Dumper;
- my $makefile_args_dumper = Data::Dumper->new(
- [ $write_makefile_args ],
- [ '*WriteMakefileArgs' ],
- );
- $makefile_args_dumper->Sortkeys( 1 );
- $makefile_args_dumper->Indent( 1 );
- $makefile_args_dumper->Useqq( 1 );
+ my $dumped_args = $self->_dump_as($write_makefile_args, '*WriteMakefileArgs');
+ my $file = first { $_->name eq 'Makefile.PL' } @{$self->zilla->files};
+
+ $self->log_debug([ 'updating contents of Makefile.PL in memory' ]);
my $content = $self->fill_in_string(
- $template,
+ $file->content,
{
eumm_version => \($self->eumm_version),
perl_prereq => \$perl_prereq,
share_dir_code => $self->share_dir_code,
- WriteMakefileArgs => \($makefile_args_dumper->Dump),
+ fallback_prereqs => \($self->fallback_prereq_pm),
+ WriteMakefileArgs => \$dumped_args,
+ generated_by => \sprintf("%s v%s",
+ ref($self), $self->VERSION || '(dev)'),
},
);
- my $file = Dist::Zilla::File::InMemory->new({
- name => 'Makefile.PL',
- content => $content,
- });
+ $file->content($content);
- $self->add_file($file);
return;
}
@@ -243,17 +316,34 @@ has __write_makefile_args => (
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<ModuleBuild|Dist::Zilla::Plugin::ModuleBuild>,
+#pod L<Manifest|Dist::Zilla::Plugin::Manifest>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<BuildRunner|Dist::Zilla::Role::FileGatherer>,
+#pod L<InstallTool|Dist::Zilla::Role::InstallTool>,
+#pod L<PrereqSource|Dist::Zilla::Role::PrereqSource>,
+#pod L<TestRunner|Dist::Zilla::Role::TestRunner>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::MakeMaker - build a Makefile.PL that uses ExtUtils::MakeMaker
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -266,9 +356,9 @@ plugin should also be loaded.
=head2 eumm_version
This option declares the version of ExtUtils::MakeMaker required to configure
-and build the distribution. It defaults to 6.30, which ensures a working
-C<INSTALL_BASE>. It can be safely set to earlier versions, although I<no
-testing has been done to determine the minimum version actually required>.
+and build the distribution. There is no default, although one may be added if
+it can be determined that the generated F<Makefile.PL> requires some specific
+minimum. I<No testing has been done on this front.>
=head2 make_path
@@ -297,7 +387,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::Manifest;
-{
- $Dist::Zilla::Plugin::Manifest::VERSION = '4.300030';
-}
# ABSTRACT: build a MANIFEST file
+$Dist::Zilla::Plugin::Manifest::VERSION = '5.025';
use Moose;
use Moose::Autobox;
with 'Dist::Zilla::Role::FileGatherer';
@@ -11,6 +9,24 @@ use namespace::autoclean;
use Dist::Zilla::File::FromCode;
+#pod =head1 DESCRIPTION
+#pod
+#pod If included, this plugin will produce a F<MANIFEST> file for the distribution,
+#pod listing all of the files it contains. For obvious reasons, it should be
+#pod included as close to last as possible.
+#pod
+#pod This plugin is included in the L<@Basic|Dist::Zilla::PluginBundle::Basic>
+#pod bundle.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla core plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Manifest>,
+#pod L<ManifestSkip|Dist::Zilla::Plugin::ManifestSkip>.
+#pod
+#pod Other modules: L<ExtUtils::Manifest>.
+#pod
+#pod =cut
sub __fix_filename {
my ($name) = @_;
@@ -27,10 +43,14 @@ sub gather_files {
my $file = Dist::Zilla::File::FromCode->new({
name => 'MANIFEST',
+ code_return_type => 'bytes',
code => sub {
- $zilla->files->map(sub { $_->name })
- ->sort->map( sub { __fix_filename($_) } )->join("\n")
- . "\n",
+ my $generated_by = sprintf "%s v%s", ref($self), $self->VERSION || '(dev)';
+
+ return "# This file was automatically generated by $generated_by.\n"
+ . $zilla->files->map(sub { $_->name })
+ ->sort->map( sub { __fix_filename($_) } )->join("\n")
+ . "\n",
},
});
@@ -44,13 +64,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::Manifest - build a MANIFEST file
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -75,7 +97,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::ManifestSkip;
-{
- $Dist::Zilla::Plugin::ManifestSkip::VERSION = '4.300030';
-}
# ABSTRACT: decline to build files that appear in a MANIFEST.SKIP-like file
+$Dist::Zilla::Plugin::ManifestSkip::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::FilePruner';
@@ -10,6 +8,30 @@ use namespace::autoclean;
use Moose::Autobox;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin reads a MANIFEST.SKIP-like file, as used by L<ExtUtils::MakeMaker>
+#pod and L<ExtUtils::Manifest>, and prunes any files that it declares should be
+#pod skipped.
+#pod
+#pod This plugin is included in the L<@Basic|Dist::Zilla::PluginBundle::Basic>
+#pod bundle.
+#pod
+#pod =attr skipfile
+#pod
+#pod This is the name of the file to read for MANIFEST.SKIP-like content. It
+#pod defaults, unsurprisingly, to F<MANIFEST.SKIP>.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla core plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<PruneCruft|Dist::Zilla::Plugin::PruneCruft>,
+#pod L<PruneFiles|Dist::Zilla::Plugin::PruneFiles>.
+#pod
+#pod Other modules: L<ExtUtils::Manifest>.
+#pod
+#pod =cut
has skipfile => (is => 'ro', required => 1, default => 'MANIFEST.SKIP');
@@ -61,13 +83,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::ManifestSkip - decline to build files that appear in a MANIFEST.SKIP-like file
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -100,7 +124,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,24 @@
package Dist::Zilla::Plugin::MetaConfig;
-{
- $Dist::Zilla::Plugin::MetaConfig::VERSION = '4.300030';
-}
# ABSTRACT: summarize Dist::Zilla configuration into distmeta
+$Dist::Zilla::Plugin::MetaConfig::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::MetaProvider';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a top-level C<x_Dist_Zilla> key to the
+#pod L<distmeta|Dist::Zilla/distmeta> for the distribution. It describe the
+#pod Dist::Zilla version used as well as all the plugins used. Each plugin's name,
+#pod package, and version will be included. Plugins may augment their
+#pod implementation of the L<Dist::Zilla::Role::ConfigDumper> role methods to add
+#pod more data to this dump.
+#pod
+#pod More information may be added to the top-level of this metadata as time goes
+#pod on.
+#pod
+#pod =cut
sub metadata {
my ($self) = @_;
@@ -45,17 +56,25 @@ sub metadata {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla roles: L<MetaProvider|Dist::Zilla::Role::MetaProvider>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::MetaConfig - summarize Dist::Zilla configuration into distmeta
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -79,7 +98,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,20 +1,27 @@
package Dist::Zilla::Plugin::MetaJSON;
-{
- $Dist::Zilla::Plugin::MetaJSON::VERSION = '4.300030';
-}
# ABSTRACT: produce a META.json
+$Dist::Zilla::Plugin::MetaJSON::VERSION = '5.025';
use Moose;
use Moose::Autobox;
with 'Dist::Zilla::Role::FileGatherer';
use namespace::autoclean;
-use CPAN::Meta::Converter 2.101550; # improved downconversion
-use CPAN::Meta::Validator 2.101550; # improved downconversion
use Dist::Zilla::File::FromCode;
-use Hash::Merge::Simple ();
-use JSON 2;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add a F<META.json> file to the distribution.
+#pod
+#pod This file is meant to replace the old-style F<META.yml>. For more information
+#pod on this file, see L<Module::Build::API> and L<CPAN::Meta>.
+#pod
+#pod =attr filename
+#pod
+#pod If given, parameter allows you to specify an alternate name for the generated
+#pod file. It defaults, of course, to F<META.json>.
+#pod
+#pod =cut
has filename => (
is => 'ro',
@@ -22,6 +29,15 @@ has filename => (
default => 'META.json',
);
+#pod =attr version
+#pod
+#pod This parameter lets you pick what version of the spec to use when generating
+#pod the output. It defaults to 2 at present, but may be updated to new specs as
+#pod they are released and adopted.
+#pod
+#pod If you want a fixed version, specify it.
+#pod
+#pod =cut
has version => (
is => 'ro',
@@ -34,8 +50,16 @@ sub gather_files {
my $zilla = $self->zilla;
+ require JSON;
+ JSON->VERSION(2);
+ require CPAN::Meta::Converter;
+ CPAN::Meta::Converter->VERSION(2.101550); # improved downconversion
+ require CPAN::Meta::Validator;
+ CPAN::Meta::Validator->VERSION(2.101550); # improved downconversion
+
my $file = Dist::Zilla::File::FromCode->new({
name => $self->filename,
+ code_return_type => 'text',
code => sub {
my $distmeta = $zilla->distmeta;
@@ -50,7 +74,7 @@ sub gather_files {
my $converter = CPAN::Meta::Converter->new($distmeta);
my $output = $converter->convert(version => $self->version);
- JSON->new->ascii(1)->canonical(1)->pretty->encode($output)
+ JSON->new->canonical(1)->pretty->encode($output)
. "\n";
},
});
@@ -62,17 +86,34 @@ sub gather_files {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<Manifest|Dist::Zilla::Plugin::Manifest>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<FileGatherer|Dist::Zilla::Role::FileGatherer>.
+#pod
+#pod Other modules:
+#pod L<CPAN::Meta>,
+#pod L<CPAN::Meta::Spec>, L<JSON>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::MetaJSON - produce a META.json
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -115,7 +156,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,39 @@
package Dist::Zilla::Plugin::MetaNoIndex;
-{
- $Dist::Zilla::Plugin::MetaNoIndex::VERSION = '4.300030';
-}
# ABSTRACT: Stop CPAN from indexing stuff
-
+$Dist::Zilla::Plugin::MetaNoIndex::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::MetaProvider';
use namespace::autoclean;
+#pod =encoding utf8
+#pod
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [MetaNoIndex]
+#pod
+#pod directory = t/author
+#pod directory = examples
+#pod
+#pod file = lib/Foo.pm
+#pod
+#pod package = My::Module
+#pod
+#pod namespace = My::Module
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin allows you to prevent PAUSE/CPAN from indexing files you don't
+#pod want indexed. This is useful if you build test classes or example classes
+#pod that are used for those purposes only, and are not part of the distribution.
+#pod It does this by adding a C<no_index> block to your F<META.json> (or
+#pod F<META.yml>) file in your distribution.
+#pod
+#pod =for Pod::Coverage mvp_aliases mvp_multivalue_args
+#pod
+#pod =cut
my %ATTR_ALIAS = (
directories => [ qw(directory dir folder) ],
@@ -29,6 +54,34 @@ sub mvp_aliases {
sub mvp_multivalue_args { return keys %ATTR_ALIAS }
+#pod =attr directories
+#pod
+#pod Exclude folders and everything in them, for example: F<author.t>
+#pod
+#pod Aliases: C<folder>, C<dir>, C<directory>
+#pod
+#pod =attr files
+#pod
+#pod Exclude a specific file, for example: F<lib/Foo.pm>
+#pod
+#pod Alias: C<file>
+#pod
+#pod =attr packages
+#pod
+#pod Exclude by package name, for example: C<My::Package>
+#pod
+#pod Aliases: C<class>, C<module>, C<package>
+#pod
+#pod =attr namespaces
+#pod
+#pod Exclude everything under a specific namespace, for example: C<My::Package>
+#pod
+#pod Alias: C<namespace>
+#pod
+#pod B<NOTE:> This will not exclude the package C<My::Package>, only everything
+#pod under it like C<My::Package::Foo>.
+#pod
+#pod =cut
for my $attr (keys %ATTR_ALIAS) {
has $attr => (
@@ -39,6 +92,11 @@ for my $attr (keys %ATTR_ALIAS) {
);
}
+#pod =method metadata
+#pod
+#pod Returns a reference to a hash containing the distribution's no_index metadata.
+#pod
+#pod =cut
sub metadata {
my $self = shift;
@@ -55,17 +113,25 @@ sub metadata {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla roles: L<MetaProvider|Dist::Zilla::Role::MetaProvider>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::MetaNoIndex - Stop CPAN from indexing stuff
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -125,8 +191,6 @@ under it like C<My::Package::Foo>.
Returns a reference to a hash containing the distribution's no_index metadata.
-=encoding utf8
-
=for Pod::Coverage mvp_aliases mvp_multivalue_args
=head1 SEE ALSO
@@ -139,7 +203,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,24 @@
package Dist::Zilla::Plugin::MetaResources;
-{
- $Dist::Zilla::Plugin::MetaResources::VERSION = '4.300030';
-}
-
# ABSTRACT: provide arbitrary "resources" for distribution metadata
+$Dist::Zilla::Plugin::MetaResources::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::MetaProvider';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds resources entries to the distribution's metadata.
+#pod
+#pod [MetaResources]
+#pod homepage = http://example.com/~dude/project.asp
+#pod bugtracker.web = http://rt.cpan.org/NoAuth/Bugs.html?Dist=Project
+#pod bugtracker.mailto = bug-project@rt.cpan.org
+#pod repository.url = git://github.com/dude/project.git
+#pod repository.web = http://github.com/dude/project
+#pod repository.type = git
+#pod
+#pod =cut
has resources => (
is => 'ro',
@@ -23,6 +33,10 @@ sub BUILDARGS {
my $zilla = delete $copy{zilla};
my $name = delete $copy{plugin_name};
+ if (exists $copy{license} && ref($copy{license}) ne 'ARRAY') {
+ $copy{license} = [ $copy{license} ];
+ }
+
if (exists $copy{bugtracker}) {
my $tracker = delete $copy{bugtracker};
$copy{bugtracker}{web} = $tracker;
@@ -56,17 +70,27 @@ sub metadata {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla roles: L<MetaProvider|Dist::Zilla::Role::MetaProvider>.
+#pod
+#pod Dist::Zilla plugins on the CPAN: L<GithubMeta|Dist::Zilla::Plugin::GithubMeta>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::MetaResources - provide arbitrary "resources" for distribution metadata
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -92,7 +116,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,32 @@
package Dist::Zilla::Plugin::MetaTests;
-{
- $Dist::Zilla::Plugin::MetaTests::VERSION = '4.300030';
-}
# ABSTRACT: common extra tests for META.yml
+$Dist::Zilla::Plugin::MetaTests::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::Plugin::InlineFiles';
with 'Dist::Zilla::Role::PrereqSource';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This is an extension of L<Dist::Zilla::Plugin::InlineFiles>, providing the
+#pod following files:
+#pod
+#pod xt/release/meta-yaml.t - a standard Test::CPAN::Meta test
+#pod
+#pod L<Test::CPAN::Meta> will be added as a C<develop requires> dependency (which
+#pod can be installed via C<< dzil listdeps --author | cpanm >>).
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<MetaResources|Dist::Zilla::Plugin::MetaResources>,
+#pod L<MetaNoIndex|Dist::Zilla::Plugin::MetaNoIndex>,
+#pod L<MetaYAML|Dist::Zilla::Plugin::MetaYAML>,
+#pod L<MetaJSON|Dist::Zilla::Plugin::MetaJSON>,
+#pod L<MetaConfig|Dist::Zilla::Plugin::MetaConfig>.
+#pod
+#pod =cut
# Register the release test prereq as a "develop requires"
# so it will be listed in "dzil listdeps --author"
@@ -28,13 +46,15 @@ __PACKAGE__->meta->make_immutable;
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::MetaTests - common extra tests for META.yml
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -43,8 +63,8 @@ following files:
xt/release/meta-yaml.t - a standard Test::CPAN::Meta test
-Note that this test doesn't actually do anything unless you have
-L<Test::CPAN::Meta> installed.
+L<Test::CPAN::Meta> will be added as a C<develop requires> dependency (which
+can be installed via C<< dzil listdeps --author | cpanm >>).
=head1 SEE ALSO
@@ -61,7 +81,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -71,9 +91,8 @@ the same terms as the Perl 5 programming language system itself.
__DATA__
___[ xt/release/distmeta.t ]___
#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::MetaTests.
-use Test::More;
+use Test::CPAN::Meta;
-eval "use Test::CPAN::Meta";
-plan skip_all => "Test::CPAN::Meta required for testing META.yml" if $@;
meta_yaml_ok();
@@ -1,18 +1,25 @@
package Dist::Zilla::Plugin::MetaYAML;
-{
- $Dist::Zilla::Plugin::MetaYAML::VERSION = '4.300030';
-}
# ABSTRACT: produce a META.yml
+$Dist::Zilla::Plugin::MetaYAML::VERSION = '5.025';
use Moose;
use Moose::Autobox;
with 'Dist::Zilla::Role::FileGatherer';
+use Try::Tiny;
use namespace::autoclean;
-use CPAN::Meta::Converter 2.101550; # improved downconversion
-use CPAN::Meta::Validator 2.101550; # improved downconversion
-use Hash::Merge::Simple ();
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add a F<META.yml> file to the distribution.
+#pod
+#pod For more information on this file, see L<Module::Build::API> and L<CPAN::Meta>.
+#pod
+#pod =attr filename
+#pod
+#pod If given, parameter allows you to specify an alternate name for the generated
+#pod file. It defaults, of course, to F<META.yml>.
+#pod
+#pod =cut
has filename => (
is => 'ro',
@@ -20,6 +27,18 @@ has filename => (
default => 'META.yml',
);
+#pod =attr version
+#pod
+#pod This parameter lets you pick what version of the spec to use when generating
+#pod the output. It defaults to 1.4, the most commonly supported version at
+#pod present.
+#pod
+#pod B<This may change without notice in the future.>
+#pod
+#pod Once version 2 of the META file spec is more widely supported, this may default
+#pod to 2.
+#pod
+#pod =cut
has version => (
is => 'ro',
@@ -32,11 +51,16 @@ sub gather_files {
require Dist::Zilla::File::FromCode;
require YAML::Tiny;
+ require CPAN::Meta::Converter;
+ CPAN::Meta::Converter->VERSION(2.101550); # improved downconversion
+ require CPAN::Meta::Validator;
+ CPAN::Meta::Validator->VERSION(2.101550); # improved downconversion
my $zilla = $self->zilla;
my $file = Dist::Zilla::File::FromCode->new({
name => $self->filename,
+ code_return_type => 'text',
code => sub {
my $distmeta = $zilla->distmeta;
@@ -50,8 +74,13 @@ sub gather_files {
my $converter = CPAN::Meta::Converter->new($distmeta);
my $output = $converter->convert(version => $self->version);
-
- YAML::Tiny::Dump($output);
+ my $yaml = try {
+ YAML::Tiny->new($output)->write_string; # text!
+ }
+ catch {
+ $self->log_fatal("Could not create YAML string: " . YAML::Tiny->errstr)
+ };
+ return $yaml;
},
});
@@ -62,17 +91,34 @@ sub gather_files {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<Manifest|Dist::Zilla::Plugin::Manifest>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<FileGatherer|Dist::Zilla::Role::FileGatherer>.
+#pod
+#pod Other modules:
+#pod L<CPAN::Meta>,
+#pod L<CPAN::Meta::Spec>, L<YAML>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::MetaYAML - produce a META.yml
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -117,7 +163,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,29 +1,57 @@
package Dist::Zilla::Plugin::ModuleBuild;
-{
- $Dist::Zilla::Plugin::ModuleBuild::VERSION = '4.300030';
-}
# ABSTRACT: build a Build.PL that uses Module::Build
-use List::MoreUtils qw(any uniq);
+$Dist::Zilla::Plugin::ModuleBuild::VERSION = '5.025';
use Moose;
use Moose::Autobox;
with (
'Dist::Zilla::Role::BuildPL',
'Dist::Zilla::Role::PrereqSource',
+ 'Dist::Zilla::Role::FileGatherer',
'Dist::Zilla::Role::TextTemplate',
);
use namespace::autoclean;
+use CPAN::Meta::Requirements 2.121; # requirements_for_module
use Dist::Zilla::File::InMemory;
-use List::MoreUtils qw(any uniq);
+use List::Util 'first';
use Data::Dumper;
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will create a F<Build.PL> for installing the dist using
+#pod L<Module::Build>.
+#pod
+#pod =cut
+
+#pod =attr mb_version
+#pod
+#pod B<Optional:> Specify the minimum version of L<Module::Build> to depend on.
+#pod
+#pod Defaults to 0.3601 if a sharedir is being used, otherwise 0.28.
+#pod
+#pod =attr mb_class
+#pod
+#pod B<Optional:> Specify the class to use to create the build object. Defaults
+#pod to C<Module::Build> itself. If another class is specified, then the value
+#pod of mb_lib will be used to generate a line like C<use lib 'inc'> to be added
+#pod to the generated Build.PL file.
+#pod
+#pod =attr mb_lib
+#pod
+#pod B<Optional:> Specify the list of directories to be passed to lib when using
+#pod mb_class. Defaults to C<inc>.
+#pod
+#pod =cut
has 'mb_version' => (
isa => 'Str',
is => 'rw',
- default => '0.3601',
+ lazy => 1,
+ default => sub {
+ my $self = shift;
+ keys %{$self->zilla->_share_dir_map} ? '0.3601' : '0.28';
+ },
);
has 'mb_class' => (
@@ -39,6 +67,7 @@ has 'mb_lib' => (
);
my $template = q|
+# This file was automatically generated by {{ $generated_by }}.
use strict;
use warnings;
@@ -47,6 +76,13 @@ use Module::Build {{ $plugin->mb_version }};
my {{ $module_build_args }}
+my {{ $fallback_build_prereqs }}
+
+unless ( eval { Module::Build->VERSION(0.4004) } ) {
+ delete $module_build_args{test_requires};
+ $module_build_args{build_requires} = \%fallback_build_requires;
+}
+
my $build = {{ $plugin->mb_class }}->new(%module_build_args);
$build->create_build_script;
@@ -63,6 +99,16 @@ sub _use_custom_class {
}
}
+sub _dump_as {
+ my ($self, $ref, $name) = @_;
+ require Data::Dumper;
+ my $dumper = Data::Dumper->new( [ $ref ], [ $name ] );
+ $dumper->Sortkeys( 1 );
+ $dumper->Indent( 1 );
+ $dumper->Useqq( 1 );
+ return $dumper->Dump;
+}
+
sub register_prereqs {
my ($self) = @_;
@@ -90,14 +136,11 @@ sub module_build_args {
my %prereqs = (
configure_requires => $prereqs->requirements_for(qw(configure requires)),
build_requires => $prereqs->requirements_for(qw(build requires)),
+ test_requires => $prereqs->requirements_for(qw(test requires)),
requires => $prereqs->requirements_for(qw(runtime requires)),
recommends => $prereqs->requirements_for(qw(runtime recommends)),
);
- $prereqs{build_requires} = $prereqs{build_requires}->clone->add_requirements(
- $prereqs->requirements_for(qw(test requires))
- );
-
(my $name = $self->zilla->name) =~ s/-/::/g;
return {
@@ -115,8 +158,33 @@ sub module_build_args {
};
}
+sub fallback_build_requires {
+ my $self = shift;
+ my $prereqs = $self->zilla->prereqs;
+ my $merged = CPAN::Meta::Requirements->new;
+ for my $phase ( qw/build test/ ) {
+ my $req = $prereqs->requirements_for($phase, 'requires');
+ $merged->add_requirements( $req );
+ };
+ return $self->_dump_as( $merged->as_string_hash, '*fallback_build_requires' );
+}
+
+sub gather_files {
+ my ($self) = @_;
+
+ require Dist::Zilla::File::InMemory;
+
+ my $file = Dist::Zilla::File::InMemory->new({
+ name => 'Build.PL',
+ content => $template, # template evaluated later
+ });
+
+ $self->add_file($file);
+ return;
+}
+
sub setup_installer {
- my ($self, $arg) = @_;
+ my ($self) = @_;
$self->log_fatal("can't build Build.PL; license has no known META.yml value")
unless $self->zilla->license->meta_yml_name;
@@ -125,28 +193,26 @@ sub setup_installer {
$self->__module_build_args($module_build_args);
- my $module_build_dumper = Data::Dumper->new(
- [ $module_build_args ],
- [ '*module_build_args' ],
- );
- $module_build_dumper->Sortkeys( 1 );
- $module_build_dumper->Indent( 1 );
- $module_build_dumper->Useqq( 1 );
+ my $dumped_args = $self->_dump_as($module_build_args, '*module_build_args');
+ my $fallback_build_requires = $self->fallback_build_requires;
+
+ my $file = first { $_->name eq 'Build.PL' } @{$self->zilla->files};
+
+ $self->log_debug([ 'updating contents of Build.PL in memory' ]);
my $content = $self->fill_in_string(
- $template,
+ $file->content,
{
- plugin => \$self,
- module_build_args => \($module_build_dumper->Dump),
+ plugin => \$self,
+ module_build_args => \$dumped_args,
+ fallback_build_prereqs => \$fallback_build_requires,
+ generated_by => \sprintf("%s v%s",
+ ref($self), $self->VERSION || '(dev)'),
},
);
- my $file = Dist::Zilla::File::InMemory->new({
- name => 'Build.PL',
- content => $content,
- });
+ $file->content($content);
- $self->add_file($file);
return;
}
@@ -159,17 +225,32 @@ has __module_build_args => (
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<@Filter|Dist::Zilla::PluginBundle::Filter>,
+#pod L<MakeMaker|Dist::Zilla::Plugin::MakeMaker>,
+#pod L<Manifest|Dist::Zilla::Plugin::Manifest>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<BuildPL|Dist::Zilla::Role::BuildPL>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::ModuleBuild - build a Build.PL that uses Module::Build
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -182,7 +263,7 @@ L<Module::Build>.
B<Optional:> Specify the minimum version of L<Module::Build> to depend on.
-Defaults to 0.3601
+Defaults to 0.3601 if a sharedir is being used, otherwise 0.28.
=head2 mb_class
@@ -213,7 +294,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,21 @@
package Dist::Zilla::Plugin::ModuleShareDirs;
-{
- $Dist::Zilla::Plugin::ModuleShareDirs::VERSION = '4.300030';
-}
# ABSTRACT: install a directory's contents as module-based "ShareDir" content
+$Dist::Zilla::Plugin::ModuleShareDirs::VERSION = '5.025';
use Moose;
use namespace::autoclean;
use Moose::Autobox;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [ModuleShareDirs]
+#pod Foo::Bar = shares/foo_bar
+#pod Foo::Baz = shares/foo_baz
+#pod
+#pod =cut
has _module_map => (
is => 'ro',
@@ -62,13 +69,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::ModuleShareDirs - install a directory's contents as module-based "ShareDir" content
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -84,7 +93,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,6 @@
package Dist::Zilla::Plugin::NextRelease;
-{
- $Dist::Zilla::Plugin::NextRelease::VERSION = '4.300030';
-}
# ABSTRACT: update the next release number in your changelog
-
+$Dist::Zilla::Plugin::NextRelease::VERSION = '5.025';
use namespace::autoclean;
use Moose;
@@ -13,7 +10,7 @@ with (
'Dist::Zilla::Role::AfterRelease',
);
-use DateTime 0.44; # CLDR fixes
+use Path::Tiny;
use Moose::Util::TypeConstraints;
use String::Formatter 0.100680 stringf => {
-as => '_format_version',
@@ -23,6 +20,9 @@ use String::Formatter 0.100680 stringf => {
codes => {
v => sub { $_[0]->zilla->version },
d => sub {
+ require DateTime;
+ DateTime->VERSION('0.44'); # CLDR fixes
+
DateTime->from_epoch(epoch => $^T, time_zone => $_[0]->time_zone)
->format_cldr($_[1]),
},
@@ -47,7 +47,7 @@ has time_zone => (
has format => (
is => 'ro',
isa => 'Str', # should be more validated Later -- rjbs, 2008-06-05
- default => '%-9v %{yyyy-MM-dd HH:mm:ss VVVV}d',
+ default => '%-9v %{yyyy-MM-dd HH:mm:ssZZZZZ VVVV}d%{ (TRIAL RELEASE)}T',
);
has filename => (
@@ -119,17 +119,12 @@ sub munge_files {
sub after_release {
my ($self) = @_;
my $filename = $self->filename;
+ my ($gathered_file) = grep { $_->name eq $filename } @{ $self->zilla->files };
+ $self->log_fatal("failed to find $filename in the distribution") if not $gathered_file;
+ my $iolayer = sprintf(":raw:encoding(%s)", $gathered_file->encoding);
# read original changelog
- my $content = do {
- local $/;
- open my $in_fh, '<', $filename
- or Carp::croak("can't open $filename for reading: $!");
-
- # Win32
- binmode $in_fh, ':raw';
- <$in_fh>
- };
+ my $content = path($filename)->slurp({ binmode => $iolayer});
# add the version and date to file content
my $delim = $self->delim;
@@ -141,29 +136,132 @@ sub after_release {
$self->log_debug([ 'updating contents of %s on disk', $update_fn ]);
# and finally rewrite the changelog on disk
- open my $out_fh, '>', $update_fn
- or Carp::croak("can't open $update_fn for writing: $!");
-
- # Win32.
- binmode $out_fh, ':raw';
- print $out_fh $content or Carp::croak("error writing to $update_fn: $!");
- close $out_fh or Carp::croak("error closing $update_fn: $!");
+ path($update_fn)->spew({binmode => $iolayer}, $content);
}
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [NextRelease]
+#pod
+#pod In your F<Changes> file:
+#pod
+#pod {{$NEXT}}
+#pod
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod Tired of having to update your F<Changes> file by hand with the new
+#pod version and release date / time each time you release your distribution?
+#pod Well, this plugin is for you.
+#pod
+#pod Add this plugin to your F<dist.ini>, and the following to your
+#pod F<Changes> file:
+#pod
+#pod {{$NEXT}}
+#pod
+#pod The C<NextRelease> plugin will then do 2 things:
+#pod
+#pod =over 4
+#pod
+#pod =item * At build time, this special marker will be replaced with the
+#pod version and the build date, to form a standard changelog header. This
+#pod will be done to the in-memory file - the original F<Changes> file won't
+#pod be updated.
+#pod
+#pod =item * After release (when running C<dzil release>), since the version
+#pod and build date are now part of your dist's history, the real F<Changes>
+#pod file (not the in-memory one) will be updated with this piece of
+#pod information.
+#pod
+#pod =back
+#pod
+#pod The module accepts the following options in its F<dist.ini> section:
+#pod
+#pod =begin :list
+#pod
+#pod = filename
+#pod the name of your changelog file; defaults to F<Changes>
+#pod
+#pod = update_filename
+#pod the file to which to write an updated changelog to; defaults to the C<filename>
+#pod
+#pod = format
+#pod sprintf-like string used to compute the next value of C<{{$NEXT}}>;
+#pod defaults to C<%-9v %{yyyy-MM-dd HH:mm:ss VVVV}d>
+#pod
+#pod = time_zone
+#pod the timezone to use when generating the date; defaults to I<local>
+#pod
+#pod = user_stash
+#pod the name of the stash where the user's name and email address can be found;
+#pod defaults to C<%User>
+#pod
+#pod =end :list
+#pod
+#pod The module allows the following sprintf-like format codes in the C<format>:
+#pod
+#pod =begin :list
+#pod
+#pod = C<%v>
+#pod The distribution version
+#pod
+#pod = C<%{-TRIAL}T>
+#pod Expands to -TRIAL (or any other supplied string) if this
+#pod is a trial release, or the empty string if not. A bare C<%T> means
+#pod C<%{-TRIAL}T>.
+#pod
+#pod = C<%{-TRIAL}V>
+#pod Equivalent to C<%v%{-TRIAL}T>, to allow for the application of modifiers such
+#pod as space padding to the entire version string produced.
+#pod
+#pod = C<%{CLDR format}d>
+#pod The date of the release. You can use any CLDR format supported by
+#pod L<DateTime>. You must specify the format; there is no default.
+#pod
+#pod = C<%U>
+#pod The name of the user making this release (from C<user_stash>).
+#pod
+#pod = C<%E>
+#pod The email address of the user making this release (from C<user_stash>).
+#pod
+#pod = C<%n>
+#pod A newline
+#pod
+#pod = C<%t>
+#pod A tab
+#pod
+#pod =end :list
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<AutoVersion|Dist::Zilla::Plugin::AutoVersion>,
+#pod L<PkgVersion|Dist::Zilla::Plugin::PkgVersion>,
+#pod L<PodVersion|Dist::Zilla::Plugin::PodVersion>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<AfterRelease|Dist::Zilla::Plugin::AfterRelease>,
+#pod L<FileMunger|Dist::Zilla::Role::FileMunger>,
+#pod L<TextTemplate|Dist::Zilla::Role::TextTemplate>.
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::NextRelease - update the next release number in your changelog
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -290,7 +388,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::PkgDist;
-{
- $Dist::Zilla::Plugin::PkgDist::VERSION = '4.300030';
-}
# ABSTRACT: add a $DIST to your packages
+$Dist::Zilla::Plugin::PkgDist::VERSION = '5.025';
use Moose;
with(
'Dist::Zilla::Role::FileMunger',
@@ -14,8 +12,23 @@ with(
use namespace::autoclean;
-use PPI;
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add a line like the following to each package in each Perl
+#pod module or program (more or less) within the distribution:
+#pod
+#pod { our $DIST = 'My-CPAN-Dist'; } # where 'My-CPAN-Dist' is your dist name
+#pod
+#pod It will skip any package declaration that includes a newline between the
+#pod C<package> keyword and the package name, like:
+#pod
+#pod package
+#pod Foo::Bar;
+#pod
+#pod This sort of declaration is also ignored by the CPAN toolchain, and is
+#pod typically used when doing monkey patching or other tricky things.
+#pod
+#pod =cut
sub munge_files {
my ($self) = @_;
@@ -93,13 +106,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::PkgDist - add a $DIST to your packages
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -123,7 +138,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::PkgVersion;
-{
- $Dist::Zilla::Plugin::PkgVersion::VERSION = '4.300030';
-}
# ABSTRACT: add a $VERSION to your packages
+$Dist::Zilla::Plugin::PkgVersion::VERSION = '5.025';
use Moose;
with(
'Dist::Zilla::Role::FileMunger',
@@ -12,11 +10,64 @@ with(
'Dist::Zilla::Role::PPI',
);
-use PPI;
-use MooseX::Types::Perl qw(LaxVersionStr);
-
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod in dist.ini
+#pod
+#pod [PkgVersion]
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin will add lines like the following to each package in each Perl
+#pod module or program (more or less) within the distribution:
+#pod
+#pod $MyModule::VERSION = 0.001;
+#pod
+#pod ...where 0.001 is the version of the dist, and MyModule is the name of the
+#pod package being given a version. (In other words, it always uses fully-qualified
+#pod names to assign versions.)
+#pod
+#pod It will skip any package declaration that includes a newline between the
+#pod C<package> keyword and the package name, like:
+#pod
+#pod package
+#pod Foo::Bar;
+#pod
+#pod This sort of declaration is also ignored by the CPAN toolchain, and is
+#pod typically used when doing monkey patching or other tricky things.
+#pod
+#pod =attr die_on_existing_version
+#pod
+#pod If true, then when PkgVersion sees an existing C<$VERSION> assignment, it will
+#pod throw an exception rather than skip the file. This attribute defaults to
+#pod false.
+#pod
+#pod =attr die_on_line_insertion
+#pod
+#pod By default, PkgVersion look for a blank line after each C<package> statement.
+#pod If it finds one, it inserts the C<$VERSION> assignment on that line. If it
+#pod doesn't, it will insert a new line, which means the shipped copy of the module
+#pod will have different line numbers (off by one) than the source. If
+#pod C<die_on_line_insertion> is true, PkgVersion will raise an exception rather
+#pod than insert a new line.
+#pod
+#pod =attr finder
+#pod
+#pod =for stopwords FileFinder
+#pod
+#pod This is the name of a L<FileFinder|Dist::Zilla::Role::FileFinder> for finding
+#pod modules to edit. The default value is C<:InstallModules> and C<:ExecFiles>;
+#pod this option can be used more than once.
+#pod
+#pod Other predefined finders are listed in
+#pod L<Dist::Zilla::Role::FileFinderUser/default_finders>.
+#pod You can define your own with the
+#pod L<[FileFinder::ByName]|Dist::Zilla::Plugin::FileFinder::ByName> and
+#pod L<[FileFinder::Filter]|Dist::Zilla::Plugin::FileFinder::Filter> plugins.
+#pod
+#pod =cut
sub munge_files {
my ($self) = @_;
@@ -27,37 +78,57 @@ sub munge_files {
sub munge_file {
my ($self, $file) = @_;
- # XXX: for test purposes, for now! evil! -- rjbs, 2010-03-17
- return if $file->name =~ /^corpus\//;
+ if ($file->is_bytes) {
+ $self->log_debug($file->name . " has 'bytes' encoding, skipping...");
+ return;
+ }
- return if $file->name =~ /\.t$/i;
- return $self->munge_perl($file) if $file->name =~ /\.(?:pm|pl)$/i;
- return $self->munge_perl($file) if $file->content =~ /^#!(?:.*)perl(?:$|\s)/;
- return;
+ return $self->munge_perl($file);
}
+has die_on_existing_version => (
+ is => 'ro',
+ isa => 'Bool',
+ default => 0,
+);
+
+has die_on_line_insertion => (
+ is => 'ro',
+ isa => 'Bool',
+ default => 0,
+);
+
sub munge_perl {
my ($self, $file) = @_;
my $version = $self->zilla->version;
+ require version;
Carp::croak("invalid characters in version")
- unless LaxVersionStr->check($version);
+ unless version::is_lax($version);
my $document = $self->ppi_document_for_file($file);
if ($self->document_assigns_to_variable($document, '$VERSION')) {
+ if ($self->die_on_existing_version) {
+ $self->log_fatal([ 'existing assignment to $VERSION in %s', $file->name ]);
+ }
+
$self->log([ 'skipping %s: assigns to $VERSION', $file->name ]);
return;
}
- return unless my $package_stmts = $document->find('PPI::Statement::Package');
+ my $package_stmts = $document->find('PPI::Statement::Package');
+ unless ($package_stmts) {
+ $self->log_debug([ 'skipping %s: no package statement found', $file->name ]);
+ return;
+ }
my %seen_pkg;
+ my $munged = 0;
for my $stmt (@$package_stmts) {
my $package = $stmt->namespace;
-
if ($seen_pkg{ $package }++) {
$self->log([ 'skipping package re-declaration for %s', $package ]);
next;
@@ -68,14 +139,17 @@ sub munge_perl {
next;
}
+ $self->log("non-ASCII package name is likely to cause problems")
+ if $package =~ /\P{ASCII}/;
+
+ $self->log("non-ASCII version is likely to cause problems")
+ if $version =~ /\P{ASCII}/;
+
# the \x20 hack is here so that when we scan *this* document we don't find
# an assignment to version; it shouldn't be needed, but it's been annoying
# enough in the past that I'm keeping it here until tests are better
my $trial = $self->zilla->is_trial ? ' # TRIAL' : '';
- my $perl = "{\n \$$package\::VERSION\x20=\x20'$version';$trial\n}\n";
-
- my $version_doc = PPI::Document->new(\$perl);
- my @children = $version_doc->schildren;
+ my $perl = "\$$package\::VERSION\x20=\x20'$version';$trial";
$self->log_debug([
'adding $VERSION assignment to %s in %s',
@@ -83,28 +157,90 @@ sub munge_perl {
$file->name,
]);
- Carp::carp("error inserting version in " . $file->name)
- unless $stmt->insert_after($children[0]->clone)
- and $stmt->insert_after( PPI::Token::Whitespace->new("\n") );
+ my $blank;
+
+ {
+ my $curr = $stmt;
+ while (1) {
+ # avoid bogus locations due to insert_after
+ $document->flush_locations if $munged;
+ my $curr_line_number = $curr->line_number + 1;
+ my $find = $document->find(sub {
+ my $line = $_[1]->line_number;
+ return $line > $curr_line_number ? undef : $line == $curr_line_number;
+ });
+
+ last unless $find and @$find == 1;
+
+ if ($find->[0]->isa('PPI::Token::Comment')) {
+ $curr = $find->[0];
+ next;
+ }
+
+ if ("$find->[0]" =~ /\A\s*\z/) {
+ $blank = $find->[0];
+ }
+
+ last;
+ }
+ }
+
+ $perl = $blank ? "$perl\n" : "\n$perl";
+
+ # Why can't I use PPI::Token::Unknown? -- rjbs, 2014-01-11
+ my $bogus_token = PPI::Token::Comment->new($perl);
+
+ if ($blank) {
+ Carp::carp("error inserting version in " . $file->name)
+ unless $blank->insert_after($bogus_token);
+ $blank->delete;
+ } else {
+ my $method = $self->die_on_line_insertion ? 'log_fatal' : 'log';
+ $self->$method([
+ 'no blank line for $VERSION after package %s statement on line %s',
+ $stmt->namespace,
+ $stmt->line_number,
+ ]);
+
+ Carp::carp("error inserting version in " . $file->name)
+ unless $stmt->insert_after($bogus_token);
+ }
+
+ $munged = 1;
}
- $self->save_ppi_document_to_file($document, $file);
+ $self->save_ppi_document_to_file($document, $file) if $munged;
}
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<PodVersion|Dist::Zilla::Plugin::PodVersion>,
+#pod L<AutoVersion|Dist::Zilla::Plugin::AutoVersion>,
+#pod L<NextRelease|Dist::Zilla::Plugin::NextRelease>.
+#pod
+#pod Other Dist::Zilla plugins:
+#pod L<OurPkgVersion|Dist::Zilla::Plugin::OurPkgVersion> inserts version
+#pod numbers using C<our $VERSION = '...';> and without changing line numbers
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::PkgVersion - add a $VERSION to your packages
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -117,9 +253,7 @@ in dist.ini
This plugin will add lines like the following to each package in each Perl
module or program (more or less) within the distribution:
- {
- $MyModule::VERSION = 0.001;
- }
+ $MyModule::VERSION = 0.001;
...where 0.001 is the version of the dist, and MyModule is the name of the
package being given a version. (In other words, it always uses fully-qualified
@@ -134,6 +268,37 @@ C<package> keyword and the package name, like:
This sort of declaration is also ignored by the CPAN toolchain, and is
typically used when doing monkey patching or other tricky things.
+=head1 ATTRIBUTES
+
+=head2 die_on_existing_version
+
+If true, then when PkgVersion sees an existing C<$VERSION> assignment, it will
+throw an exception rather than skip the file. This attribute defaults to
+false.
+
+=head2 die_on_line_insertion
+
+By default, PkgVersion look for a blank line after each C<package> statement.
+If it finds one, it inserts the C<$VERSION> assignment on that line. If it
+doesn't, it will insert a new line, which means the shipped copy of the module
+will have different line numbers (off by one) than the source. If
+C<die_on_line_insertion> is true, PkgVersion will raise an exception rather
+than insert a new line.
+
+=head2 finder
+
+=for stopwords FileFinder
+
+This is the name of a L<FileFinder|Dist::Zilla::Role::FileFinder> for finding
+modules to edit. The default value is C<:InstallModules> and C<:ExecFiles>;
+this option can be used more than once.
+
+Other predefined finders are listed in
+L<Dist::Zilla::Role::FileFinderUser/default_finders>.
+You can define your own with the
+L<[FileFinder::ByName]|Dist::Zilla::Plugin::FileFinder::ByName> and
+L<[FileFinder::Filter]|Dist::Zilla::Plugin::FileFinder::Filter> plugins.
+
=head1 SEE ALSO
Core Dist::Zilla plugins:
@@ -151,7 +316,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,29 @@
package Dist::Zilla::Plugin::PodCoverageTests;
-{
- $Dist::Zilla::Plugin::PodCoverageTests::VERSION = '4.300030';
-}
# ABSTRACT: a release test for Pod coverage
+$Dist::Zilla::Plugin::PodCoverageTests::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::Plugin::InlineFiles';
with 'Dist::Zilla::Role::PrereqSource';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This is an extension of L<Dist::Zilla::Plugin::InlineFiles>, providing the
+#pod following files:
+#pod
+#pod xt/release/pod-coverage.t - a standard Test::Pod::Coverage test
+#pod
+#pod This test uses L<Pod::Coverage::TrustPod> to check your Pod coverage. This
+#pod means that to indicate that some subs should be treated as covered, even if no
+#pod documentation can be found, you can add:
+#pod
+#pod =for Pod::Coverage sub_name other_sub this_one_too
+#pod
+#pod L<Test::Pod::Coverage> C<1.08> and L<Pod::Coverage::TrustPod> will be added as
+#pod C<develop requires> dependencies.
+#pod
+#pod =cut
# Register the release test prereq as a "develop requires"
# so it will be listed in "dzil listdeps --author"
@@ -30,13 +45,15 @@ __PACKAGE__->meta->make_immutable;
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::PodCoverageTests - a release test for Pod coverage
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -51,13 +68,16 @@ documentation can be found, you can add:
=for Pod::Coverage sub_name other_sub this_one_too
+L<Test::Pod::Coverage> C<1.08> and L<Pod::Coverage::TrustPod> will be added as
+C<develop requires> dependencies.
+
=head1 AUTHOR
Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -67,15 +87,9 @@ the same terms as the Perl 5 programming language system itself.
__DATA__
___[ xt/release/pod-coverage.t ]___
#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodCoverageTests.
-use Test::More;
-
-eval "use Test::Pod::Coverage 1.08";
-plan skip_all => "Test::Pod::Coverage 1.08 required for testing POD coverage"
- if $@;
-
-eval "use Pod::Coverage::TrustPod";
-plan skip_all => "Pod::Coverage::TrustPod required for testing POD coverage"
- if $@;
+use Test::Pod::Coverage 1.08;
+use Pod::Coverage::TrustPod;
all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' });
@@ -1,14 +1,22 @@
package Dist::Zilla::Plugin::PodSyntaxTests;
-{
- $Dist::Zilla::Plugin::PodSyntaxTests::VERSION = '4.300030';
-}
# ABSTRACT: a release test for Pod syntax
+$Dist::Zilla::Plugin::PodSyntaxTests::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::Plugin::InlineFiles';
with 'Dist::Zilla::Role::PrereqSource';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This is an extension of L<Dist::Zilla::Plugin::InlineFiles>, providing the
+#pod following files:
+#pod
+#pod xt/release/pod-syntax.t - a standard Test::Pod test
+#pod
+#pod L<Test::Pod> C<1.41> will be added as a C<develop requires> dependency.
+#pod
+#pod =cut
# Register the release test prereq as a "develop requires"
@@ -31,13 +39,15 @@ __PACKAGE__->meta->make_immutable;
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::PodSyntaxTests - a release test for Pod syntax
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -54,7 +64,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -64,9 +74,8 @@ the same terms as the Perl 5 programming language system itself.
__DATA__
___[ xt/release/pod-syntax.t ]___
#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+use Test::Pod 1.41;
all_pod_files_ok();
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::PodVersion;
-{
- $Dist::Zilla::Plugin::PodVersion::VERSION = '4.300030';
-}
# ABSTRACT: add a VERSION head1 to each Perl document
+$Dist::Zilla::Plugin::PodVersion::VERSION = '5.025';
use Moose;
with(
'Dist::Zilla::Role::FileMunger',
@@ -13,6 +11,14 @@ with(
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a C<=head1 VERSION> section to most perl files in the
+#pod distribution, indicating the version of the dist being built. This section is
+#pod added after C<=head1 NAME>. If there is no such section, the version section
+#pod will not be added.
+#pod
+#pod =cut
sub munge_files {
my ($self) = @_;
@@ -43,7 +49,7 @@ sub munge_pod {
$_++; # move past the =head1 line itself
$_++ while $content[$_] =~ /^\s*$/;
- $_++; # move past the line with the abstract
+ $_++ while $content[$_] !~ /^\s*$/; # move past the abstract
$_++ while $content[$_] =~ /^\s*$/;
splice @content, $_ - 1, 0, (
@@ -70,17 +76,28 @@ sub munge_pod {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<PkgVersion|Dist::Zilla::Plugin::PkgVersion>,
+#pod L<AutoVersion|Dist::Zilla::Plugin::AutoVersion>,
+#pod L<NextRelease|Dist::Zilla::Plugin::NextRelease>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::PodVersion - add a VERSION head1 to each Perl document
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -102,7 +119,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,21 @@
package Dist::Zilla::Plugin::Prereq;
-{
- $Dist::Zilla::Plugin::Prereq::VERSION = '4.300030';
-}
# ABSTRACT: (DEPRECATED) the old name of the Prereqs plugin
+$Dist::Zilla::Plugin::Prereq::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::Plugin::Prereqs';
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod This plugin extends C<[Prereqs]> and adds nothing. It is the old name for
+#pod Prereqs, and will be removed in a few versions.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla plugins: L<Prereqs|Dist::Zilla::Plugin::Prereqs>.
+#pod
+#pod =cut
before register_component => sub {
die "[Prereq] is incompatible with Dist::Zilla >= v5; replace it with [Prereqs] (note the
@@ -23,13 +31,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::Prereq - (DEPRECATED) the old name of the Prereqs plugin
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -46,7 +56,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,88 @@
package Dist::Zilla::Plugin::Prereqs;
-{
- $Dist::Zilla::Plugin::Prereqs::VERSION = '4.300030';
-}
# ABSTRACT: list simple prerequisites
+$Dist::Zilla::Plugin::Prereqs::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::PrereqSource';
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [Prereqs]
+#pod Foo::Bar = 1.002
+#pod MRO::Compat = 10
+#pod Sub::Exporter = 0
+#pod
+#pod You can specify requirements for different phases and relationships with:
+#pod
+#pod [Prereqs]
+#pod -phase = test
+#pod -relationship = recommends
+#pod
+#pod Fitz::Fotz = 1.23
+#pod Text::SoundEx = 3
+#pod
+#pod Remember that if you load two Prereqs plugins, each will needs its own name,
+#pod added like this:
+#pod
+#pod [Prereqs / PluginName]
+#pod -phase = test
+#pod -relationship = recommends
+#pod
+#pod Fitz::Fotz = 1.23
+#pod Text::SoundEx = 3
+#pod
+#pod If the name is the CamelCase concatenation of a phase and relationship
+#pod (or just a relationship), it will set those parameters implicitly. If
+#pod you use a custom name, but it does not specify the relationship, and
+#pod you didn't specify either C<-phase> or C<-relationship>, it throws the
+#pod error C<No -phase or -relationship specified>. This is to prevent a
+#pod typo that makes the name meaningless from slipping by unnoticed.
+#pod
+#pod The example below is equivalent to the example above, except for the name of
+#pod the resulting plugin:
+#pod
+#pod [Prereqs / TestRecommends]
+#pod Fitz::Fotz = 1.23
+#pod Text::SoundEx = 3
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This module adds "fixed" prerequisites to your distribution. These are prereqs
+#pod with a known, fixed minimum version that doesn't change based on platform or
+#pod other conditions.
+#pod
+#pod You can specify prerequisites for different phases and kinds of relationships.
+#pod In C<RuntimeRequires>, the phase is Runtime and the relationship is Requires.
+#pod These are described in more detail in the L<CPAN::Meta
+#pod specification|CPAN::Meta::Spec/PREREQUISITES>.
+#pod
+#pod The phases are:
+#pod
+#pod =for :list
+#pod * configure
+#pod * build
+#pod * test
+#pod * runtime
+#pod * develop
+#pod
+#pod The relationship types are:
+#pod
+#pod =for :list
+#pod * requires
+#pod * recommends
+#pod * suggests
+#pod * conflicts
+#pod
+#pod If the phase is omitted, it will default to I<runtime>; thus, specifying
+#pod "Prereqs / Recommends" in your dist.ini is equivalent to I<RuntimeRecommends>.
+#pod
+#pod Not all of these phases are useful for all tools, especially tools that only
+#pod understand version 1.x CPAN::Meta files.
+#pod
+#pod =cut
has prereq_phase => (
is => 'ro',
@@ -67,6 +142,7 @@ sub BUILDARGS {
# Handle magic plugin names:
unless (($other{phase} and $other{type})
+ # plugin comes from a bundle
or $name =~ m! (?: \A | / ) Prereqs? \z !x) {
my ($phase, $type) = $name =~ /\A
@@ -107,17 +183,37 @@ sub register_prereqs {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod Core Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<AutoPrereqs|Dist::Zilla::Plugin::AutoPrereqs>.
+#pod
+#pod =item *
+#pod
+#pod The CPAN Meta specification: L<CPAN::Meta/PREREQUISITES>.
+#pod
+#pod =back
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::Prereqs - list simple prerequisites
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -164,7 +260,7 @@ the resulting plugin:
=head1 DESCRIPTION
This module adds "fixed" prerequisites to your distribution. These are prereqs
-with a known, fixed minimum version that doens't change based on platform or
+with a known, fixed minimum version that doesn't change based on platform or
other conditions.
You can specify prerequisites for different phases and kinds of relationships.
@@ -248,7 +344,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::PruneCruft;
-{
- $Dist::Zilla::Plugin::PruneCruft::VERSION = '4.300030';
-}
# ABSTRACT: prune stuff that you probably don't mean to include
+$Dist::Zilla::Plugin::PruneCruft::VERSION = '5.025';
use Moose;
use Moose::Autobox;
use Moose::Util::TypeConstraints;
@@ -10,6 +8,34 @@ with 'Dist::Zilla::Role::FilePruner';
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod This plugin tries to compensate for the stupid crap that turns up in your
+#pod working copy, removing it before it gets into your dist and screws everything
+#pod up.
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [PruneCruft]
+#pod
+#pod If you would like to exclude certain exclusions, use the C<except> option (it
+#pod can be specified multiple times):
+#pod
+#pod [PruneCruft]
+#pod except = \.gitignore
+#pod except = t/.*/\.keep$
+#pod
+#pod This plugin is included in the L<@Basic|Dist::Zilla::PluginBundle::Basic>
+#pod bundle.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla plugins:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<PruneFiles|Dist::Zilla::Plugin::PruneFiles>,
+#pod L<ManifestSkip|Dist::Zilla::Plugin::ManifestSkip>.
+#pod
+#pod =cut
{
my $type = subtype as 'ArrayRef[RegexpRef]';
@@ -38,12 +64,16 @@ sub exclude_file {
return 1 if index($file->name, $self->zilla->name . '-') == 0;
return 1 if $file->name =~ /\A\./;
return 1 if $file->name =~ /\A(?:Build|Makefile)\z/;
+ return 1 if $file->name eq 'Makefile.old';
return 1 if $file->name =~ /\Ablib/;
return 1 if $file->name =~ /\.(?:o|bs)$/;
return 1 if $file->name =~ /\A_Inline/;
return 1 if $file->name eq 'MYMETA.yml';
return 1 if $file->name eq 'MYMETA.json';
return 1 if $file->name eq 'pm_to_blib';
+ # Avoid bundling fatlib/ dir created by App::FatPacker
+ # https://github.com/andk/pause/pull/65
+ return 1 if substr($file->name, 0, 7) eq 'fatlib/';
if ((my $file = $file->name) =~ s/\.c$//) {
for my $other ($self->zilla->files->flatten) {
@@ -75,13 +105,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::PruneCruft - prune stuff that you probably don't mean to include
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -116,7 +148,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,18 +1,41 @@
package Dist::Zilla::Plugin::PruneFiles;
-{
- $Dist::Zilla::Plugin::PruneFiles::VERSION = '4.300030';
-}
-# ABSTRACT: prune arbirary files from the dist
+# ABSTRACT: prune arbitrary files from the dist
+$Dist::Zilla::Plugin::PruneFiles::VERSION = '5.025';
use Moose;
use Moose::Autobox;
with 'Dist::Zilla::Role::FilePruner';
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod This plugin allows you to explicitly prune some files from your
+#pod distribution. You can either specify the exact set of files (with the
+#pod "filenames" parameter) or provide the regular expressions to
+#pod check (using "match").
+#pod
+#pod This is useful if another plugin (maybe a FileGatherer) adds a
+#pod bunch of files, and you only want a subset of them.
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [PruneFiles]
+#pod filename = xt/release/pod-coverage.t ; pod coverage tests are for jerks
+#pod filename = todo-list.txt ; keep our secret plans to ourselves
+#pod
+#pod match = ^test_data/
+#pod match = ^test.cvs$
+#pod
+#pod =cut
sub mvp_multivalue_args { qw(filenames matches) }
sub mvp_aliases { return { filename => 'filenames', match => 'matches' } }
+#pod =attr filenames
+#pod
+#pod This is an arrayref of filenames to be pruned from the distribution.
+#pod
+#pod =cut
has filenames => (
is => 'ro',
@@ -20,6 +43,12 @@ has filenames => (
default => sub { [] },
);
+#pod =attr matches
+#pod
+#pod This is an arrayref of regular expressions and files matching any of them,
+#pod will be pruned from the distribution.
+#pod
+#pod =cut
has matches => (
is => 'ro',
@@ -52,17 +81,28 @@ sub prune_files {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla plugins:
+#pod L<PruneCruft|Dist::Zilla::Plugin::PruneCruft>,
+#pod L<GatherDir|Dist::Zilla::Plugin::GatherDir>,
+#pod L<ManifestSkip|Dist::Zilla::Plugin::ManifestSkip>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
-Dist::Zilla::Plugin::PruneFiles - prune arbirary files from the dist
+Dist::Zilla::Plugin::PruneFiles - prune arbitrary files from the dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -80,7 +120,7 @@ In your F<dist.ini>:
filename = xt/release/pod-coverage.t ; pod coverage tests are for jerks
filename = todo-list.txt ; keep our secret plans to ourselves
- match = ^test_data/*
+ match = ^test_data/
match = ^test.cvs$
=head1 ATTRIBUTES
@@ -107,7 +147,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,26 @@
package Dist::Zilla::Plugin::Readme;
-{
- $Dist::Zilla::Plugin::Readme::VERSION = '4.300030';
-}
# ABSTRACT: build a README file
+$Dist::Zilla::Plugin::Readme::VERSION = '5.025';
use Moose;
use Moose::Autobox;
-with qw/Dist::Zilla::Role::FileGatherer Dist::Zilla::Role::TextTemplate/;
+with qw/Dist::Zilla::Role::FileGatherer
+ Dist::Zilla::Role::TextTemplate
+ Dist::Zilla::Role::FileMunger/;
+use Moose::Util::TypeConstraints;
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin adds a very simple F<README> file to the distribution, citing the
+#pod dist's name, version, abstract, and license. It may be more useful or
+#pod informative in the future.
+#pod
+#pod =cut
+
+has _file_obj => (
+ is => 'rw', isa => role_type('Dist::Zilla::Role::File'),
+);
sub gather_files {
my ($self, $arg) = @_;
@@ -24,19 +36,38 @@ version {{ $dist->version }}:
{{ $dist->license->notice }}
+This README file was generated by {{ $generated_by }}.
+
|;
- my $content = $self->fill_in_string(
- $template,
- { dist => \($self->zilla) },
+ $self->add_file(
+ $self->_file_obj(
+ Dist::Zilla::File::InMemory->new(
+ name => 'README',
+ content => $template,
+ )
+ )
);
- my $file = Dist::Zilla::File::InMemory->new({
- content => $content,
- name => 'README',
- });
+ return;
+}
+
+sub munge_files {
+ my $self = shift;
+
+ my $file = $self->_file_obj;
+
+ $file->content(
+ $self->fill_in_string(
+ $file->content,
+ {
+ dist => \($self->zilla),
+ generated_by => \sprintf("%s v%s",
+ ref($self), $self->VERSION || '(dev)'),
+ }
+ )
+ );
- $self->add_file($file);
return;
}
@@ -47,13 +78,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::Readme - build a README file
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -67,7 +100,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Plugin::RemovePrereqs;
-{
- $Dist::Zilla::Plugin::RemovePrereqs::VERSION = '4.300030';
-}
# ABSTRACT: a plugin to remove gathered prereqs
+$Dist::Zilla::Plugin::RemovePrereqs::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::PrereqSource';
@@ -13,6 +11,24 @@ use Moose::Autobox;
use MooseX::Types::Moose qw(ArrayRef);
use MooseX::Types::Perl qw(ModuleName);
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [RemovePrereqs]
+#pod remove = Foo::Bar
+#pod remove = MRO::Compat
+#pod
+#pod This will remove any prerequisite of any type from any prereq phase. This is
+#pod useful for eliminating incorrectly detected prereqs.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Dist::Zilla plugins:
+#pod L<Prereqs|Dist::Zilla::Plugin::Prereqs>,
+#pod L<AutoPrereqs|Dist::Zilla::Plugin::AutoPrereqs>.
+#pod
+#pod =cut
sub mvp_multivalue_args { qw(modules_to_remove) }
@@ -63,13 +79,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::RemovePrereqs - a plugin to remove gathered prereqs
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -94,7 +112,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,22 @@
package Dist::Zilla::Plugin::ShareDir;
-{
- $Dist::Zilla::Plugin::ShareDir::VERSION = '4.300030';
-}
# ABSTRACT: install a directory's contents as "ShareDir" content
+$Dist::Zilla::Plugin::ShareDir::VERSION = '5.025';
use Moose;
use namespace::autoclean;
use Moose::Autobox;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [ShareDir]
+#pod dir = share
+#pod
+#pod If no C<dir> is provided, the default is F<share>.
+#pod
+#pod =cut
has dir => (
is => 'ro',
@@ -39,13 +47,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::ShareDir - install a directory's contents as "ShareDir" content
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -54,7 +64,7 @@ In your F<dist.ini>:
[ShareDir]
dir = share
- If no C<dir> is provided, the default is F<share>.
+If no C<dir> is provided, the default is F<share>.
=head1 AUTHOR
@@ -62,7 +72,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,21 +1,63 @@
package Dist::Zilla::Plugin::TemplateModule;
-{
- $Dist::Zilla::Plugin::TemplateModule::VERSION = '4.300030';
-}
# ABSTRACT: a simple module-from-template plugin
+$Dist::Zilla::Plugin::TemplateModule::VERSION = '5.025';
use Moose;
with qw(Dist::Zilla::Role::ModuleMaker Dist::Zilla::Role::TextTemplate);
+use Path::Tiny;
+
use namespace::autoclean;
use autodie;
use Sub::Exporter::ForMethods;
-use Data::Section 0.004 # fixed header_re
+use Data::Section 0.200002 # encoding and bytes
{ installer => Sub::Exporter::ForMethods::method_installer },
'-setup';
use Dist::Zilla::File::InMemory;
+#pod =head1 MINTING CONFIGURATION
+#pod
+#pod This module is part of the standard configuration of the default L<Dist::Zilla>
+#pod Minting Profile, and all profiles that don't set a custom ':DefaultModuleMaker'
+#pod so you don't need to normally do anything to configure it.
+#pod
+#pod dzil new Some::Module
+#pod # creates ./Some-Module/*
+#pod # creates ./Some-Module/lib/Some/Module.pm
+#pod
+#pod However, for those who wish to configure this ( or any subclasses ) this is
+#pod presently required:
+#pod
+#pod [TemplateModule / :DefaultModuleMaker]
+#pod ; template = SomeFile.pm
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This is a L<ModuleMaker|Dist::Zilla::Role::ModuleMaker> used for creating new
+#pod Perl modules files when minting a new dist with C<dzil new>. It uses
+#pod L<Text::Template> (via L<Dist::Zilla::Role::TextTemplate>) to render a template
+#pod into a Perl module. The template is given two variables for use in rendering:
+#pod C<$name>, the module name; and C<$dist>, the Dist::Zilla object. The module is
+#pod always created as a file under F<./lib>.
+#pod
+#pod By default, the template looks something like this:
+#pod
+#pod use strict;
+#pod use warnings;
+#pod package {{ $name }};
+#pod
+#pod 1;
+#pod
+#pod =attr template
+#pod
+#pod The C<template> parameter may be given to the plugin to provide a different
+#pod filename, absolute or relative to the build/profile directory.
+#pod
+#pod If this parameter is not specified, this module will use the boilerplate module
+#pod template included in this module.
+#pod
+#pod =cut
has template => (
is => 'ro',
@@ -29,11 +71,7 @@ sub make_module {
my $template;
if ($self->has_template) {
- open my $fh, '<', $self->template;
-
- # Win32
- binmode $fh, ':raw';
- $template = do { local $/; <$fh> };
+ $template = path( $self->template )->slurp_utf8;
} else {
$template = ${ $self->section_data('Module.pm') };
}
@@ -61,13 +99,15 @@ __PACKAGE__->meta->make_immutable;
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::TemplateModule - a simple module-from-template plugin
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -118,7 +158,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,27 @@
package Dist::Zilla::Plugin::TestRelease;
-{
- $Dist::Zilla::Plugin::TestRelease::VERSION = '4.300030';
-}
+# ABSTRACT: extract archive and run tests before releasing the dist
+$Dist::Zilla::Plugin::TestRelease::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::BeforeRelease';
-# ABSTRACT: extract archive and run tests before releasing the dist
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin runs before a release happens. It will extract the to-be-released
+#pod archive into a temporary directory and use the TestRunner plugins to run its
+#pod tests. If the tests fail, the release is aborted and the temporary directory
+#pod is left in place. If the tests pass, the temporary directory is cleaned up and
+#pod the release process continues.
+#pod
+#pod This will set the RELEASE_TESTING and AUTHOR_TESTING env vars while running the
+#pod test suite.
+#pod
+#pod =head1 CREDITS
+#pod
+#pod This plugin was originally contributed by Christopher J. Madsen.
+#pod
+#pod =cut
use File::pushd ();
use Moose::Autobox;
@@ -52,13 +66,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::TestRelease - extract archive and run tests before releasing the dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -81,7 +97,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,9 @@
package Dist::Zilla::Plugin::UploadToCPAN;
-{
- $Dist::Zilla::Plugin::UploadToCPAN::VERSION = '4.300030';
-}
# ABSTRACT: upload the dist to CPAN
+$Dist::Zilla::Plugin::UploadToCPAN::VERSION = '5.025';
use Moose;
with qw(Dist::Zilla::Role::BeforeRelease Dist::Zilla::Role::Releaser);
-use CPAN::Uploader 0.101550; # ua string
-use File::HomeDir;
use File::Spec;
use Moose::Util::TypeConstraints;
use Scalar::Util qw(weaken);
@@ -15,11 +11,36 @@ use Try::Tiny;
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod If loaded, this plugin will allow the F<release> command to upload to the CPAN.
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin looks for configuration in your C<dist.ini> or (more
+#pod likely) C<~/.dzil/config.ini>:
+#pod
+#pod [%PAUSE]
+#pod username = YOUR-PAUSE-ID
+#pod password = YOUR-PAUSE-PASSWORD
+#pod
+#pod If this configuration does not exist, it can read the configuration from
+#pod C<~/.pause>, in the same format that L<cpan-upload> requires:
+#pod
+#pod user YOUR-PAUSE-ID
+#pod password YOUR-PAUSE-PASSWORD
+#pod
+#pod If neither configuration exists, it will prompt you to enter your
+#pod username and password during the BeforeRelease phase. Entering a
+#pod blank username or password will abort the release.
+#pod
+#pod =cut
{
package
Dist::Zilla::Plugin::UploadToCPAN::_Uploader;
- use parent 'CPAN::Uploader';
+ # CPAN::Uploader will be loaded later if used
+ our @ISA = 'CPAN::Uploader';
# Report CPAN::Uploader's version, not ours:
sub _ua_string { CPAN::Uploader->_ua_string }
@@ -54,6 +75,12 @@ sub mvp_aliases {
return { user => 'username' };
}
+#pod =attr username
+#pod
+#pod This option supplies the user's PAUSE username. If not supplied, it will be
+#pod looked for in the user's PAUSE configuration.
+#pod
+#pod =cut
has username => (
is => 'ro',
@@ -68,6 +95,12 @@ has username => (
},
);
+#pod =attr password
+#pod
+#pod This option supplies the user's PAUSE password. If not supplied, it will be
+#pod looked for in the user's PAUSE configuration.
+#pod
+#pod =cut
has password => (
is => 'ro',
@@ -82,15 +115,42 @@ has password => (
},
);
+#pod =attr pause_cfg_file
+#pod
+#pod This is the name of the file containing your pause credentials. It defaults
+#pod F<.pause>. If you give a relative path, it is taken to be relative to
+#pod L</pause_cfg_dir>.
+#pod
+#pod =cut
+
has pause_cfg_file => (
is => 'ro',
isa => 'Str',
lazy => 1,
- default => sub {
- File::Spec->catfile(File::HomeDir->my_home, '.pause');
- },
+ default => sub { '.pause' },
+);
+
+#pod =attr pause_cfg_dir
+#pod
+#pod This is the directory for resolving a relative L</pause_cfg_file>.
+#pod It defaults to C<< File::HomeDir->my_home >>.
+#pod
+#pod =cut
+
+has pause_cfg_dir => (
+ is => 'ro',
+ isa => 'Str',
+ lazy => 1,
+ default => sub { require File::HomeDir; File::HomeDir::->my_home },
);
+#pod =attr pause_cfg
+#pod
+#pod This is a hashref of defaults loaded from F<~/.pause> -- this attribute is
+#pod subject to removal in future versions, as the config-loading behavior in
+#pod CPAN::Uploader is improved.
+#pod
+#pod =cut
has pause_cfg => (
is => 'ro',
@@ -98,20 +158,25 @@ has pause_cfg => (
lazy => 1,
default => sub {
my $self = shift;
- open my $fh, '<', $self->pause_cfg_file
- or return {};
- my %ret;
- # basically taken from the parsing code used by cpan-upload
- # (maybe this should be part of the CPAN::Uploader api?)
- while (<$fh>) {
- next if /^\s*(?:#.*)?$/;
- my ($k, $v) = /^\s*(\w+)\s+(.+)$/;
- $ret{$k} = $v;
- }
- return \%ret;
+ require CPAN::Uploader;
+ my $file = $self->pause_cfg_file;
+ $file = File::Spec->catfile($self->pause_cfg_dir, $file)
+ unless File::Spec->file_name_is_absolute($file);
+ my $cfg = try {
+ CPAN::Uploader->read_config_file($file)
+ } catch {
+ {};
+ };
+ return $cfg;
},
);
+#pod =attr subdir
+#pod
+#pod If given, this specifies a subdirectory under the user's home directory to
+#pod which to upload. Using this option is not recommended.
+#pod
+#pod =cut
has subdir => (
is => 'ro',
@@ -119,6 +184,13 @@ has subdir => (
predicate => 'has_subdir',
);
+#pod =attr upload_uri
+#pod
+#pod If given, this specifies an alternate URI for the PAUSE upload form. By
+#pod default, the default supplied by L<CPAN::Uploader> is used. Using this option
+#pod is not recommended in most cases.
+#pod
+#pod =cut
has upload_uri => (
is => 'ro',
@@ -133,6 +205,10 @@ has uploader => (
default => sub {
my ($self) = @_;
+ # Load the module lazily
+ require CPAN::Uploader;
+ CPAN::Uploader->VERSION('0.103004'); # require HTTPS
+
my $uploader = Dist::Zilla::Plugin::UploadToCPAN::_Uploader->new({
user => $self->username,
password => $self->password,
@@ -177,13 +253,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Plugin::UploadToCPAN - upload the dist to CPAN
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -220,6 +298,17 @@ looked for in the user's PAUSE configuration.
This option supplies the user's PAUSE password. If not supplied, it will be
looked for in the user's PAUSE configuration.
+=head2 pause_cfg_file
+
+This is the name of the file containing your pause credentials. It defaults
+F<.pause>. If you give a relative path, it is taken to be relative to
+L</pause_cfg_dir>.
+
+=head2 pause_cfg_dir
+
+This is the directory for resolving a relative L</pause_cfg_file>.
+It defaults to C<< File::HomeDir->my_home >>.
+
=head2 pause_cfg
This is a hashref of defaults loaded from F<~/.pause> -- this attribute is
@@ -243,7 +332,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::PluginBundle::Basic;
-{
- $Dist::Zilla::PluginBundle::Basic::VERSION = '4.300030';
-}
# ABSTRACT: the basic plugins to maintain and release CPAN dists
+$Dist::Zilla::PluginBundle::Basic::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::PluginBundle::Easy';
@@ -34,17 +32,53 @@ sub configure {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin is meant to be a basic "first step" bundle for using Dist::Zilla.
+#pod It won't munge any of your code, but will generate a F<Makefile.PL> and allows
+#pod easy, reliable releasing of distributions.
+#pod
+#pod It includes the following plugins with their default configuration:
+#pod
+#pod =for :list
+#pod * L<Dist::Zilla::Plugin::GatherDir>
+#pod * L<Dist::Zilla::Plugin::PruneCruft>
+#pod * L<Dist::Zilla::Plugin::ManifestSkip>
+#pod * L<Dist::Zilla::Plugin::MetaYAML>
+#pod * L<Dist::Zilla::Plugin::License>
+#pod * L<Dist::Zilla::Plugin::Readme>
+#pod * L<Dist::Zilla::Plugin::ExtraTests>
+#pod * L<Dist::Zilla::Plugin::ExecDir>
+#pod * L<Dist::Zilla::Plugin::ShareDir>
+#pod * L<Dist::Zilla::Plugin::MakeMaker>
+#pod * L<Dist::Zilla::Plugin::Manifest>
+#pod * L<Dist::Zilla::Plugin::TestRelease>
+#pod * L<Dist::Zilla::Plugin::ConfirmRelease>
+#pod * L<Dist::Zilla::Plugin::UploadToCPAN>
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins: L<@Filter|Dist::Zilla::PluginBundle::Filter>.
+#pod
+#pod Dist::Zilla roles:
+#pod L<PluginBundle|Dist::Zilla::Role::PluginBundle>,
+#pod L<PluginBundle::Easy|Dist::Zilla::Role::PluginBundle::Easy>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::PluginBundle::Basic - the basic plugins to maintain and release CPAN dists
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -128,7 +162,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::PluginBundle::Classic;
-{
- $Dist::Zilla::PluginBundle::Classic::VERSION = '4.300030';
-}
# ABSTRACT: the classic (old) default configuration for Dist::Zilla
+$Dist::Zilla::PluginBundle::Classic::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::PluginBundle::Easy';
@@ -37,17 +35,55 @@ sub configure {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 DESCRIPTION
+#pod
+#pod This bundle is more or less the original configuration bundled with
+#pod Dist::Zilla. More than likely, you'd rather be using
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic> or a more complex bundle. This one
+#pod will muck around with your code by adding C<$VERSION> declarations and will
+#pod mess with you Pod by adding a C<=head1 VERSION> section, but it won't get you a
+#pod lot of more useful features like autoversioning, autoprereqs, or Pod::Weaver.
+#pod
+#pod It includes the following plugins with their default configuration:
+#pod
+#pod =for :list
+#pod * L<Dist::Zilla::Plugin::GatherDir>
+#pod * L<Dist::Zilla::Plugin::PruneCruft>
+#pod * L<Dist::Zilla::Plugin::ManifestSkip>
+#pod * L<Dist::Zilla::Plugin::MetaYAML>
+#pod * L<Dist::Zilla::Plugin::License>
+#pod * L<Dist::Zilla::Plugin::Readme>
+#pod * L<Dist::Zilla::Plugin::PkgVersion>
+#pod * L<Dist::Zilla::Plugin::PodVersion>
+#pod * L<Dist::Zilla::Plugin::PodCoverageTests>
+#pod * L<Dist::Zilla::Plugin::PodSyntaxTests>
+#pod * L<Dist::Zilla::Plugin::ExtraTests>
+#pod * L<Dist::Zilla::Plugin::ExecDir>
+#pod * L<Dist::Zilla::Plugin::ShareDir>
+#pod * L<Dist::Zilla::Plugin::MakeMaker>
+#pod * L<Dist::Zilla::Plugin::Manifest>
+#pod * L<Dist::Zilla::Plugin::ConfirmRelease>
+#pod * L<Dist::Zilla::Plugin::UploadToCPAN>
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::PluginBundle::Classic - the classic (old) default configuration for Dist::Zilla
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -142,7 +178,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::PluginBundle::FakeClassic;
-{
- $Dist::Zilla::PluginBundle::FakeClassic::VERSION = '4.300030';
-}
# ABSTRACT: build something more or less like a "classic" CPAN dist
+$Dist::Zilla::PluginBundle::FakeClassic::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::PluginBundle::Classic';
@@ -36,13 +34,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::PluginBundle::FakeClassic - build something more or less like a "classic" CPAN dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -50,7 +50,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,16 +1,43 @@
package Dist::Zilla::PluginBundle::Filter;
-{
- $Dist::Zilla::PluginBundle::Filter::VERSION = '4.300030';
-}
# ABSTRACT: use another bundle, with some plugins removed
+$Dist::Zilla::PluginBundle::Filter::VERSION = '5.025';
use Moose;
use Moose::Autobox;
with 'Dist::Zilla::Role::PluginBundle';
use namespace::autoclean;
+use Class::Load qw(try_load_class);
use Dist::Zilla::Util;
+#pod =head1 SYNOPSIS
+#pod
+#pod In your F<dist.ini>:
+#pod
+#pod [@Filter]
+#pod -bundle = @Basic
+#pod -remove = ShareDir
+#pod -remove = UploadToCPAN
+#pod option = for_basic
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This plugin bundle actually wraps and modifies another plugin bundle. It
+#pod includes all the configuration for the bundle named in the C<-bundle> attribute,
+#pod but removes all the entries whose package is given in the C<-remove> attributes.
+#pod
+#pod Options not prefixed with C<-> will be passed to the bundle to be filtered.
+#pod
+#pod B<NOTE:> When you filter a bundle you B<SHOULD NOT> include it directly in
+#pod your C<dist.ini> file. This plugin will take care of including it for you.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins: L<@Basic|Dist::Zilla::PluginBundle::Basic>.
+#pod
+#pod Dist::Zilla roles: L<PluginBundle|Dist::Zilla::Role::PluginBundle>.
+#pod
+#pod =cut
sub mvp_multivalue_args { qw(remove -remove) }
@@ -33,18 +60,21 @@ sub bundle_config {
Carp::croak("no bundle given for bundle filter")
unless my $bundle = $config->{filter}->{bundle};
- $bundle = Dist::Zilla::Util->expand_config_package_name($bundle);
+ my $pkg = Dist::Zilla::Util->expand_config_package_name($bundle);
my $load_opts = {};
if( my $v = $config->{filter}->{version} ){
$load_opts->{'-version'} = $v;
}
- Class::MOP::load_class($bundle, $load_opts);
+ unless (try_load_class($pkg, $load_opts)) {
+ # XXX Naughty! -- rjbs, 2013-07-23
+ Config::MVP::Section->missing_package($pkg, $bundle);
+ }
- my @plugins = $bundle->bundle_config({
+ my @plugins = $pkg->bundle_config({
name => $section->{name}, # not 100% sure about this -- rjbs, 2010-03-06
- package => $bundle,
+ package => $pkg,
payload => $config->{bundle} || {},
});
@@ -67,13 +97,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::PluginBundle::Filter - use another bundle, with some plugins removed
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -93,6 +125,9 @@ but removes all the entries whose package is given in the C<-remove> attributes.
Options not prefixed with C<-> will be passed to the bundle to be filtered.
+B<NOTE:> When you filter a bundle you B<SHOULD NOT> include it directly in
+your C<dist.ini> file. This plugin will take care of including it for you.
+
=head1 SEE ALSO
Core Dist::Zilla plugins: L<@Basic|Dist::Zilla::PluginBundle::Basic>.
@@ -105,7 +140,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,20 +1,39 @@
package Dist::Zilla::Prereqs;
-{
- $Dist::Zilla::Prereqs::VERSION = '4.300030';
-}
# ABSTRACT: the prerequisites of a Dist::Zilla distribution
+$Dist::Zilla::Prereqs::VERSION = '5.025';
use Moose;
use Moose::Autobox;
use MooseX::Types::Moose qw(Bool HashRef);
use CPAN::Meta::Prereqs 2.120630; # add_string_requirement
-use Hash::Merge::Simple ();
use Path::Class ();
use String::RewritePrefix;
use CPAN::Meta::Requirements 2.121; # requirements_for_module
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Dist::Zilla::Prereqs is a subcomponent of Dist::Zilla. The C<prereqs>
+#pod attribute on your Dist::Zilla object is a Dist::Zilla::Prereqs object, and is
+#pod responsible for keeping track of the distribution's prerequisites.
+#pod
+#pod In fact, a Dist::Zilla::Prereqs object is just a thin layer over a
+#pod L<CPAN::Meta::Prereqs> object, stored in the C<cpan_meta_prereqs> attribute.
+#pod
+#pod Almost everything this object does is proxied to the CPAN::Meta::Prereqs
+#pod object, so you should really read how I<that> works.
+#pod
+#pod Dist::Zilla::Prereqs proxies the following methods to the CPAN::Meta::Prereqs
+#pod object:
+#pod
+#pod =for :list
+#pod * finalize
+#pod * is_finalized
+#pod * requirements_for
+#pod * as_string_hash
+#pod
+#pod =cut
has cpan_meta_prereqs => (
is => 'ro',
@@ -29,6 +48,35 @@ has cpan_meta_prereqs => (
) ],
);
+# storing this is sort of gross, but MakeMaker winds up needing the same data
+# anyway. -- xdg, 2013-10-22
+has merged_requires => (
+ is => 'ro',
+ isa => 'CPAN::Meta::Requirements',
+ init_arg => undef,
+ default => sub { CPAN::Meta::Requirements->new },
+);
+
+#pod =method register_prereqs
+#pod
+#pod $prereqs->register_prereqs(%prereqs);
+#pod
+#pod $prereqs->register_prereqs(\%arg, %prereqs);
+#pod
+#pod This method adds new minimums to the prereqs object. If a hashref is the first
+#pod arg, it may have entries for C<phase> and C<type> to indicate what kind of
+#pod prereqs are being registered. (For more information on phase and type, see
+#pod L<CPAN::Meta::Spec>.) For example, you might say:
+#pod
+#pod $prereqs->register_prereqs(
+#pod { phase => 'test', type => 'recommends' },
+#pod 'Test::Foo' => '1.23',
+#pod 'XML::YZZY' => '2.01',
+#pod );
+#pod
+#pod If not given, phase and type default to runtime and requires, respectively.
+#pod
+#pod =cut
sub register_prereqs {
my $self = shift;
@@ -47,6 +95,43 @@ sub register_prereqs {
return;
}
+before 'finalize' => sub {
+ my ($self) = @_;
+ $self->sync_runtime_build_test_requires;
+};
+
+
+# this avoids a long-standing CPAN.pm bug that incorrectly merges runtime and
+# "build" (build+test) requirements by ensuring requirements stay unified
+# across all three phases
+sub sync_runtime_build_test_requires {
+ my $self = shift;
+
+ # first pass: generated merged requirements
+ for my $phase ( qw/runtime build test/ ) {
+ my $req = $self->requirements_for($phase, 'requires');
+ $self->merged_requires->add_requirements( $req );
+ };
+
+ # second pass: update from merged requirements
+ for my $phase ( qw/runtime build test/ ) {
+ my $req = $self->requirements_for($phase, 'requires');
+ for my $mod ( $req->required_modules ) {
+ $req->clear_requirement( $mod );
+ $req->add_string_requirement(
+ $mod => $self->merged_requires->requirements_for_module($mod)
+ );
+ }
+ }
+
+ # and add configure requires for other consumers expecting this to be a full
+ # merge across all phases required by users
+ $self->merged_requires->add_requirements(
+ $self->requirements_for('configure', 'requires'));
+
+ return;
+}
+
__PACKAGE__->meta->make_immutable;
1;
@@ -54,13 +139,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Prereqs - the prerequisites of a Dist::Zilla distribution
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -124,7 +211,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,20 @@
package Dist::Zilla::Role::AfterBuild;
-{
- $Dist::Zilla::Role::AfterBuild::VERSION = '4.300030';
-}
# ABSTRACT: something that runs after building is mostly complete
+$Dist::Zilla::Role::AfterBuild::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<after_build> method called once all
+#pod the files have been written out. It is passed a hashref with the following
+#pod data:
+#pod
+#pod build_root - the directory in which the dist was built
+#pod
+#pod =cut
requires 'after_build';
@@ -17,13 +24,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::AfterBuild - something that runs after building is mostly complete
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -39,7 +48,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,20 @@
package Dist::Zilla::Role::AfterMint;
-{
- $Dist::Zilla::Role::AfterMint::VERSION = '4.300030';
-}
# ABSTRACT: something that runs after minting is mostly complete
+$Dist::Zilla::Role::AfterMint::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<after_mint> method called once all
+#pod the files have been written out. It is passed a hashref with the following
+#pod data:
+#pod
+#pod mint_root - the directory in which the dist was minted
+#pod
+#pod =cut
requires 'after_mint';
@@ -17,13 +24,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::AfterMint - something that runs after minting is mostly complete
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -39,7 +48,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,18 @@
package Dist::Zilla::Role::AfterRelease;
-{
- $Dist::Zilla::Role::AfterRelease::VERSION = '4.300030';
-}
# ABSTRACT: something that runs after release is mostly complete
+$Dist::Zilla::Role::AfterRelease::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<after_release> method called once
+#pod the release is done. The archive filename, if one was built, is passed as the
+#pod sole argument.
+#pod
+#pod =cut
requires 'after_release';
@@ -17,18 +22,21 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::AfterRelease - something that runs after release is mostly complete
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
-Plugins implementing this role have their C<after_release> method called
-once the release is done.
+Plugins implementing this role have their C<after_release> method called once
+the release is done. The archive filename, if one was built, is passed as the
+sole argument.
=head1 AUTHOR
@@ -36,7 +44,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
package Dist::Zilla::Role::BeforeArchive;
-{
- $Dist::Zilla::Role::BeforeArchive::VERSION = '4.300030';
-}
# ABSTRACT: something that runs before the archive file is built
+$Dist::Zilla::Role::BeforeArchive::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<before_archive> method
+#pod called before the archive is actually built.
+#pod
+#pod =cut
requires 'before_archive';
@@ -17,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::BeforeArchive - something that runs before the archive file is built
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
package Dist::Zilla::Role::BeforeBuild;
-{
- $Dist::Zilla::Role::BeforeBuild::VERSION = '4.300030';
-}
# ABSTRACT: something that runs before building really begins
+$Dist::Zilla::Role::BeforeBuild::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<before_build> method called
+#pod before any other plugins are consulted.
+#pod
+#pod =cut
requires 'before_build';
@@ -17,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::BeforeBuild - something that runs before building really begins
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
package Dist::Zilla::Role::BeforeMint;
-{
- $Dist::Zilla::Role::BeforeMint::VERSION = '4.300030';
-}
# ABSTRACT: something that runs before minting really begins
+$Dist::Zilla::Role::BeforeMint::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<before_mint> method called
+#pod before any other plugins are consulted.
+#pod
+#pod =cut
requires 'before_mint';
@@ -17,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::BeforeMint - something that runs before minting really begins
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
package Dist::Zilla::Role::BeforeRelease;
-{
- $Dist::Zilla::Role::BeforeRelease::VERSION = '4.300030';
-}
# ABSTRACT: something that runs before release really begins
+$Dist::Zilla::Role::BeforeRelease::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<before_release> method
+#pod called before the release is actually done.
+#pod
+#pod =cut
requires 'before_release';
@@ -17,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::BeforeRelease - something that runs before release really begins
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,7 +1,6 @@
package Dist::Zilla::Role::BuildPL;
-{
- $Dist::Zilla::Role::BuildPL::VERSION = '4.300030';
-}
+# ABSTRACT: Common ground for Build.PL based builders
+$Dist::Zilla::Role::BuildPL::VERSION = '5.025';
use Moose::Role;
with qw(
@@ -12,20 +11,45 @@ with qw(
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This role is a helper for Build.PL based installers. It implements the
+#pod L<Dist::Zilla::Plugin::BuildRunner> and L<Dist::Zilla::Plugin::TestRunner>
+#pod roles, and requires you to implement the L<Dist::Zilla::Plugin::PrereqSource>
+#pod and L<Dist::Zilla::Plugin::InstallTool> roles yourself.
+#pod
+#pod =cut
+
sub build {
my $self = shift;
+ return
+ if -e 'Build' and (stat 'Build.PL')[9] <= (stat 'Build')[9];
+
+ $self->log_debug("running $^X Build.PL");
system $^X, 'Build.PL' and die "error with Build.PL\n";
+
+ $self->log_debug("running $^X Build");
system $^X, 'Build' and die "error running $^X Build\n";
return;
}
sub test {
- my ($self, $target) = @_;
+ my ($self, $target, $arg) = @_;
$self->build;
+
+ my $job_count = $arg && exists $arg->{jobs}
+ ? $arg->{jobs}
+ : $self->default_jobs;
+ my $jobs = "j$job_count";
+ my $ho = "HARNESS_OPTIONS";
+ local $ENV{$ho} = $ENV{$ho} ? "$ENV{$ho}:$jobs" : $jobs;
+
my @testing = $self->zilla->logger->get_debug ? '--verbose' : ();
+
+ $self->log_debug('running ' . join(' ', $^X, 'Build', 'test', @testing));
system $^X, 'Build', 'test', @testing and die "error running $^X Build test\n";
return;
@@ -33,23 +57,26 @@ sub test {
1;
-# ABSTRACT: Common ground for Build.PL based builders
-
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::BuildPL - Common ground for Build.PL based builders
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
-This role is a helper for Build.PL based installers. It implements the L<Dist::Zilla::Plugin::BuildRunner> and L<Dist::Zilla::Plugin::TestRunner> roles, and requires you to implement the L<Dist::Zilla::Plugin::PrereqSource> and L<Dist::Zilla::Plugin::InstallTool> roles yourself.
+This role is a helper for Build.PL based installers. It implements the
+L<Dist::Zilla::Plugin::BuildRunner> and L<Dist::Zilla::Plugin::TestRunner>
+roles, and requires you to implement the L<Dist::Zilla::Plugin::PrereqSource>
+and L<Dist::Zilla::Plugin::InstallTool> roles yourself.
=head1 AUTHOR
@@ -57,7 +84,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,23 @@
package Dist::Zilla::Role::BuildRunner;
-{
- $Dist::Zilla::Role::BuildRunner::VERSION = '4.300030';
-}
# ABSTRACT: something used as a delegating agent during 'dzil run'
+$Dist::Zilla::Role::BuildRunner::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<build> method called during
+#pod C<dzil run>. It's passed the root directory of the build test dir.
+#pod
+#pod =head1 REQUIRED METHODS
+#pod
+#pod =head2 build
+#pod
+#pod This method will throw an exception on failure.
+#pod
+#pod =cut
requires 'build';
@@ -17,13 +27,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::BuildRunner - something used as a delegating agent during 'dzil run'
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -42,7 +54,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::Chrome;
-{
- $Dist::Zilla::Role::Chrome::VERSION = '4.300030';
-}
# ABSTRACT: something that provides a user interface for Dist::Zilla
+$Dist::Zilla::Role::Chrome::VERSION = '5.025';
use Moose::Role;
use namespace::autoclean;
@@ -19,13 +17,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::Chrome - something that provides a user interface for Dist::Zilla
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -33,7 +33,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::ConfigDumper;
-{
- $Dist::Zilla::Role::ConfigDumper::VERSION = '4.300030';
-}
-# ABSTRACT: something that can dump its (public, simplified) configuraiton
+# ABSTRACT: something that can dump its (public, simplified) configuration
+$Dist::Zilla::Role::ConfigDumper::VERSION = '5.025';
use Moose::Role;
use namespace::autoclean;
@@ -15,13 +13,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
-Dist::Zilla::Role::ConfigDumper - something that can dump its (public, simplified) configuraiton
+Dist::Zilla::Role::ConfigDumper - something that can dump its (public, simplified) configuration
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -29,7 +29,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,54 @@
+package Dist::Zilla::Role::EncodingProvider;
+# ABSTRACT: something that sets a files' encoding
+$Dist::Zilla::Role::EncodingProvider::VERSION = '5.025';
+use Moose::Role;
+with 'Dist::Zilla::Role::Plugin';
+
+use namespace::autoclean;
+
+#pod =head1 DESCRIPTION
+#pod
+#pod EncodingProvider plugins do their work after files are gathered, but before
+#pod they're munged. They're meant to set the C<encoding> on files.
+#pod
+#pod The method C<set_file_encodings> is called with no arguments.
+#pod
+#pod =cut
+
+requires 'set_file_encodings';
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Role::EncodingProvider - something that sets a files' encoding
+
+=head1 VERSION
+
+version 5.025
+
+=head1 DESCRIPTION
+
+EncodingProvider plugins do their work after files are gathered, but before
+they're munged. They're meant to set the C<encoding> on files.
+
+The method C<set_file_encodings> is called with no arguments.
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::ExecFiles;
-{
- $Dist::Zilla::Role::ExecFiles::VERSION = '4.300030';
-}
# ABSTRACT: something that finds files to install as executables
+$Dist::Zilla::Role::ExecFiles::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::FileFinder';
@@ -23,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::ExecFiles - something that finds files to install as executables
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -37,7 +37,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,24 @@
package Dist::Zilla::Role::File;
-{
- $Dist::Zilla::Role::File::VERSION = '4.300030';
-}
# ABSTRACT: something that can act like a file
+$Dist::Zilla::Role::File::VERSION = '5.025';
use Moose::Role;
use Moose::Util::TypeConstraints;
+use Try::Tiny;
use namespace::autoclean;
+with 'Dist::Zilla::Role::StubBuild';
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This role describes a file that may be written into the shipped distribution.
+#pod
+#pod =attr name
+#pod
+#pod This is the name of the file to be written out.
+#pod
+#pod =cut
has name => (
is => 'rw',
@@ -16,11 +26,68 @@ has name => (
required => 1,
);
+#pod =attr added_by
+#pod
+#pod This is a list of strings describing when and why the file was added
+#pod to the distribution and when it was updated (its content, filename, or other attributes). It will
+#pod generally be updated by a plugin implementing the
+#pod L<FileMunger|Dist::Zilla::Role::FileMunger> role. Its accessor will return
+#pod the list of strings, concatenated with C<'; '>.
+#pod
+#pod =cut
has added_by => (
- is => 'ro',
+ isa => 'ArrayRef[Str]',
+ lazy => 1,
+ default => sub { [] },
+ traits => ['Array'],
+ init_arg => undef,
+ handles => {
+ _push_added_by => 'push',
+ added_by => [ join => '; ' ],
+ },
);
+around name => sub {
+ my $orig = shift;
+ my $self = shift;
+ if (@_) {
+ my ($pkg, $line) = $self->_caller_of('name');
+ $self->_push_added_by(sprintf("filename set by %s (%s line %s)", $self->_caller_plugin_name, $pkg, $line));
+ }
+ return $self->$orig(@_);
+};
+
+sub _caller_of {
+ my ($self, $function) = @_;
+
+ for (my $level = 1; $level < 50; ++$level)
+ {
+ my @frame = caller($level);
+ last if not defined $frame[0];
+ return ( (caller($level))[0,2] ) if $frame[3] =~ m/::${function}$/;
+ }
+ return 'unknown', '0';
+}
+
+sub _caller_plugin_name {
+ my $self = shift;
+
+ for (my $level = 1; $level < 50; ++$level)
+ {
+ my @frame = caller($level);
+ last if not defined $frame[0];
+ return $1 if $frame[0] =~ m/^Dist::Zilla::Plugin::(.+)$/;
+ }
+ return 'unknown';
+}
+
+#pod =attr mode
+#pod
+#pod This is the mode with which the file should be written out. It's an integer
+#pod with the usual C<chmod> semantics. It defaults to 0644.
+#pod
+#pod =cut
my $safe_file_mode = subtype(
as 'Int',
@@ -34,7 +101,59 @@ has mode => (
default => 0644,
);
+requires 'encoding';
requires 'content';
+requires 'encoded_content';
+
+#pod =method is_bytes
+#pod
+#pod Returns true if the C<encoding> is bytes. When true, accessing
+#pod C<content> will be an error.
+#pod
+#pod =cut
+
+sub is_bytes {
+ my ($self) = @_;
+ return $self->encoding eq 'bytes';
+}
+
+sub _encode {
+ my ($self, $text) = @_;
+ my $enc = $self->encoding;
+ if ( $self->is_bytes ) {
+ return $text; # XXX hope you were right that it really was bytes
+ }
+ else {
+ require Encode;
+ my $bytes =
+ try { Encode::encode($enc, $text, Encode::FB_CROAK()) }
+ catch { $self->_throw("encode $enc" => $_) };
+ return $bytes;
+ }
+}
+
+sub _decode {
+ my ($self, $bytes) = @_;
+ my $enc = $self->encoding;
+ if ( $self->is_bytes ) {
+ $self->_throw(decode => "Can't decode text from 'bytes' encoding");
+ }
+ else {
+ require Encode;
+ my $text =
+ try { Encode::decode($enc, $bytes, Encode::FB_CROAK()) }
+ catch { $self->_throw("decode $enc" => $_) };
+ return $text;
+ }
+}
+
+sub _throw {
+ my ($self, $op, $msg) = @_;
+ my ($name, $added_by) = map {; $self->$_ } qw/name added_by/;
+ confess(
+ "Could not $op $name; $added_by; error was: $msg; maybe you need the [Encoding] plugin to specify an encoding"
+ );
+}
1;
@@ -42,13 +161,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::File - something that can act like a file
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -62,22 +183,31 @@ This is the name of the file to be written out.
=head2 added_by
-This is a string describing when and why the file was added to the
-distribution. It will generally be set by a plugin implementing the
-L<FileInjector|Dist::Zilla::Role::FileInjector> role.
+This is a list of strings describing when and why the file was added
+to the distribution and when it was updated (its content, filename, or other attributes). It will
+generally be updated by a plugin implementing the
+L<FileMunger|Dist::Zilla::Role::FileMunger> role. Its accessor will return
+the list of strings, concatenated with C<'; '>.
=head2 mode
This is the mode with which the file should be written out. It's an integer
with the usual C<chmod> semantics. It defaults to 0644.
+=head1 METHODS
+
+=head2 is_bytes
+
+Returns true if the C<encoding> is bytes. When true, accessing
+C<content> will be an error.
+
=head1 AUTHOR
Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::FileFinder;
-{
- $Dist::Zilla::Role::FileFinder::VERSION = '4.300030';
-}
# ABSTRACT: something that finds files within the distribution
+$Dist::Zilla::Role::FileFinder::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
@@ -10,6 +8,37 @@ use namespace::autoclean;
use Moose::Autobox;
+#pod =head1 DESCRIPTION
+#pod
+#pod A FileFinder plugin locates files within the distribution. This role exists so
+#pod that sets of files can be easily described in one configuration section and
+#pod then used by one or more other plugin.
+#pod
+#pod Plugins implementing this role must provide a C<find_files> method which will
+#pod be called with no arguments and must return an arrayref of files. (This
+#pod arrayref should not be re-used, as it may be altered once returned.)
+#pod
+#pod For example, imagine a simple glob-like FileFinder that expects configuration
+#pod like this:
+#pod
+#pod [Glob / RootModules]
+#pod glob = *.pm
+#pod
+#pod This sets up a FileFinder named "RootModules" which will contain all F<pm>
+#pod files in the root directory.
+#pod
+#pod Another plugin that knows how to use FileFinder plugins might be configured
+#pod like this:
+#pod
+#pod [ModuleRelocator]
+#pod finder = RootModules
+#pod relocate_to = attic
+#pod
+#pod Finders may operate on any rules they like, checking file size, content, name,
+#pod or other properties. They should re-perform their "finding" on each call to
+#pod C<find_files> as the files in the distribution may have changed.
+#pod
+#pod =cut
requires 'find_files';
@@ -19,13 +48,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::FileFinder - something that finds files within the distribution
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -63,7 +94,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,25 +1,107 @@
package Dist::Zilla::Role::FileFinderUser;
-{
- $Dist::Zilla::Role::FileFinderUser::VERSION = '4.300030';
-}
# ABSTRACT: something that uses FileFinder plugins
+$Dist::Zilla::Role::FileFinderUser::VERSION = '5.025';
use MooseX::Role::Parameterized;
use namespace::autoclean;
-
+#pod =head1 DESCRIPTION
+#pod
+#pod This role enables you to search for files in the dist. This makes it easy to find specific
+#pod files and have the code factored out to common methods.
+#pod
+#pod Here's an example of a finder: ( taken from AutoPrereqs )
+#pod
+#pod with 'Dist::Zilla::Role::FileFinderUser' => {
+#pod default_finders => [ ':InstallModules', ':ExecFiles' ],
+#pod };
+#pod
+#pod Then you use it in your code like this:
+#pod
+#pod foreach my $file ( $self->found_files ) {
+#pod # $file is an object! Look at L<Dist::Zilla::Role::File>
+#pod }
+#pod
+#pod =cut
+
+#pod =attr finder_arg_names
+#pod
+#pod Define the name of the attribute which will hold this finder. Be sure to specify different names
+#pod if you have multiple finders!
+#pod
+#pod This is an ArrayRef.
+#pod
+#pod Default: [ qw( finder ) ]
+#pod
+#pod =cut
parameter finder_arg_names => (
isa => 'ArrayRef',
default => sub { [ 'finder' ] },
);
+#pod =attr default_finders
+#pod
+#pod This attribute is an arrayref of plugin names for the default plugins the
+#pod consuming plugin will use as finders.
+#pod
+#pod Example: C<< [ qw( :InstallModules :ExecFiles ) ] >>
+#pod
+#pod The default finders are:
+#pod
+#pod =begin :list
+#pod
+#pod = :InstallModules
+#pod
+#pod Searches your lib/ directory for pm/pod files
+#pod
+#pod = :IncModules
+#pod
+#pod Searches your inc/ directory for pm files
+#pod
+#pod = :MainModule
+#pod
+#pod Finds the C<main_module> of your dist
+#pod
+#pod = :TestFiles
+#pod
+#pod Searches your t/ directory and lists the files in it.
+#pod
+#pod = :ExecFiles
+#pod
+#pod Searches your distribution for executable files. Hint: Use the
+#pod L<Dist::Zilla::Plugin::ExecDir> plugin to mark those files as executables.
+#pod
+#pod = :ShareFiles
+#pod
+#pod Searches your ShareDir directory and lists the files in it.
+#pod Hint: Use the L<Dist::Zilla::Plugin::ShareDir> plugin to set up the sharedir.
+#pod
+#pod = :All
+#pod
+#pod Returns all files in the distribution.
+#pod
+#pod = :None
+#pod
+#pod Returns nothing.
+#pod
+#pod =end :list
+#pod
+#pod =cut
parameter default_finders => (
isa => 'ArrayRef',
required => 1,
);
+#pod =attr method
+#pod
+#pod This will be the name of the subroutine installed in your package for this
+#pod finder. Be sure to specify different names if you have multiple finders!
+#pod
+#pod Default: found_files
+#pod
+#pod =cut
parameter method => (
isa => 'Str',
@@ -79,13 +161,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::FileFinderUser - something that uses FileFinder plugins
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -118,7 +202,7 @@ Default: [ qw( finder ) ]
=head2 default_finders
This attribute is an arrayref of plugin names for the default plugins the
-consuming plugin will use as finder.s
+consuming plugin will use as finders.
Example: C<< [ qw( :InstallModules :ExecFiles ) ] >>
@@ -150,7 +234,15 @@ L<Dist::Zilla::Plugin::ExecDir> plugin to mark those files as executables.
=item :ShareFiles
Searches your ShareDir directory and lists the files in it.
-Hint: Use the L<Dist::Zilla::Plugin::ShareDir> plugin to setup the sharedir.
+Hint: Use the L<Dist::Zilla::Plugin::ShareDir> plugin to set up the sharedir.
+
+=item :All
+
+Returns all files in the distribution.
+
+=item :None
+
+Returns nothing.
=back
@@ -167,7 +259,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::FileGatherer;
-{
- $Dist::Zilla::Role::FileGatherer::VERSION = '4.300030';
-}
# ABSTRACT: something that gathers files into the distribution
+$Dist::Zilla::Role::FileGatherer::VERSION = '5.025';
use Moose::Role;
with qw/Dist::Zilla::Role::Plugin Dist::Zilla::Role::FileInjector/;
@@ -10,6 +8,17 @@ use namespace::autoclean;
use Moose::Autobox;
+#pod =head1 DESCRIPTION
+#pod
+#pod A FileGatherer plugin is a special sort of
+#pod L<FileInjector|Dist::Zilla::Role::FileInjector> that runs early in the build
+#pod cycle, finding files to include in the distribution. It is expected to call
+#pod its C<add_file> method to add one or more files to inclusion.
+#pod
+#pod Plugins implementing FileGatherer must provide a C<gather_files> method, which
+#pod will be called during the build process.
+#pod
+#pod =cut
requires 'gather_files';
@@ -19,13 +28,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::FileGatherer - something that gathers files into the distribution
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -43,7 +54,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,21 +1,32 @@
package Dist::Zilla::Role::FileInjector;
-{
- $Dist::Zilla::Role::FileInjector::VERSION = '4.300030';
-}
# ABSTRACT: something that can add files to the distribution
+$Dist::Zilla::Role::FileInjector::VERSION = '5.025';
use Moose::Role;
use namespace::autoclean;
use Moose::Autobox;
+#pod =head1 DESCRIPTION
+#pod
+#pod This role should be implemented by any plugin that plans to add files into the
+#pod distribution. It provides one method (C<L</add_file>>, documented below),
+#pod which adds a file to the distribution, noting the place of addition.
+#pod
+#pod =method add_file
+#pod
+#pod $plugin->add_file($dzil_file);
+#pod
+#pod This adds a file to the distribution, setting the file's C<added_by> attribute
+#pod as it does so.
+#pod
+#pod =cut
sub add_file {
my ($self, $file) = @_;
my ($pkg, undef, $line) = caller;
- $file->meta->get_attribute('added_by')->set_value(
- $file,
+ $file->_set_added_by(
sprintf("%s (%s line %s)", $self->plugin_name, $pkg, $line),
);
@@ -29,13 +40,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::FileInjector - something that can add files to the distribution
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -58,7 +71,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::FileMunger;
-{
- $Dist::Zilla::Role::FileMunger::VERSION = '4.300030';
-}
# ABSTRACT: something that alters a file's destination or content
+$Dist::Zilla::Role::FileMunger::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
@@ -10,6 +8,22 @@ use namespace::autoclean;
use Moose::Autobox;
+#pod =head1 DESCRIPTION
+#pod
+#pod A FileMunger has an opportunity to mess around with each file that will be
+#pod included in the distribution. Each FileMunger's C<munge_files> method is
+#pod called once. By default, this method will just call the C<munge_file> method
+#pod (note the missing terminal 's') once for each file, excluding files with an
+#pod encoding attribute of 'bytes'.
+#pod
+#pod The C<munge_file> method is expected to change attributes about the file before
+#pod it is written out to the built distribution.
+#pod
+#pod If you want to modify all files (including ones with an encoding of 'bytes') or
+#pod want to select a more limited set of files, you can provide your own
+#pod C<munge_files> method.
+#pod
+#pod =cut
sub munge_files {
my ($self) = @_;
@@ -17,7 +31,14 @@ sub munge_files {
$self->log_fatal("no munge_file behavior implemented!")
unless $self->can('munge_file');
- $self->munge_file($_) for $self->zilla->files->flatten;
+ for my $file ($self->zilla->files->flatten) {
+ if ($file->is_bytes) {
+ $self->log_debug($file->name . " has 'bytes' encoding, skipping...");
+ next;
+ }
+
+ $self->munge_file($file);
+ }
}
1;
@@ -26,23 +47,30 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::FileMunger - something that alters a file's destination or content
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
A FileMunger has an opportunity to mess around with each file that will be
included in the distribution. Each FileMunger's C<munge_files> method is
-called once. By default, this method will just call the C<munge_file> (note
-the missing terminal 's') once for each file.
+called once. By default, this method will just call the C<munge_file> method
+(note the missing terminal 's') once for each file, excluding files with an
+encoding attribute of 'bytes'.
+
+The C<munge_file> method is expected to change attributes about the file before
+it is written out to the built distribution.
-This method is expected to change attributes about the file before it is
-written out to the built distribution.
+If you want to modify all files (including ones with an encoding of 'bytes') or
+want to select a more limited set of files, you can provide your own
+C<munge_files> method.
=head1 AUTHOR
@@ -50,7 +78,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,19 @@
package Dist::Zilla::Role::FilePruner;
-{
- $Dist::Zilla::Role::FilePruner::VERSION = '4.300030';
-}
# ABSTRACT: something that removes found files from the distribution
+$Dist::Zilla::Role::FilePruner::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing FilePruner have their C<prune_files> method called once
+#pod all the L<FileGatherer|Dist::Zilla::Role::FileGatherer> plugins have been
+#pod called. They are expected to (optionally) remove files from the list of files
+#pod to be included in the distribution.
+#pod
+#pod =cut
requires 'prune_files';
@@ -17,13 +23,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::FilePruner - something that removes found files from the distribution
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -38,7 +46,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::InstallTool;
-{
- $Dist::Zilla::Role::InstallTool::VERSION = '4.300030';
-}
# ABSTRACT: something that creates an install program for a dist
+$Dist::Zilla::Role::InstallTool::VERSION = '5.025';
use Moose::Role;
with qw(
Dist::Zilla::Role::Plugin
@@ -13,6 +11,16 @@ use namespace::autoclean;
use Moose::Autobox;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing InstallTool have their C<setup_installer> method called to
+#pod inject files after all other file injection and munging has taken place.
+#pod They're expected to produce files needed to make the distribution
+#pod installable, like F<Makefile.PL> or F<Build.PL> and add them with the
+#pod C<add_file> method provided by L<Dist::Zilla::Role::FileInjector>, which is
+#pod also composed by this role.
+#pod
+#pod =cut
requires 'setup_installer';
@@ -22,13 +30,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::InstallTool - something that creates an install program for a dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -45,7 +55,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,29 @@
package Dist::Zilla::Role::LicenseProvider;
-{
- $Dist::Zilla::Role::LicenseProvider::VERSION = '4.300030';
-}
# ABSTRACT: something that provides a license for the dist
+$Dist::Zilla::Role::LicenseProvider::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role must provide a C<provide_license> method that
+#pod will be called when setting the dist's license.
+#pod
+#pod If a LicenseProvider offers a license but one has already been set, an
+#pod exception will be raised. If C<provides_license> returns undef, it will be
+#pod ignored.
+#pod
+#pod =head1 REQUIRED METHODS
+#pod
+#pod =head2 C<< provide_license($copyright_holder, $copyright_year) >>
+#pod
+#pod Generate license object. Returned object should be an instance of
+#pod L<Software::License>.
+#pod
+#pod Plugins are responsible for injecting C<$copyright_holder> and
+#pod C<$copyright_year> arguments into the license if these arguments are defined.
+#pod
+#pod =cut
requires 'provide_license';
@@ -16,13 +34,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::LicenseProvider - something that provides a license for the dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -49,7 +69,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,29 +1,38 @@
package Dist::Zilla::Role::MetaProvider;
-{
- $Dist::Zilla::Role::MetaProvider::VERSION = '4.300030';
-}
# ABSTRACT: something that provides metadata (for META.yml/json)
+$Dist::Zilla::Role::MetaProvider::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod This role provides data to merge into the distribution metadata.
+#pod
+#pod =method metadata
+#pod
+#pod This method (which must be provided by classes implementing this role)
+#pod returns a hashref of data to be (deeply) merged together with pre-existing
+#pod metadata.
+#pod
+#pod =cut
requires 'metadata';
1;
-__END__
-
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::MetaProvider - something that provides metadata (for META.yml/json)
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -52,9 +61,22 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
+
+__END__
+
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins implementing this role:
+#pod L<ConfigMeta|Dist::Zilla::Plugin::ConfigMeta>.
+#pod L<MetaNoIndex|Dist::Zilla::Plugin::MetaNoIndex>.
+#pod
+#pod Dist::Zilla plugins on the CPAN:
+#pod L<GithubMeta|Dist::Zilla::Plugin::GithubMeta>...
+#pod
+#pod =cut
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::MintingProfile::ShareDir;
-{
- $Dist::Zilla::Role::MintingProfile::ShareDir::VERSION = '4.300030';
-}
# ABSTRACT: something that keeps its minting profile in a sharedir
+$Dist::Zilla::Role::MintingProfile::ShareDir::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::MintingProfile';
@@ -11,6 +9,12 @@ use namespace::autoclean;
use File::ShareDir;
use Path::Class;
+#pod =head1 DESCRIPTION
+#pod
+#pod This role includes L<Dist::Zilla::Role::MintingProfile>, providing a
+#pod C<profile_dir> method that looks in the I<module>'s L<ShareDir|File::ShareDir>.
+#pod
+#pod =cut
sub profile_dir {
my ($self, $profile_name) = @_;
@@ -29,13 +33,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::MintingProfile::ShareDir - something that keeps its minting profile in a sharedir
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -48,7 +54,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::MintingProfile;
-{
- $Dist::Zilla::Role::MintingProfile::VERSION = '4.300030';
-}
# ABSTRACT: something that can find a minting profile dir
+$Dist::Zilla::Role::MintingProfile::VERSION = '5.025';
use Moose::Role;
use namespace::autoclean;
@@ -10,6 +8,24 @@ use namespace::autoclean;
use File::ShareDir;
use Path::Class;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role should provide C<profile_dir> method, which,
+#pod given a minting profile name, returns its directory.
+#pod
+#pod The minting profile is a directory, containing arbitrary files used during
+#pod creation of new distribution. Among other things notably, it should contain the
+#pod 'profile.ini' file, listing the plugins used for minter initialization.
+#pod
+#pod The default implementation C<profile_dir> looks in the module's
+#pod L<ShareDir|File::ShareDir>.
+#pod
+#pod After installing your profile, users will be able to start a new distribution,
+#pod based on your profile with the:
+#pod
+#pod $ dzil new -P Provider -p profile_name Distribution::Name
+#pod
+#pod =cut
requires 'profile_dir';
@@ -19,13 +35,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::MintingProfile - something that can find a minting profile dir
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -50,7 +68,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::ModuleMaker;
-{
- $Dist::Zilla::Role::ModuleMaker::VERSION = '4.300030';
-}
# ABSTRACT: something that injects module files into the dist
+$Dist::Zilla::Role::ModuleMaker::VERSION = '5.025';
use Moose::Role;
with qw(
Dist::Zilla::Role::Plugin
@@ -11,6 +9,19 @@ with qw(
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<make_module> method called for each
+#pod module requesting creation by the plugin with this name. It is passed a
+#pod hashref with the following data:
+#pod
+#pod name - the name of the module to make (a MooseX::Types::Perl::ModuleName)
+#pod
+#pod Classes composing this role also compose
+#pod L<FileInjector|Dist::Zilla::Role::FileInjector> and are expected to inject a
+#pod file for the module being created.
+#pod
+#pod =cut
requires 'make_module';
@@ -20,13 +31,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::ModuleMaker - something that injects module files into the dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -46,7 +59,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,165 @@
+package Dist::Zilla::Role::MutableFile;
+# ABSTRACT: something that can act like a file with changeable contents
+$Dist::Zilla::Role::MutableFile::VERSION = '5.025';
+use Moose::Role;
+
+use Moose::Util::TypeConstraints;
+use MooseX::SetOnce;
+use namespace::autoclean;
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This role describes a file whose contents may be modified
+#pod
+#pod =attr encoding
+#pod
+#pod Default is 'UTF-8'. Can only be set once.
+#pod
+#pod =cut
+
+with 'Dist::Zilla::Role::File';
+
+sub encoding;
+
+has encoding => (
+ is => 'rw',
+ isa => 'Str',
+ lazy => 1,
+ default => 'UTF-8',
+ traits => [ qw(SetOnce) ],
+);
+
+#pod =attr content
+#pod
+#pod =cut
+
+has _content => (
+ is => 'rw',
+ isa => 'Str',
+ lazy => 1,
+ builder => '_build_content',
+ clearer => 'clear_content',
+ predicate => 'has_content',
+);
+
+sub content {
+ my $self = shift;
+ if ( ! @_ ) {
+ # if we have it or we're tasked to provide it, return it (possibly lazily
+ # generated from a builder); otherwise, get it from the encoded_content
+ if ( $self->has_content || $self->_content_source eq 'content' ) {
+ return $self->_content;
+ }
+ else {
+ return $self->_content($self->_decode($self->encoded_content));
+ }
+ }
+ else {
+ my ($pkg, $line) = $self->_caller_of('content');
+ $self->_content_source('content');
+ $self->_push_added_by(sprintf("content set by %s (%s line %s)", $self->_caller_plugin_name, $pkg, $line));
+ $self->clear_encoded_content;
+ return $self->_content(@_);
+ }
+}
+
+#pod =attr encoded_content
+#pod
+#pod =cut
+
+has _encoded_content => (
+ is => 'rw',
+ isa => 'Str',
+ lazy => 1,
+ builder => '_build_encoded_content',
+ clearer => 'clear_encoded_content',
+ predicate => 'has_encoded_content',
+);
+
+sub encoded_content {
+ my $self = shift;
+ if ( ! @_ ) {
+ # if we have it or we're tasked to provide it, return it (possibly lazily
+ # generated from a builder); otherwise, get it from the content
+ if ($self->has_encoded_content || $self->_content_source eq 'encoded_content') {
+ return $self->_encoded_content;
+ }
+ else {
+ return $self->_encoded_content($self->_encode($self->content));
+ }
+ }
+ my ($pkg, $line) = $self->_caller_of('encoded_content');
+ $self->_content_source('encoded_content');
+ $self->_push_added_by(sprintf("encoded_content set by %s (%s line %s)", $self->_caller_plugin_name, $pkg, $line));
+ $self->clear_content;
+ $self->_encoded_content(@_);
+}
+
+has _content_source => (
+ is => 'rw',
+ isa => enum([qw/content encoded_content/]),
+ lazy => 1,
+ builder => '_build_content_source',
+);
+
+sub _set_added_by {
+ my ($self, $value) = @_;
+ return $self->_push_added_by(sprintf("%s added by %s", $self->_content_source, $value));
+};
+
+# we really only need one of these and only if _content or _encoded_content
+# isn't provided, but roles can't do that, so we'll insist on both just in case
+# and let classes provide stubs if they provide _content or _encoded_content
+# another way
+
+requires '_build_content';
+requires '_build_encoded_content';
+
+# we need to know the content source so we know where we might need to rely on
+# lazy loading to give us content. It should be set by the class if there is a
+# class-wide default or just stubbed if a BUILD modifier sets it per-object.
+
+requires '_build_content_source';
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Role::MutableFile - something that can act like a file with changeable contents
+
+=head1 VERSION
+
+version 5.025
+
+=head1 DESCRIPTION
+
+This role describes a file whose contents may be modified
+
+=head1 ATTRIBUTES
+
+=head2 encoding
+
+Default is 'UTF-8'. Can only be set once.
+
+=head2 content
+
+=head2 encoded_content
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,11 +1,19 @@
package Dist::Zilla::Role::NameProvider;
-{
- $Dist::Zilla::Role::NameProvider::VERSION = '4.300030';
-}
# ABSTRACT: something that provides a name for the dist
+$Dist::Zilla::Role::NameProvider::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role must provide a C<provide_name> method that
+#pod will be called when setting the dist's name.
+#pod
+#pod If a NameProvider offers a name but one has already been set, an
+#pod exception will be raised. If C<provide_name> returns undef, it will be
+#pod ignored.
+#pod
+#pod =cut
requires 'provide_name';
@@ -16,13 +24,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::NameProvider - something that provides a name for the dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -39,7 +49,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::PPI;
-{
- $Dist::Zilla::Role::PPI::VERSION = '4.300030';
-}
# ABSTRACT: a role for plugins which use PPI
+$Dist::Zilla::Role::PPI::VERSION = '5.025';
use Moose::Role;
use Moose::Util::TypeConstraints;
@@ -10,44 +8,82 @@ use Moose::Util::TypeConstraints;
use namespace::autoclean;
use Digest::MD5 qw(md5);
-
+use Storable qw(dclone);
+
+#pod =head1 DESCRIPTION
+#pod
+#pod This role provides some common utilities for plugins which use PPI
+#pod
+#pod =method ppi_document_for_file
+#pod
+#pod my $document = $self->ppi_document_for_file($file);
+#pod
+#pod Given a dzil file object (anything that does L<Dist::Zilla::Role::File>), this
+#pod method returns a new L<PPI::Document> for that file's content.
+#pod
+#pod Internally, this method caches these documents. If multiple plugins want a
+#pod document for the same file, this avoids reparsing it.
+#pod
+#pod =cut
my %CACHE;
sub ppi_document_for_file {
my ($self, $file) = @_;
- my $content = $file->content;
+ my $encoded_content = $file->encoded_content;
# We cache on the MD5 checksum to detect if the document has been modified
# by some other plugin since it was last parsed, our document is invalid.
- my $md5 = md5($content);
- return $CACHE{$md5} if $CACHE{$md5};
+ my $md5 = md5($encoded_content);
+ return $CACHE{$md5}->clone if $CACHE{$md5};
- my $document = PPI::Document->new(\$content)
+ require PPI::Document;
+ my $document = PPI::Document->new(\$encoded_content)
or Carp::croak(PPI::Document->errstr);
- return $CACHE{$md5} = $document;
+ return ($CACHE{$md5} = $document)->clone;
}
+#pod =method save_ppi_document_to_file
+#pod
+#pod my $document = $self->save_ppi_document_to_file($document,$file);
+#pod
+#pod Given a L<PPI::Document> and a dzil file object (anything that does
+#pod L<Dist::Zilla::Role::File>), this method saves the serialized document in the
+#pod file.
+#pod
+#pod It also updates the internal PPI document cache with the new document.
+#pod
+#pod =cut
sub save_ppi_document_to_file {
my ($self, $document, $file) = @_;
my $new_content = $document->serialize;
- $CACHE{ md5($new_content) } = $document;
+ $file->encoded_content($new_content);
- $file->content($new_content);
+ $CACHE{ md5($new_content) } = $document->clone;
}
+#pod =method document_assigns_to_variable
+#pod
+#pod if( $self->ppi_document_for_file($document, '$FOO')) { ... }
+#pod
+#pod This method returns true if the document assigns to the given variable.
+#pod
+#pod =cut
sub document_assigns_to_variable {
my ($self, $document, $variable) = @_;
my $finder = sub {
my $node = $_[1];
- return 1 if $node->isa('PPI::Statement') && $node->content =~ /(?<!\\)\Q$variable\E\s*=/sm;
+ return 1 if $node->isa('PPI::Statement')
+ && $node->content =~ /^[^#]*(?<!\\)\Q$variable\E\s*=/sm
+ && !$node->isa('PPI::Statement::End')
+ && !$node->isa('PPI::Statement::Data');
return 0;
};
@@ -63,13 +99,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::PPI - a role for plugins which use PPI
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -109,7 +147,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::Plugin;
-{
- $Dist::Zilla::Role::Plugin::VERSION = '4.300030';
-}
# ABSTRACT: something that gets plugged in to Dist::Zilla
+$Dist::Zilla::Role::Plugin::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::ConfigDumper';
@@ -12,6 +10,16 @@ use MooseX::Types;
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod The Plugin role should be applied to all plugin classes. It provides a few key
+#pod methods and attributes that all plugins will need.
+#pod
+#pod =attr plugin_name
+#pod
+#pod The plugin name is generally determined when configuration is read.
+#pod
+#pod =cut
has plugin_name => (
is => 'ro',
@@ -19,6 +27,12 @@ has plugin_name => (
required => 1,
);
+#pod =attr zilla
+#pod
+#pod This attribute contains the Dist::Zilla object into which the plugin was
+#pod plugged.
+#pod
+#pod =cut
has zilla => (
is => 'ro',
@@ -27,6 +41,12 @@ has zilla => (
weak_ref => 1,
);
+#pod =method log
+#pod
+#pod The plugin's C<log> method delegates to the Dist::Zilla object's
+#pod L<Dist::Zilla/log> method after including a bit of argument-munging.
+#pod
+#pod =cut
has logger => (
is => 'ro',
@@ -75,13 +95,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::Plugin - something that gets plugged in to Dist::Zilla
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -112,7 +134,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,14 +1,34 @@
package Dist::Zilla::Role::PluginBundle::Easy;
-{
- $Dist::Zilla::Role::PluginBundle::Easy::VERSION = '4.300030';
-}
# ABSTRACT: something that bundles a bunch of plugins easily
# This plugin was originally contributed by Christopher J. Madsen
+$Dist::Zilla::Role::PluginBundle::Easy::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::PluginBundle';
use namespace::autoclean;
+#pod =head1 SYNOPSIS
+#pod
+#pod package Dist::Zilla::PluginBundle::Example;
+#pod use Moose;
+#pod with 'Dist::Zilla::Role::PluginBundle::Easy';
+#pod
+#pod sub configure {
+#pod my $self = shift;
+#pod
+#pod $self->add_plugins('VersionFromModule');
+#pod $self->add_bundle('Basic');
+#pod }
+#pod
+#pod =head1 DESCRIPTION
+#pod
+#pod This role builds upon the PluginBundle role, adding methods to take most of the
+#pod grunt work out of creating a bundle. It supplies the C<bundle_config> method
+#pod for you. In exchange, you must supply a C<configure> method, which will store
+#pod the bundle's configuration in the C<plugins> attribute by calling
+#pod C<add_plugins> and/or C<add_bundle>.
+#pod
+#pod =cut
use Moose::Autobox;
use MooseX::Types::Moose qw(Str ArrayRef HashRef);
@@ -31,6 +51,12 @@ use namespace::autoclean;
requires 'configure';
+#pod =attr name
+#pod
+#pod This is the bundle name, taken from the Section passed to
+#pod C<bundle_config>.
+#pod
+#pod =cut
has name => (
is => 'ro',
@@ -38,6 +64,12 @@ has name => (
required => 1,
);
+#pod =attr payload
+#pod
+#pod This hashref contains the bundle's parameters (if any), taken from the
+#pod Section passed to C<bundle_config>.
+#pod
+#pod =cut
has payload => (
is => 'ro',
@@ -45,6 +77,13 @@ has payload => (
required => 1,
);
+#pod =attr plugins
+#pod
+#pod This arrayref contains the configuration that will be returned by
+#pod C<bundle_config>. You normally modify this by using the
+#pod C<add_plugins> and C<add_bundle> methods.
+#pod
+#pod =cut
has plugins => (
is => 'ro',
@@ -62,6 +101,24 @@ sub bundle_config {
return $self->plugins->flatten;
}
+#pod =method add_plugins
+#pod
+#pod $self->add_plugins('Plugin1', [ Plugin2 => \%plugin2config ])
+#pod
+#pod Use this method to add plugins to your bundle.
+#pod
+#pod It is passed a list of plugin specifiers, which can be one of a few things:
+#pod
+#pod =for :list
+#pod * a plugin moniker (like you might provide in your config file)
+#pod * an arrayref of: C<< [ $moniker, $plugin_name, \%plugin_config ] >>
+#pod
+#pod In the case of an arrayref, both C<$plugin_name> and C<\%plugin_config> are
+#pod optional.
+#pod
+#pod The plugins are added to the config in the order given.
+#pod
+#pod =cut
sub add_plugins {
my ($self, @plugin_specs) = @_;
@@ -90,6 +147,14 @@ sub add_plugins {
}
}
+#pod =method add_bundle
+#pod
+#pod $self->add_bundle(BundleName => \%bundle_config)
+#pod
+#pod Use this method to add all the plugins from another bundle to your bundle. If
+#pod you omit C<%bundle_config>, an empty hashref will be supplied.
+#pod
+#pod =cut
sub add_bundle {
my ($self, $bundle, $payload) = @_;
@@ -101,7 +166,7 @@ sub add_bundle {
if( my $v = $payload->{':version'} ){
$load_opts->{'-version'} = $v;
}
- Class::MOP::load_class($package, $load_opts);
+ Class::Load::load_class($package, $load_opts);
$bundle = "\@$bundle" unless $bundle =~ /^@/;
@@ -114,6 +179,20 @@ sub add_bundle {
);
}
+#pod =method config_slice
+#pod
+#pod $hash_ref = $self->config_slice(arg1, { arg2 => 'plugin_arg2' })
+#pod
+#pod Use this method to extract parameters from your bundle's C<payload> so
+#pod that you can pass them to a plugin or subsidiary bundle. It supports
+#pod easy renaming of parameters, since a plugin may expect a parameter
+#pod name that's too generic to be suitable for a bundle.
+#pod
+#pod Each arg is either a key in C<payload>, or a hashref that maps keys in
+#pod C<payload> to keys in the hash being constructed. If any specified
+#pod key does not exist in C<payload>, then it is omitted from the result.
+#pod
+#pod =cut
sub config_slice {
my $self = shift;
@@ -141,13 +220,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::PluginBundle::Easy - something that bundles a bunch of plugins easily
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -206,7 +287,7 @@ a plugin moniker (like you might provide in your config file)
=item *
-an arrayref of: C<< [ $moniker, $plugin_name, \%plugin_config >>
+an arrayref of: C<< [ $moniker, $plugin_name, \%plugin_config ] >>
=back
@@ -241,7 +322,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,18 @@
package Dist::Zilla::Role::PluginBundle;
-{
- $Dist::Zilla::Role::PluginBundle::VERSION = '4.300030';
-}
# ABSTRACT: something that bundles a bunch of plugins
+$Dist::Zilla::Role::PluginBundle::VERSION = '5.025';
use Moose::Role;
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod When loading configuration, if the config reader encounters a PluginBundle, it
+#pod will replace its place in the plugin list with the result of calling its
+#pod C<bundle_config> method, which will be passed a Config::MVP::Section to
+#pod configure the bundle.
+#pod
+#pod =cut
sub register_component {
my ($class, $name, $arg, $self) = @_;
@@ -22,13 +28,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::PluginBundle - something that bundles a bunch of plugins
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -43,7 +51,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
package Dist::Zilla::Role::PrereqSource;
-{
- $Dist::Zilla::Role::PrereqSource::VERSION = '4.300030';
-}
# ABSTRACT: something that registers prerequisites
+$Dist::Zilla::Role::PrereqSource::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod PrereqSource plugins have a C<register_prereqs> method that should register
+#pod prereqs with the Dist::Zilla object.
+#pod
+#pod =cut
requires 'register_prereqs';
@@ -17,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::PrereqSource - something that registers prerequisites
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
package Dist::Zilla::Role::Releaser;
-{
- $Dist::Zilla::Role::Releaser::VERSION = '4.300030';
-}
# ABSTRACT: something that makes a release of the dist
+$Dist::Zilla::Role::Releaser::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<release> method called when
+#pod releasing. It's passed the distribution tarball to be released.
+#pod
+#pod =cut
requires 'release';
@@ -17,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::Releaser - something that makes a release of the dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::ShareDir;
-{
- $Dist::Zilla::Role::ShareDir::VERSION = '4.300030';
-}
# ABSTRACT: something that picks a directory to install as shared files
+$Dist::Zilla::Role::ShareDir::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::FileFinder';
@@ -20,13 +18,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::ShareDir - something that picks a directory to install as shared files
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -34,7 +34,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,17 @@
package Dist::Zilla::Role::Stash::Authors;
-{
- $Dist::Zilla::Role::Stash::Authors::VERSION = '4.300030';
-}
+# ABSTRACT: a stash that provides a list of author strings
+$Dist::Zilla::Role::Stash::Authors::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Stash';
-# ABSTRACT: a stash that provides a list of author strings
use namespace::autoclean;
+#pod =head1 OVERVIEW
+#pod
+#pod An Authors stash must provide an C<authors> method that returns an arrayref of
+#pod author strings, generally in the form "Name <email>".
+#pod
+#pod =cut
requires 'authors';
@@ -17,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::Stash::Authors - a stash that provides a list of author strings
=head1 VERSION
-version 4.300030
+version 5.025
=head1 OVERVIEW
@@ -36,7 +42,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,16 @@
package Dist::Zilla::Role::Stash::Login;
-{
- $Dist::Zilla::Role::Stash::Login::VERSION = '4.300030';
-}
+# ABSTRACT: a stash with username/password credentials
+$Dist::Zilla::Role::Stash::Login::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Stash';
-# ABSTRACT: a stash with username/password credentials
use namespace::autoclean;
+#pod =head1 OVERVIEW
+#pod
+#pod A Login stash must provide a C<username> and C<password> method.
+#pod
+#pod =cut
requires 'username';
requires 'password';
@@ -18,13 +21,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::Stash::Login - a stash with username/password credentials
=head1 VERSION
-version 4.300030
+version 5.025
=head1 OVERVIEW
@@ -36,7 +41,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,8 +1,6 @@
package Dist::Zilla::Role::Stash;
-{
- $Dist::Zilla::Role::Stash::VERSION = '4.300030';
-}
# ABSTRACT: something that stores options or data for later reference
+$Dist::Zilla::Role::Stash::VERSION = '5.025';
use Moose::Role;
use namespace::autoclean;
@@ -31,13 +29,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::Stash - something that stores options or data for later reference
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -45,7 +45,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,35 @@
+package Dist::Zilla::Role::StubBuild;
+# ABSTRACT: provides an empty BUILD methods
+$Dist::Zilla::Role::StubBuild::VERSION = '5.025';
+use Moose::Role;
+
+sub BUILD {}
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Role::StubBuild - provides an empty BUILD methods
+
+=head1 VERSION
+
+version 5.025
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,34 +1,86 @@
package Dist::Zilla::Role::TestRunner;
-{
- $Dist::Zilla::Role::TestRunner::VERSION = '4.300030';
-}
# ABSTRACT: something used as a delegating agent to 'dzil test'
+$Dist::Zilla::Role::TestRunner::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role have their C<test> method called when
+#pod testing. It's passed the root directory of the build test dir and an
+#pod optional hash reference of arguments. Valid arguments include:
+#pod
+#pod =for :list
+#pod * jobs -- if parallel testing is supported, this indicates how many to run at once
+#pod
+#pod =method test
+#pod
+#pod This method should throw an exception on failure.
+#pod
+#pod =cut
requires 'test';
+#pod =attr default_jobs
+#pod
+#pod This attribute is the default value that should be used as the C<jobs> argument
+#pod to the C<test> method.
+#pod
+#pod =cut
+
+has default_jobs => (
+ is => 'ro',
+ isa => 'Int', # non-negative
+ default => 1,
+);
+
+around dump_config => sub {
+ my ($orig, $self) = @_;
+ my $config = $self->$orig;
+
+ $config->{'' . __PACKAGE__} = { default_jobs => $self->default_jobs };
+
+ return $config;
+};
+
1;
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::TestRunner - something used as a delegating agent to 'dzil test'
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
Plugins implementing this role have their C<test> method called when
-testing. It's passed the root directory of the build test dir.
+testing. It's passed the root directory of the build test dir and an
+optional hash reference of arguments. Valid arguments include:
+
+=over 4
+
+=item *
+
+jobs -- if parallel testing is supported, this indicates how many to run at once
+
+=back
+
+=head1 ATTRIBUTES
+
+=head2 default_jobs
+
+This attribute is the default value that should be used as the C<jobs> argument
+to the C<test> method.
=head1 METHODS
@@ -42,7 +94,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,15 +1,26 @@
package Dist::Zilla::Role::TextTemplate;
-{
- $Dist::Zilla::Role::TextTemplate::VERSION = '4.300030';
-}
# ABSTRACT: something that renders a Text::Template template string
+$Dist::Zilla::Role::TextTemplate::VERSION = '5.025';
use Moose::Role;
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing TextTemplate may call their own C<L</fill_in_string>>
+#pod method to render templates using L<Text::Template|Text::Template>.
+#pod
+#pod =cut
use Text::Template;
+#pod =attr delim
+#pod
+#pod This attribute (which can't easily be set!) is a two-element array reference
+#pod returning the Text::Template delimiters to use. It defaults to C<{{> and
+#pod C<}}>.
+#pod
+#pod =cut
# XXX: Later, add a way to set this in config. -- rjbs, 2008-06-02
has delim => (
@@ -20,6 +31,18 @@ has delim => (
default => sub { [ qw( {{ }} ) ] },
);
+#pod =method fill_in_string
+#pod
+#pod my $rendered = $plugin->fill_in_string($template, \%stash, \%arg);
+#pod
+#pod This uses Text::Template to fill in the given template using the variables
+#pod given in the C<%stash>. The stash becomes the HASH argument to Text::Template,
+#pod so scalars must be scalar references rather than plain scalars.
+#pod
+#pod C<%arg> is dereferenced and passed in as extra arguments to Text::Template's
+#pod C<fill_in_string> routine.
+#pod
+#pod =cut
sub fill_in_string {
my ($self, $string, $stash, $arg) = @_;
@@ -52,13 +75,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::TextTemplate - something that renders a Text::Template template string
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -92,7 +117,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,29 +1,46 @@
package Dist::Zilla::Role::VersionProvider;
-{
- $Dist::Zilla::Role::VersionProvider::VERSION = '4.300030';
-}
# ABSTRACT: something that provides a version number for the dist
+$Dist::Zilla::Role::VersionProvider::VERSION = '5.025';
use Moose::Role;
with 'Dist::Zilla::Role::Plugin';
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Plugins implementing this role must provide a C<provide_version> method that
+#pod will be called when setting the dist's version.
+#pod
+#pod If a VersionProvider offers a version but one has already been set, an
+#pod exception will be raised. If C<provides_version> returns undef, it will be
+#pod ignored.
+#pod
+#pod =cut
requires 'provide_version';
1;
+#pod =head1 SEE ALSO
+#pod
+#pod Core Dist::Zilla plugins implementing this role:
+#pod L<AutoVersion|Dist::Zilla::Plugin::AutoVersion>.
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Role::VersionProvider - something that provides a version number for the dist
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -45,7 +62,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -0,0 +1,51 @@
+package Dist::Zilla::Stash::Mint;
+# ABSTRACT: a stash of your default minting provider/profile
+$Dist::Zilla::Stash::Mint::VERSION = '5.025';
+use Moose;
+with 'Dist::Zilla::Role::Stash';
+
+use namespace::autoclean;
+
+has provider => (
+ is => 'ro',
+ isa => 'Str',
+ required => 0,
+ default => 'Default',
+);
+
+has profile => (
+ is => 'ro',
+ isa => 'Str',
+ required => 0,
+ default => 'default',
+);
+
+__PACKAGE__->meta->make_immutable;
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Dist::Zilla::Stash::Mint - a stash of your default minting provider/profile
+
+=head1 VERSION
+
+version 5.025
+
+=head1 AUTHOR
+
+Ricardo SIGNES <rjbs@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2014 by Ricardo SIGNES.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
@@ -1,12 +1,16 @@
package Dist::Zilla::Stash::PAUSE;
-{
- $Dist::Zilla::Stash::PAUSE::VERSION = '4.300030';
-}
-use Moose;
# ABSTRACT: a stash of your PAUSE credentials
+$Dist::Zilla::Stash::PAUSE::VERSION = '5.025';
+use Moose;
use namespace::autoclean;
+#pod =head1 OVERVIEW
+#pod
+#pod The PAUSE stash is a L<Login|Dist::Zilla::Role::Stash::Login> stash generally
+#pod used for uploading to PAUSE.
+#pod
+#pod =cut
sub mvp_aliases {
return { user => 'username' };
@@ -32,13 +36,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Stash::PAUSE - a stash of your PAUSE credentials
=head1 VERSION
-version 4.300030
+version 5.025
=head1 OVERVIEW
@@ -51,7 +57,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,10 +1,8 @@
package Dist::Zilla::Stash::Rights;
-{
- $Dist::Zilla::Stash::Rights::VERSION = '4.300030';
-}
+# ABSTRACT: a stash of your default licensing terms
+$Dist::Zilla::Stash::Rights::VERSION = '5.025';
use Moose;
with 'Dist::Zilla::Role::Stash';
-# ABSTRACT: a stash of your default licensing terms
use namespace::autoclean;
@@ -32,13 +30,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Stash::Rights - a stash of your default licensing terms
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -46,7 +46,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,9 +1,7 @@
package Dist::Zilla::Stash::User;
-{
- $Dist::Zilla::Stash::User::VERSION = '4.300030';
-}
-use Moose;
# ABSTRACT: a stash of user name and email
+$Dist::Zilla::Stash::User::VERSION = '5.025';
+use Moose;
use namespace::autoclean;
@@ -32,13 +30,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Stash::User - a stash of user name and email
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -46,7 +46,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,11 @@
package Dist::Zilla::Tester;
-{
- $Dist::Zilla::Tester::VERSION = '4.300030';
-}
+# ABSTRACT: a testing-enabling stand-in for Dist::Zilla
+$Dist::Zilla::Tester::VERSION = '5.025';
use Moose;
extends 'Dist::Zilla::Dist::Builder';
-# ABSTRACT: a testing-enabling stand-in for Dist::Zilla
# XXX: Adding this autoclean causes problem. "Builder" and "Minter" do not
-# show in in tests. I'm really not sure why. -- rjbs, 2011-08-19
+# show in tests. I'm really not sure why. -- rjbs, 2011-08-19
# use namespace::autoclean;
use autodie;
@@ -15,6 +13,7 @@ use Dist::Zilla::Chrome::Test;
use File::pushd ();
use File::Spec;
use File::Temp;
+use Path::Tiny;
use Sub::Exporter::Util ();
use Sub::Exporter -setup => {
@@ -36,12 +35,33 @@ sub builder { 'Dist::Zilla::Tester::_Builder' }
sub minter { 'Dist::Zilla::Tester::_Minter' }
{
- package Dist::Zilla::Tester::_Role;
-{
- $Dist::Zilla::Tester::_Role::VERSION = '4.300030';
-}
+ package
+ Dist::Zilla::Tester::_Role;
+
use Moose::Role;
+ has tempdir_root => (
+ is => 'rw', isa => 'Str|Undef',
+ writer => '_set_tempdir_root',
+ );
+ has tempdir_obj => (
+ is => 'ro', isa => 'File::Temp::Dir',
+ clearer => '_clear_tempdir_obj',
+ writer => '_set_tempdir_obj',
+ );
+
+ sub DEMOLISH {}
+ around DEMOLISH => sub {
+ my $orig = shift;
+ my $self = shift;
+
+ # File::Temp deletes the directory when it goes out of scope
+ $self->_clear_tempdir_obj;
+
+ rmdir $self->tempdir_root if $self->tempdir_root;
+ return $self->$orig(@_);
+ };
+
has tempdir => (
is => 'ro',
writer => '_set_tempdir',
@@ -66,14 +86,17 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
sub slurp_file {
my ($self, $filename) = @_;
- return scalar do {
- local $/;
- open my $fh, '<', $self->tempdir->file($filename);
+ Path::Tiny::path(
+ $self->tempdir->file($filename)
+ )->slurp_utf8;
+ }
- # Win32.
- binmode $fh, ':raw';
- <$fh>;
- };
+ sub slurp_file_raw {
+ my ($self, $filename) = @_;
+
+ Path::Tiny::path(
+ $self->tempdir->file($filename)
+ )->slurp_raw;
}
sub _metadata_generator_id { 'Dist::Zilla::Tester' }
@@ -83,10 +106,8 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
{
package Dist::Zilla::Tester::_Builder;
-{
- $Dist::Zilla::Tester::_Builder::VERSION = '4.300030';
-}
- use Moose;
+$Dist::Zilla::Tester::_Builder::VERSION = '5.025';
+use Moose;
extends 'Dist::Zilla::Dist::Builder';
with 'Dist::Zilla::Tester::_Role';
@@ -106,10 +127,11 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
mkdir $tempdir_root if defined $tempdir_root and not -d $tempdir_root;
- my $tempdir = dir( File::Temp::tempdir(
+ my $tempdir_obj = File::Temp->newdir(
CLEANUP => 1,
(defined $tempdir_root ? (DIR => $tempdir_root) : ()),
- ))->absolute;
+ );
+ my $tempdir = dir($tempdir_obj)->absolute;
my $root = $tempdir->subdir('source');
$root->mkpath;
@@ -124,15 +146,12 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
if (my $files = $tester_arg->{add_files}) {
while (my ($name, $content) = each %$files) {
- my $fn = $tempdir->file($name);
+ die "File name '$name' does not seem to be legal on the current OS"
+ if !path_looks_legal($name);
+ my $unix_name = Path::Class::File->new_foreign("Unix", $name);
+ my $fn = $tempdir->file($unix_name);
$fn->dir->mkpath;
- open my $fh, '>', $fn;
-
- # Win32 fix for crlf translation.
- # maybe :raw:utf8? -- Kentnl - 2010-06-10
- binmode $fh, ':raw';
- print { $fh } $content;
- close $fh;
+ Path::Tiny::path($fn)->spew_utf8($content);
}
}
@@ -141,8 +160,12 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
local @INC = map {; ref($_) ? $_ : File::Spec->rel2abs($_) } @INC;
+ local $ENV{DZIL_GLOBAL_CONFIG_ROOT} = $tester_arg->{global_config_root};
+
my $zilla = $self->$orig($arg);
+ $zilla->_set_tempdir_root($tempdir_root);
+ $zilla->_set_tempdir_obj($tempdir_obj);
$zilla->_set_tempdir($tempdir);
return $zilla;
@@ -175,14 +198,21 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
};
no Moose;
+
+ sub path_looks_legal {
+ return 1 if $^O eq "linux";
+ my ($path) = @_;
+ my $unix_path = Path::Class::File->new_foreign("Unix", $path)->stringify;
+ return 0 if $path ne $unix_path;
+ my $round_tripped = file($path)->as_foreign("Unix")->stringify;
+ return $path eq $round_tripped;
+ }
}
{
package Dist::Zilla::Tester::_Minter;
-{
- $Dist::Zilla::Tester::_Minter::VERSION = '4.300030';
-}
- use Moose;
+$Dist::Zilla::Tester::_Minter::VERSION = '5.025';
+use Moose;
extends 'Dist::Zilla::Dist::Minter';
with 'Dist::Zilla::Tester::_Role';
@@ -232,10 +262,11 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
mkdir $tempdir_root if defined $tempdir_root and not -d $tempdir_root;
- my $tempdir = dir( File::Temp::tempdir(
+ my $tempdir_obj = File::Temp->newdir(
CLEANUP => 1,
(defined $tempdir_root ? (DIR => $tempdir_root) : ()),
- ))->absolute;
+ );
+ my $tempdir = dir($tempdir_obj)->absolute;
local $arg->{chrome} = Dist::Zilla::Chrome::Test->new;
@@ -252,6 +283,8 @@ sub minter { 'Dist::Zilla::Tester::_Minter' }
my $zilla = $self->$orig($profile_data, $arg);
+ $zilla->_set_tempdir_root($tempdir_root);
+ $zilla->_set_tempdir_obj($tempdir_obj);
$zilla->_set_tempdir($tempdir);
return $zilla;
@@ -266,13 +299,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Tester - a testing-enabling stand-in for Dist::Zilla
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -280,7 +315,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,25 +1,154 @@
use strict;
use warnings;
package Dist::Zilla::Tutorial;
-{
- $Dist::Zilla::Tutorial::VERSION = '4.300030';
-}
# ABSTRACT: how to use this "Dist::Zilla" thing
+$Dist::Zilla::Tutorial::VERSION = '5.025';
use Carp ();
Carp::confess "you're not meant to use the tutorial, just read it!";
1;
+#pod =head1 SYNOPSIS
+#pod
+#pod B<BEFORE YOU GET STARTED>: Maybe you should be looking at the web-based
+#pod tutorial instead. It's more complete. L<http://dzil.org/tutorial/start.html>
+#pod
+#pod Dist::Zilla builds distributions to be uploaded to the CPAN. That means that
+#pod the first thing you'll need is some code.
+#pod
+#pod Once you've got that, you'll need to configure Dist::Zilla. Here's a simple
+#pod F<dist.ini>:
+#pod
+#pod name = Carbon-Dating
+#pod version = 0.003
+#pod author = Alan Smithee <asmithee@example.org>
+#pod license = Perl_5
+#pod copyright_holder = Alan Smithee
+#pod
+#pod [@Basic]
+#pod
+#pod [Prereqs]
+#pod App::Cmd = 0.013
+#pod Number::Nary = 0
+#pod Sub::Exporter = 0.981
+#pod
+#pod The topmost section configures Dist::Zilla itself. Here are some of the
+#pod entries it expects:
+#pod
+#pod name - (required) the name of the dist being built
+#pod version - (required) the version of the dist
+#pod abstract - (required) a short description of the dist
+#pod author - (optional) the dist author (you may have multiple entries for this)
+#pod license - (required) the dist license; must be a Software::License::* name
+#pod
+#pod copyright_holder - (required) the entity holding copyright on the dist
+#pod
+#pod Some of the required values above may actually be provided by means other than
+#pod the top-level section of the config. For example,
+#pod L<VersionProvider|Dist::Zilla::Role::VersionProvider> plugins can
+#pod set the version, and a line like this in the "main module" of the dist will set
+#pod the abstract:
+#pod
+#pod # ABSTRACT: a totally cool way to do totally great stuff
+#pod
+#pod The main modules is the module that shares the same name as the dist, in
+#pod general.
+#pod
+#pod Named sections load plugins, with the following rules:
+#pod
+#pod If a section name begins with an equals sign (C<=>), the rest of the section
+#pod name is left intact and not expanded. If the section name begins with an at
+#pod sign (C<@>), it is prepended with C<Dist::Zilla::PluginBundle::>. Otherwise,
+#pod it is prepended with C<Dist::Zilla::Plugin::>.
+#pod
+#pod The values inside a section are given as configuration to the plugin. Consult
+#pod each plugin's documentation for more information.
+#pod
+#pod The "Basic" bundle, seen above, builds a fairly normal distribution. It
+#pod rewrites tests from F<./xt>, adds some information to POD, and builds a
+#pod F<Makefile.PL>. For more information, you can look at the docs for
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic> and see the plugins it includes.
+#pod
+#pod =head1 BUILDING YOUR DIST
+#pod
+#pod Maybe we're getting ahead of ourselves, here. Configuring a bunch of plugins
+#pod won't do you a lot of good unless you know how to use them to build your dist.
+#pod
+#pod Dist::Zilla ships with a command called F<dzil> that will get installed by
+#pod default. While it can be extended to offer more commands, there are two really
+#pod useful ones:
+#pod
+#pod $ dzil build
+#pod
+#pod The C<build> command will build the distribution. Say you're using the
+#pod configuration in the SYNOPSIS above. You'll end up with a file called
+#pod F<Carbon-Dating-0.004.tar.gz>. As long as you've done everything right, it
+#pod will be suitable for uploading to the CPAN.
+#pod
+#pod Of course, you should really test it out first. You can test the dist you'd be
+#pod building by running another F<dzil> command:
+#pod
+#pod $ dzil test
+#pod
+#pod This will build a new copy of your distribution and run its tests, so you'll
+#pod know whether the dist that C<build> would build is worth releasing!
+#pod
+#pod =head1 HOW BUILDS GET BUILT
+#pod
+#pod This is really more of a sketchy overview than a spec.
+#pod
+#pod First, all the plugins that perform the
+#pod L<BeforeBuild|Dist::Zilla::Role::BeforeBuild> perform their C<before_build>
+#pod tasks.
+#pod
+#pod The build root (where the dist is being built) is made.
+#pod
+#pod The L<FileGatherer|Dist::Zilla::Role::FileGatherer>s gather and inject files
+#pod into the distribution, then the L<FilePruner|Dist::Zilla::Role::FilePruner>s
+#pod remove some of them.
+#pod
+#pod All the L<FileMunger|Dist::Zilla::Role::FileMunger>s get a chance to muck about
+#pod with each file, possibly changing its name, content, or installability.
+#pod
+#pod Now that the distribution is basically set up, it needs an install tool, like a
+#pod F<Makefile.PL>. All the
+#pod L<InstallTool|Dist::Zilla::Role::InstallTool>-performing plugins are used to
+#pod do whatever is needed to make the dist installable.
+#pod
+#pod Everything is just about done. The files are all written out to disk and the
+#pod L<AfterBuild|Dist::Zilla::Role::AfterBuild> plugins do their thing.
+#pod
+#pod =head1 RELEASING YOUR DIST
+#pod
+#pod By running C<dzil release>, you'll test your
+#pod distribution, build a tarball of it, and upload it to the CPAN. Plugins are
+#pod able to do things like check your version control system to make sure you're
+#pod releasing a new version and that you tag the version you've just uploaded. It
+#pod can also update your Changelog file, too, making sure that you don't need to
+#pod know what your next version number will be before releasing.
+#pod
+#pod The final CPAN release process is implemented by the
+#pod L<UploadToCPAN|Dist::Zilla::Plugin::UploadToCPAN> plugin. However you can
+#pod replace it by your own to match your own (company?) process.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod L<dzil>
+#pod
+#pod =cut
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Tutorial - how to use this "Dist::Zilla" thing
=head1 VERSION
-version 4.300030
+version 5.025
=head1 SYNOPSIS
@@ -40,7 +169,7 @@ F<dist.ini>:
[@Basic]
- [Prereq]
+ [Prereqs]
App::Cmd = 0.013
Number::Nary = 0
Sub::Exporter = 0.981
@@ -133,7 +262,7 @@ L<AfterBuild|Dist::Zilla::Role::AfterBuild> plugins do their thing.
=head1 RELEASING YOUR DIST
-By running C<dzil release>, you'll can test your
+By running C<dzil release>, you'll test your
distribution, build a tarball of it, and upload it to the CPAN. Plugins are
able to do things like check your version control system to make sure you're
releasing a new version and that you tag the version you've just uploaded. It
@@ -154,7 +283,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,17 @@
package Dist::Zilla::Types;
-{
- $Dist::Zilla::Types::VERSION = '4.300030';
-}
# ABSTRACT: dzil-specific type library
-
+$Dist::Zilla::Types::VERSION = '5.025';
use namespace::autoclean;
+#pod =head1 OVERVIEW
+#pod
+#pod This library provides L<MooseX::Types> types for use by Dist::Zilla. These
+#pod types are not (yet?) for public consumption, and you should not rely on them.
+#pod
+#pod Dist::Zilla uses a number of types found in L<MooseX::Types::Perl>. Maybe
+#pod that's what you want.
+#pod
+#pod =cut
use MooseX::Types -declare => [qw(License OneZero YesNoStr)];
use MooseX::Types::Moose qw(Str Int);
@@ -24,13 +30,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Types - dzil-specific type library
=head1 VERSION
-version 4.300030
+version 5.025
=head1 OVERVIEW
@@ -46,7 +54,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,13 +1,10 @@
use strict;
use warnings;
package Dist::Zilla::Util::AuthorDeps;
-{
- $Dist::Zilla::Util::AuthorDeps::VERSION = '4.300030';
-}
# ABSTRACT: Utils for listing your distribution's author dependencies
-
+$Dist::Zilla::Util::AuthorDeps::VERSION = '5.025';
use Dist::Zilla::Util;
-use Path::Class;
+use Path::Tiny;
use List::MoreUtils ();
@@ -26,12 +23,12 @@ sub format_author_deps {
sub extract_author_deps {
my ($root, $missing) = @_;
- my $ini = $root->file('dist.ini');
+ my $ini = path($root, 'dist.ini');
die "dzil authordeps only works on dist.ini files, and you don't have one\n"
unless -e $ini;
- my $fh = $ini->openr;
+ my $fh = $ini->openr_utf8;
require Config::INI::Reader;
my $config = Config::INI::Reader->read_handle($fh);
@@ -39,17 +36,14 @@ sub extract_author_deps {
require CPAN::Meta::Requirements;
my $reqs = CPAN::Meta::Requirements->new;
- my @packs =
- map { s/\s.*//; $_ }
- grep { $_ ne '_' }
- keys %$config;
-
- foreach my $pack (@packs) {
+ for my $section ( sort keys %$config ) {
+ next if q[_] eq $section;
+ my $pack = $section;
+ $pack =~ s{\s*/.*$}{}; # trim optional space and slash-delimited suffix
my $version = 0;
- if(exists $config->{$pack} && exists $config->{$pack}->{':version'}) {
- $version = $config->{$pack}->{':version'};
- }
+ $version = $config->{$section}->{':version'} if exists $config->{$section}->{':version'};
+
my $realname = Dist::Zilla::Util->expand_config_package_name($pack);
$reqs->add_minimum($realname => $version);
}
@@ -89,8 +83,8 @@ sub extract_author_deps {
# Move inc:: first in list as they may impact the loading of other
# plugins (in particular local ones).
- # Also order inc:: so that thoses that want to hack @INC with inc:: plugins
- # can have a consistant playground.
+ # Also order inc:: so that those that want to hack @INC with inc:: plugins
+ # can have a consistent playground.
# We don't sort the others packages to preserve the same (random) ordering
# for the common case (no inc::, no '; authordep') as in previous dzil
# releases.
@@ -103,7 +97,13 @@ sub extract_author_deps {
my @final =
map { { $_ => $vermap->{$_} } }
- grep { $missing ? (! Class::Load::try_load_class($_, ($vermap->{$_} ? {-version => $vermap->{$_}} : ()))) : 1 }
+ grep {
+ $missing
+ ? $_ eq 'perl'
+ ? ($vermap->{perl} ? !eval "use $vermap->{perl}; 1" : ())
+ : (! Class::Load::try_load_class($_, ($vermap->{$_} ? {-version => $vermap->{$_}} : ())))
+ : 1
+ }
List::MoreUtils::uniq
@packages;
@@ -116,13 +116,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Util::AuthorDeps - Utils for listing your distribution's author dependencies
=head1 VERSION
-version 4.300030
+version 5.025
=head1 AUTHOR
@@ -130,7 +132,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,12 +1,10 @@
use strict;
use warnings;
package Dist::Zilla::Util;
-{
- $Dist::Zilla::Util::VERSION = '4.300030';
-}
# ABSTRACT: random snippets of code that Dist::Zilla wants
-
+$Dist::Zilla::Util::VERSION = '5.025';
use Carp ();
+use Encode ();
use String::RewritePrefix 0.002; # better string context behavior
{
@@ -26,7 +24,7 @@ use String::RewritePrefix 0.002; # better string context behavior
my ($self, $event) = @_;
return if $self->{abstract};
return $self->{abstract} = $1
- if $event->{content}=~ /^\s*#+\s*ABSTRACT:\s*(.+)$/m;
+ if $event->{content}=~ /^\s*#+\s*ABSTRACT:[ \t]*(\S.*)$/m;
return;
}
sub handle_event {
@@ -49,18 +47,47 @@ use String::RewritePrefix 0.002; # better string context behavior
and $event->{content} =~ /^(?:\S+\s+)+?-+\s+(.+)\n$/s
) {
$self->{abstract} = $1;
+ $self->{abstract} =~ s/\s+/\x20/g;
}
}
}
+#pod =method abstract_from_file
+#pod
+#pod This method, I<which is likely to change or go away>, tries to guess the
+#pod abstract of a given file, assuming that it's Perl code. It looks for a POD
+#pod C<=head1> section called "NAME" or a comment beginning with C<ABSTRACT:>.
+#pod
+#pod =cut
sub abstract_from_file {
my ($self, $file) = @_;
my $e = Dist::Zilla::Util::PEA->_new;
- $e->read_string($file->content);
+
+ my $chars = $file->content;
+ my $bytes = Encode::encode('UTF-8', $chars, Encode::FB_CROAK);
+
+ $e->read_string($bytes);
+
return $e->{abstract};
}
+#pod =method expand_config_package_name
+#pod
+#pod my $pkg_name = Util->expand_config_package_name($string);
+#pod
+#pod This method, I<which is likely to change or go away>, rewrites the given string
+#pod into a package name.
+#pod
+#pod Prefixes are rewritten as follows:
+#pod
+#pod =for :list
+#pod * C<=> becomes nothing
+#pod * C<@> becomes C<Dist::Zilla::PluginBundle::>
+#pod * C<%> becomes C<Dist::Zilla::Stash::>
+#pod * otherwise, C<Dist::Zilla::Plugin::> is prepended
+#pod
+#pod =cut
sub expand_config_package_name {
my ($self, $package) = @_;
@@ -99,8 +126,8 @@ sub _assert_loaded_class_version_ok {
my $have_version = $pkg->VERSION;
unless ($req->accepts_module($pkg => $have_version)) {
- Carp::confess( sprintf
- "%s version (%s) not match required version: %s",
+ die( sprintf
+ "%s version (%s) does not match required version: %s\n",
$pkg,
$have_version,
$version,
@@ -114,13 +141,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla::Util - random snippets of code that Dist::Zilla wants
=head1 VERSION
-version 4.300030
+version 5.025
=head1 METHODS
@@ -135,8 +164,29 @@ C<=head1> section called "NAME" or a comment beginning with C<ABSTRACT:>.
my $pkg_name = Util->expand_config_package_name($string);
This method, I<which is likely to change or go away>, rewrites the given string
-into a package name. Consult L<Dist::Zilla::Config|Dist::Zilla::Config> for
-more information.
+into a package name.
+
+Prefixes are rewritten as follows:
+
+=over 4
+
+=item *
+
+C<=> becomes nothing
+
+=item *
+
+C<@> becomes C<Dist::Zilla::PluginBundle::>
+
+=item *
+
+C<%> becomes C<Dist::Zilla::Stash::>
+
+=item *
+
+otherwise, C<Dist::Zilla::Plugin::> is prepended
+
+=back
=head1 AUTHOR
@@ -144,7 +194,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,11 @@
package Dist::Zilla;
-{
- $Dist::Zilla::VERSION = '4.300030';
-}
# ABSTRACT: distribution builder; installer not included!
+$Dist::Zilla::VERSION = '5.025';
use Moose 0.92; # role composition fixes
with 'Dist::Zilla::Role::ConfigDumper';
+# This comment has fün̈n̈ÿ characters.
+
use Moose::Autobox 0.09; # ->flatten
use MooseX::Types::Moose qw(ArrayRef Bool HashRef Object Str);
use MooseX::Types::Perl qw(DistName LaxVersionStr);
@@ -14,9 +14,9 @@ use Moose::Util::TypeConstraints;
use Dist::Zilla::Types qw(License);
-use Hash::Merge::Simple ();
use Log::Dispatchouli 1.100712; # proxy_loggers, quiet_fatal
use Path::Class;
+use Path::Tiny;
use List::Util qw(first);
use Software::License 0.101370; # meta2_name
use String::RewritePrefix;
@@ -29,6 +29,21 @@ use Dist::Zilla::Util;
use namespace::autoclean;
+#pod =head1 DESCRIPTION
+#pod
+#pod Dist::Zilla builds distributions of code to be uploaded to the CPAN. In this
+#pod respect, it is like L<ExtUtils::MakeMaker>, L<Module::Build>, or
+#pod L<Module::Install>. Unlike those tools, however, it is not also a system for
+#pod installing code that has been downloaded from the CPAN. Since it's only run by
+#pod authors, and is meant to be run on a repository checkout rather than on
+#pod published, released code, it can do much more than those tools, and is free to
+#pod make much more ludicrous demands in terms of prerequisites.
+#pod
+#pod If you have access to the web, you can learn more and find an interactive
+#pod tutorial at B<L<dzil.org|http://dzil.org/>>. If not, try
+#pod L<Dist::Zilla::Tutorial>.
+#pod
+#pod =cut
has chrome => (
is => 'rw',
@@ -36,6 +51,13 @@ has chrome => (
required => 1,
);
+#pod =attr name
+#pod
+#pod The name attribute (which is required) gives the name of the distribution to be
+#pod built. This is usually the name of the distribution's main module, with the
+#pod double colons (C<::>) replaced with dashes. For example: C<Dist-Zilla>.
+#pod
+#pod =cut
has name => (
is => 'ro',
@@ -44,6 +66,11 @@ has name => (
builder => '_build_name',
);
+#pod =attr version
+#pod
+#pod This is the version of the distribution to be created.
+#pod
+#pod =cut
has _version_override => (
isa => LaxVersionStr,
@@ -95,6 +122,12 @@ sub _build_version {
$version;
}
+#pod =attr abstract
+#pod
+#pod This is a one-line summary of the distribution. If none is given, one will be
+#pod looked for in the L</main_module> of the dist.
+#pod
+#pod =cut
has abstract => (
is => 'rw',
@@ -108,7 +141,7 @@ has abstract => (
}
my $file = $self->main_module;
- $self->log("extracting distribution abstract from " . $file->name);
+ $self->log_debug("extracting distribution abstract from " . $file->name);
my $abstract = Dist::Zilla::Util->abstract_from_file($file);
if (!defined($abstract)) {
@@ -122,6 +155,20 @@ has abstract => (
}
);
+#pod =attr main_module
+#pod
+#pod This is the module where Dist::Zilla might look for various defaults, like
+#pod the distribution abstract. By default, it's derived from the distribution
+#pod name. If your distribution is Foo-Bar, and F<lib/Foo/Bar.pm> exists,
+#pod that's the main_module. Otherwise, it's the shortest-named module in the
+#pod distribution. This may change!
+#pod
+#pod You can override the default by specifying the file path explicitly,
+#pod ie:
+#pod
+#pod main_module = lib/Foo/Bar.pm
+#pod
+#pod =cut
has _main_module_override => (
isa => 'Str',
@@ -140,14 +187,13 @@ has main_module => (
my ($self) = @_;
my $file;
- my $guessing = q{};
my $guess;
if ( $self->_has_main_module_override ) {
$file = first { $_->name eq $self->_main_module_override }
$self->files->flatten;
} else {
- $guessing = 'guessing '; # We're having to guess
+ # We're having to guess
($guess = $self->name) =~ s{-}{/}g;
$guess = "lib/$guess.pm";
@@ -157,6 +203,7 @@ has main_module => (
->grep(sub { $_->name =~ m{\.pm\z} and $_->name =~ m{\Alib/} })
->sort(sub { length $_[0]->name <=> length $_[1]->name })
->head;
+ $self->log("guessing dist's main_module is " . ($file ? $file->name : $guess));
}
if (not $file) {
@@ -176,12 +223,25 @@ has main_module => (
push @errorlines,"Cannot continue without a main_module";
$self->log_fatal( join qq{\n}, @errorlines );
}
- $self->log("${guessing}dist's main_module is " . $file->name);
+ $self->log_debug("dist's main_module is " . $file->name);
return $file;
},
);
+#pod =attr license
+#pod
+#pod This is the L<Software::License|Software::License> object for this dist's
+#pod license and copyright.
+#pod
+#pod It will be created automatically, if possible, with the
+#pod C<copyright_holder> and C<copyright_year> attributes. If necessary, it will
+#pod try to guess the license from the POD of the dist's main module.
+#pod
+#pod A better option is to set the C<license> name in the dist's config to something
+#pod understandable, like C<Perl_5>.
+#pod
+#pod =cut
has license => (
is => 'ro',
@@ -238,7 +298,8 @@ sub _build_license {
if (@guess != 1) {
$self->log_fatal(
"no license data in config, no %Rights stash,",
- "couldn't make a good guess at license from Pod; giving up"
+ "couldn't make a good guess at license from Pod; giving up. ",
+ "Perhaps you need to set up a global config file (dzil setup)?"
);
}
@@ -247,7 +308,7 @@ sub _build_license {
$self->log("based on POD in $filename, guessing license is $guess[0]");
}
- Class::MOP::load_class($license_class);
+ Class::Load::load_class($license_class);
my $license = $license_class->new({
holder => $self->_copyright_holder,
@@ -307,6 +368,18 @@ has _copyright_year => (
}
);
+#pod =attr authors
+#pod
+#pod This is an arrayref of author strings, like this:
+#pod
+#pod [
+#pod 'Ricardo Signes <rjbs@cpan.org>',
+#pod 'X. Ample, Jr <example@example.biz>',
+#pod ]
+#pod
+#pod This is likely to change at some point in the near future.
+#pod
+#pod =cut
has authors => (
is => 'ro',
@@ -329,6 +402,16 @@ has authors => (
},
);
+#pod =attr files
+#pod
+#pod This is an arrayref of objects implementing L<Dist::Zilla::Role::File> that
+#pod will, if left in this arrayref, be built into the dist.
+#pod
+#pod Non-core code should avoid altering this arrayref, but sometimes there is not
+#pod other way to change the list of files. In the future, the representation used
+#pod for storing files B<will be changed>.
+#pod
+#pod =cut
has files => (
is => 'ro',
@@ -351,6 +434,12 @@ sub prune_file {
return;
}
+#pod =attr root
+#pod
+#pod This is the root directory of the dist, as a L<Path::Class::Dir>. It will
+#pod nearly always be the current working directory in which C<dzil> was run.
+#pod
+#pod =cut
has root => (
is => 'ro',
@@ -359,6 +448,11 @@ has root => (
required => 1,
);
+#pod =attr is_trial
+#pod
+#pod This attribute tells us whether or not the dist will be a trial release.
+#pod
+#pod =cut
has is_trial => (
is => 'rw', # XXX: make SetOnce -- rjbs, 2010-03-23
@@ -366,6 +460,15 @@ has is_trial => (
default => sub { $ENV{TRIAL} ? 1 : 0 }
);
+#pod =attr plugins
+#pod
+#pod This is an arrayref of plugins that have been plugged into this Dist::Zilla
+#pod object.
+#pod
+#pod Non-core code B<must not> alter this arrayref. Public access to this attribute
+#pod B<may go away> in the future.
+#pod
+#pod =cut
has plugins => (
is => 'ro',
@@ -374,6 +477,13 @@ has plugins => (
default => sub { [ ] },
);
+#pod =attr distmeta
+#pod
+#pod This is a hashref containing the metadata about this distribution that will be
+#pod stored in META.yml or META.json. You should not alter the metadata in this
+#pod hash; use a MetaProvider plugin instead.
+#pod
+#pod =cut
has distmeta => (
is => 'ro',
@@ -386,16 +496,18 @@ has distmeta => (
sub _build_distmeta {
my ($self) = @_;
+ require CPAN::Meta::Merge;
+ my $meta_merge = CPAN::Meta::Merge->new(default_version => 2);
my $meta = {
'meta-spec' => {
version => 2,
- url => 'http://github.com/dagolden/cpan-meta/',
+ url => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec',
},
name => $self->name,
version => $self->version,
abstract => $self->abstract,
author => $self->authors,
- license => $self->license->meta2_name,
+ license => [ $self->license->meta2_name ],
# XXX: what about unstable?
release_status => ($self->is_trial or $self->version =~ /_/)
@@ -408,23 +520,36 @@ sub _build_distmeta {
. (defined $self->VERSION ? $self->VERSION : '(undef)')
};
- $meta = Hash::Merge::Simple::merge($meta, $_->metadata)
- for $self->plugins_with(-MetaProvider)->flatten;
+ for ($self->plugins_with(-MetaProvider)->flatten) {
+ $meta = $meta_merge->merge($meta, $_->metadata);
+ }
return $meta;
}
sub _metadata_generator_id { 'Dist::Zilla' }
+#pod =attr prereqs
+#pod
+#pod This is a L<Dist::Zilla::Prereqs> object, which is a thin layer atop
+#pod L<CPAN::Meta::Prereqs>, and describes the distribution's prerequisites.
+#pod
+#pod =cut
has prereqs => (
is => 'ro',
isa => 'Dist::Zilla::Prereqs',
init_arg => undef,
+ lazy => 1,
default => sub { Dist::Zilla::Prereqs->new },
handles => [ qw(register_prereqs) ],
);
+#pod =method plugin_named
+#pod
+#pod my $plugin = $zilla->plugin_named( $plugin_name );
+#pod
+#pod =cut
sub plugin_named {
my ($self, $name) = @_;
@@ -434,6 +559,15 @@ sub plugin_named {
return;
}
+#pod =method plugins_with
+#pod
+#pod my $roles = $zilla->plugins_with( -SomeRole );
+#pod
+#pod This method returns an arrayref containing all the Dist::Zilla object's plugins
+#pod that perform a the named role. If the given role name begins with a dash, the
+#pod dash is replaced with "Dist::Zilla::Role::"
+#pod
+#pod =cut
sub plugins_with {
my ($self, $role) = @_;
@@ -444,6 +578,16 @@ sub plugins_with {
return $plugins;
}
+#pod =method find_files
+#pod
+#pod my $files = $zilla->find_files( $finder_name );
+#pod
+#pod This method will look for a
+#pod L<FileFinder|Dist::Zilla::Role::FileFinder>-performing plugin with the given
+#pod name and return the result of calling C<find_files> on it. If no plugin can be
+#pod found, an exception will be raised.
+#pod
+#pod =cut
sub find_files {
my ($self, $finder_name) = @_;
@@ -492,18 +636,24 @@ sub _write_out_file {
Carp::croak("attempted to write $to multiple times") if -e $to;
- open my $out_fh, '>', "$to" or die "couldn't open $to to write: $!";
-
- # This is needed, or \n is translated to \r\n on win32.
- # Maybe :raw:utf8 is needed, but not sure.
- # -- Kentnl - 2010-06-10
- binmode( $out_fh , ":raw" );
-
- print { $out_fh } $file->content;
- close $out_fh or die "error closing $to: $!";
+ path("$to")->spew_raw( $file->encoded_content );
chmod $file->mode, "$to" or die "couldn't chmod $to: $!";
}
+#pod =attr logger
+#pod
+#pod This attribute stores a L<Log::Dispatchouli::Proxy> object, used to log
+#pod messages. By default, a proxy to the dist's L<Chrome|Dist::Zilla::Chrome> is
+#pod taken.
+#pod
+#pod The following methods are delegated from the Dist::Zilla object to the logger:
+#pod
+#pod =for :list
+#pod * log
+#pod * log_debug
+#pod * log_fatal
+#pod
+#pod =cut
has logger => (
is => 'ro',
@@ -536,6 +686,15 @@ has _global_stashes => (
default => sub { {} },
);
+#pod =method stash_named
+#pod
+#pod my $stash = $zilla->stash_named( $name );
+#pod
+#pod This method will return the stash with the given name, or undef if none exists.
+#pod It looks for a local stash (for this dist) first, then falls back to a global
+#pod stash (from the user's global configuration).
+#pod
+#pod =cut
sub stash_named {
my ($self, $name) = @_;
@@ -547,17 +706,77 @@ sub stash_named {
__PACKAGE__->meta->make_immutable;
1;
+#pod =head1 SUPPORT
+#pod
+#pod There are usually people on C<irc.perl.org> in C<#distzilla>, even if they're
+#pod idling.
+#pod
+#pod The L<Dist::Zilla website|http://dzil.org/> has several valuable resources for
+#pod learning to use Dist::Zilla.
+#pod
+#pod There is a mailing list to discuss Dist::Zilla. You can L<join the
+#pod list|http://www.listbox.com/subscribe/?list_id=139292> or L<browse the
+#pod archives|http://listbox.com/member/archive/139292>.
+#pod
+#pod =head1 SEE ALSO
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod In the Dist::Zilla distribution:
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod Plugin bundles:
+#pod L<@Basic|Dist::Zilla::PluginBundle::Basic>,
+#pod L<@Filter|Dist::Zilla::PluginBundle::Filter>.
+#pod
+#pod =item *
+#pod
+#pod Major plugins:
+#pod L<GatherDir|Dist::Zilla::Plugin::GatherDir>,
+#pod L<Prereqs|Dist::Zilla::Plugin::Prereqs>,
+#pod L<AutoPrereqs|Dist::Zilla::Plugin::AutoPrereqs>,
+#pod L<MetaYAML|Dist::Zilla::Plugin::MetaYAML>,
+#pod L<MetaJSON|Dist::Zilla::Plugin::MetaJSON>,
+#pod ...
+#pod
+#pod =back
+#pod
+#pod =item *
+#pod
+#pod On the CPAN:
+#pod
+#pod =over 4
+#pod
+#pod =item *
+#pod
+#pod Search for plugins: L<https://metacpan.org/search?q=Dist::Zilla::Plugin::>
+#pod
+#pod =item *
+#pod
+#pod Search for plugin bundles: L<https://metacpan.org/search?q=Dist::Zilla::PluginBundle::>
+#pod
+#pod =back
+#pod
+#pod =back
+
__END__
=pod
+=encoding UTF-8
+
=head1 NAME
Dist::Zilla - distribution builder; installer not included!
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -782,7 +1001,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,11 +1,8 @@
use strict;
use warnings;
package Test::DZil;
-{
- $Test::DZil::VERSION = '4.300030';
-}
# ABSTRACT: tools for testing Dist::Zilla plugins
-
+$Test::DZil::VERSION = '5.025';
use Dist::Zilla::Tester;
use Params::Util qw(_HASH0);
use JSON 2;
@@ -26,7 +23,31 @@ use Sub::Exporter -setup => {
groups => [ default => [ qw(-all) ] ],
};
-
+#pod =head1 DESCRIPTION
+#pod
+#pod Test::DZil provides routines for writing tests for Dist::Zilla plugins.
+#pod
+#pod =cut
+
+#pod =func Builder
+#pod
+#pod =func Minter
+#pod
+#pod my $tzil = Builder->from_config(...);
+#pod
+#pod These return class names that subclass L<Dist::Zilla::Dist::Builder> or
+#pod L<Dist::Zilla::Dist::Minter>, respectively, with the L<Dist::Zilla::Tester>
+#pod behavior added.
+#pod
+#pod =func is_filelist
+#pod
+#pod is_filelist( \@files_we_have, \@files_we_want, $desc );
+#pod
+#pod This test assertion compares two arrayrefs of filenames, taking care of slash
+#pod normalization and sorting. C<@files_we_have> may also contain objects that
+#pod do L<Dist::Zilla::Role::File>.
+#pod
+#pod =cut
sub is_filelist {
my ($have, $want, $comment) = @_;
@@ -42,6 +63,14 @@ sub is_filelist {
Test::More::is_deeply(\@have, \@want, $comment);
}
+#pod =func is_yaml
+#pod
+#pod is_yaml( $yaml_string, $want_struct, $comment );
+#pod
+#pod This test assertion deserializes the given YAML string and does a
+#pod C<L<cmp_deeply|Test::Deep/cmp_deeply>>.
+#pod
+#pod =cut
sub is_yaml {
my ($yaml, $want, $comment) = @_;
@@ -53,6 +82,14 @@ sub is_yaml {
Test::Deep::cmp_deeply($have->[0], $want, $comment);
}
+#pod =func is_json
+#pod
+#pod is_json( $json_string, $want_struct, $comment );
+#pod
+#pod This test assertion deserializes the given JSON string and does a
+#pod C<L<cmp_deeply|Test::Deep/cmp_deeply>>.
+#pod
+#pod =cut
sub is_json {
my ($json, $want, $comment) = @_;
@@ -113,11 +150,70 @@ sub _build_ini_builder {
}
}
+#pod =func dist_ini
+#pod
+#pod my $ini_text = dist_ini(\%root_config, @plugins);
+#pod
+#pod This routine returns a string that could be used to populate a simple
+#pod F<dist.ini> file. The C<%root_config> gives data for the "root" section of the
+#pod configuration. To provide a line multiple times, provide an arrayref. For
+#pod example, the root section could read:
+#pod
+#pod {
+#pod name => 'Dist-Sample',
+#pod author => [
+#pod 'J. Smith <jsmith@example.com>',
+#pod 'Q. Smith <qsmith@example.com>',
+#pod ],
+#pod }
+#pod
+#pod The root section is optional.
+#pod
+#pod Plugins can be given in a few ways:
+#pod
+#pod =begin :list
+#pod
+#pod = C<"PluginMoniker">
+#pod
+#pod = C<[ "PluginMoniker" ]>
+#pod
+#pod These become C<[PluginMoniker]>
+#pod
+#pod = C<[ "PluginMoniker", "PluginName" ]>
+#pod
+#pod This becomes C<[PluginMoniker / PluginName]>
+#pod
+#pod = C<[ "PluginMoniker", { ... } ]>
+#pod
+#pod = C<[ "PluginMoniker", "PluginName", { ... } ]>
+#pod
+#pod These use the given hashref as the parameters inside the section, with the same
+#pod semantics as the root section.
+#pod
+#pod =end :list
+#pod
+#pod =cut
sub _dist_ini {
_build_ini_builder;
}
+#pod =func simple_ini
+#pod
+#pod This behaves exactly like C<dist_ini>, but it merges any given root config into
+#pod a starter config, which means that you can often skip any explicit root config.
+#pod The starter config may change slightly over time, but is something like this:
+#pod
+#pod {
+#pod name => 'DZT-Sample',
+#pod abstract => 'Sample DZ Dist',
+#pod version => '0.001',
+#pod author => 'E. Xavier Ample <example@example.org>',
+#pod license => 'Perl_5',
+#pod copyright_holder => 'E. Xavier Ample',
+#pod }
+#pod
+#pod =cut
sub _simple_ini {
_build_ini_builder({
@@ -136,13 +232,15 @@ __END__
=pod
+=encoding UTF-8
+
=head1 NAME
Test::DZil - tools for testing Dist::Zilla plugins
=head1 VERSION
-version 4.300030
+version 5.025
=head1 DESCRIPTION
@@ -245,7 +343,7 @@ Ricardo SIGNES <rjbs@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Ricardo SIGNES.
+This software is copyright (c) 2014 by Ricardo SIGNES.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -1,73 +0,0 @@
-#!perl
-
-use strict;
-use warnings;
-
-use Test::More;
-
-
-
-use File::Find;
-use File::Temp qw{ tempdir };
-
-my @modules;
-find(
- sub {
- return if $File::Find::name !~ /\.pm\z/;
- my $found = $File::Find::name;
- $found =~ s{^lib/}{};
- $found =~ s{[/\\]}{::}g;
- $found =~ s/\.pm$//;
- return if $found =~ /Dist::Zilla::Tutorial/;
- push @modules, $found;
- },
- 'lib',
-);
-
-sub _find_scripts {
- my $dir = shift @_;
-
- my @found_scripts = ();
- find(
- sub {
- return unless -f;
- my $found = $File::Find::name;
- return if $found =~ /Dist::Zilla::Tutorial/;
- open my $FH, '<', $_ or do {
- note( "Unable to open $found in ( $! ), skipping" );
- return;
- };
- my $shebang = <$FH>;
- return unless $shebang =~ /^#!.*?\bperl\b\s*$/;
- push @found_scripts, $found;
- },
- $dir,
- );
-
- return @found_scripts;
-}
-
-my @scripts;
-do { push @scripts, _find_scripts($_) if -d $_ }
- for qw{ bin script scripts };
-
-my $plan = scalar(@modules) + scalar(@scripts);
-$plan ? (plan tests => $plan) : (plan skip_all => "no tests to run");
-
-{
- # fake home for cpan-testers
- # no fake requested ## local $ENV{HOME} = tempdir( CLEANUP => 1 );
-
- like( qx{ $^X -Ilib -e "require $_; print '$_ ok'" }, qr/^\s*$_ ok/s, "$_ loaded ok" )
- for sort @modules;
-
- SKIP: {
- eval "use Test::Script 1.05; 1;";
- skip "Test::Script needed to test script compilation", scalar(@scripts) if $@;
- foreach my $file ( @scripts ) {
- my $script = $file;
- $script =~ s!.*/!!;
- script_compiles( $file, "$script script compiles" );
- }
- }
-}
@@ -0,0 +1,131 @@
+do { my $x = {
+ 'configure' => {
+ 'requires' => {
+ 'ExtUtils::MakeMaker' => '0',
+ 'File::ShareDir::Install' => '0.06'
+ }
+ },
+ 'develop' => {
+ 'requires' => {
+ 'Test::Pod' => '1.41'
+ }
+ },
+ 'runtime' => {
+ 'recommends' => {
+ 'Archive::Tar::Wrapper' => '0.15',
+ 'Term::ReadLine::Gnu' => '0'
+ },
+ 'requires' => {
+ 'App::Cmd::Command::version' => '0',
+ 'App::Cmd::Setup' => '0.309',
+ 'App::Cmd::Tester' => '0.306',
+ 'App::Cmd::Tester::CaptureExternal' => '0',
+ 'Archive::Tar' => '0',
+ 'CPAN::Meta::Converter' => '2.101550',
+ 'CPAN::Meta::Merge' => '0',
+ 'CPAN::Meta::Prereqs' => '2.120630',
+ 'CPAN::Meta::Requirements' => '2.121',
+ 'CPAN::Meta::Validator' => '2.101550',
+ 'CPAN::Uploader' => '0.103004',
+ 'Carp' => '0',
+ 'Class::Load' => '0.17',
+ 'Config::INI::Reader' => '0',
+ 'Config::MVP::Assembler' => '0',
+ 'Config::MVP::Assembler::WithBundles' => '0',
+ 'Config::MVP::Reader' => '2.101540',
+ 'Config::MVP::Reader::Findable::ByExtension' => '0',
+ 'Config::MVP::Reader::Finder' => '0',
+ 'Config::MVP::Reader::INI' => '2',
+ 'Config::MVP::Section' => '2.200002',
+ 'Data::Dumper' => '0',
+ 'Data::Section' => '0.200002',
+ 'DateTime' => '0.44',
+ 'Digest::MD5' => '0',
+ 'Encode' => '0',
+ 'ExtUtils::Manifest' => '1.66',
+ 'File::Copy::Recursive' => '0',
+ 'File::Find::Rule' => '0',
+ 'File::HomeDir' => '0',
+ 'File::Path' => '0',
+ 'File::ShareDir' => '0',
+ 'File::ShareDir::Install' => '0.03',
+ 'File::Spec' => '0',
+ 'File::Temp' => '0',
+ 'File::pushd' => '0',
+ 'JSON' => '2',
+ 'List::MoreUtils' => '0',
+ 'List::Util' => '1.33',
+ 'Log::Dispatchouli' => '1.102220',
+ 'Mixin::Linewise::Readers' => '0.100',
+ 'Module::CoreList' => '0',
+ 'Moose' => '0.92',
+ 'Moose::Autobox' => '0.09',
+ 'Moose::Role' => '0',
+ 'Moose::Util::TypeConstraints' => '0',
+ 'MooseX::LazyRequire' => '0',
+ 'MooseX::Role::Parameterized' => '0',
+ 'MooseX::SetOnce' => '0',
+ 'MooseX::Types' => '0',
+ 'MooseX::Types::Moose' => '0',
+ 'MooseX::Types::Path::Class' => '0',
+ 'MooseX::Types::Perl' => '0',
+ 'PPI::Document' => '0',
+ 'Params::Util' => '0',
+ 'Path::Class' => '0.22',
+ 'Path::Tiny' => '0',
+ 'Perl::PrereqScanner' => '1.016',
+ 'Perl::Version' => '0',
+ 'Pod::Eventual' => '0.091480',
+ 'Scalar::Util' => '0',
+ 'Software::License' => '0.101370',
+ 'Software::LicenseUtils' => '0',
+ 'Storable' => '0',
+ 'String::Formatter' => '0.100680',
+ 'String::RewritePrefix' => '0.005',
+ 'Sub::Exporter' => '0',
+ 'Sub::Exporter::ForMethods' => '0',
+ 'Sub::Exporter::Util' => '0',
+ 'Term::Encoding' => '0',
+ 'Term::ReadKey' => '0',
+ 'Term::ReadLine' => '0',
+ 'Term::UI' => '0',
+ 'Test::Deep' => '0',
+ 'Text::Glob' => '0.08',
+ 'Text::Template' => '0',
+ 'Try::Tiny' => '0',
+ 'YAML::Tiny' => '0',
+ 'autobox' => '2.53',
+ 'autodie' => '0',
+ 'namespace::autoclean' => '0',
+ 'parent' => '0',
+ 'perl' => 'v5.8.5',
+ 'strict' => '0',
+ 'version' => '0',
+ 'warnings' => '0'
+ },
+ 'suggests' => {
+ 'PPI::XS' => '0'
+ }
+ },
+ 'test' => {
+ 'recommends' => {
+ 'CPAN::Meta' => '2.120900'
+ },
+ 'requires' => {
+ 'CPAN::Meta::Check' => '0.007',
+ 'CPAN::Meta::Requirements' => '2.121',
+ 'ExtUtils::MakeMaker' => '0',
+ 'ExtUtils::Manifest' => '1.66',
+ 'File::Spec' => '0',
+ 'Software::License::None' => '0',
+ 'Test::FailWarnings' => '0',
+ 'Test::Fatal' => '0',
+ 'Test::File::ShareDir' => '0',
+ 'Test::More' => '0.96',
+ 'lib' => '0',
+ 'utf8' => '0'
+ }
+ }
+ };
+ $x;
+ }
\ No newline at end of file
@@ -0,0 +1,176 @@
+#!perl
+
+use strict;
+use warnings;
+
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.019
+
+use Test::More tests => 1;
+
+use ExtUtils::MakeMaker;
+use File::Spec;
+
+# from $version::LAX
+my $lax_version_re =
+ qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )?
+ |
+ (?:\.[0-9]+) (?:_[0-9]+)?
+ ) | (?:
+ v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )?
+ |
+ (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)?
+ )
+ )/x;
+
+# hide optional CPAN::Meta modules from prereq scanner
+# and check if they are available
+my $cpan_meta = "CPAN::Meta";
+my $cpan_meta_pre = "CPAN::Meta::Prereqs";
+my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic
+
+# Verify requirements?
+my $DO_VERIFY_PREREQS = 1;
+
+sub _max {
+ my $max = shift;
+ $max = ( $_ > $max ) ? $_ : $max for @_;
+ return $max;
+}
+
+sub _merge_prereqs {
+ my ($collector, $prereqs) = @_;
+
+ # CPAN::Meta::Prereqs object
+ if (ref $collector eq $cpan_meta_pre) {
+ return $collector->with_merged_prereqs(
+ CPAN::Meta::Prereqs->new( $prereqs )
+ );
+ }
+
+ # Raw hashrefs
+ for my $phase ( keys %$prereqs ) {
+ for my $type ( keys %{ $prereqs->{$phase} } ) {
+ for my $module ( keys %{ $prereqs->{$phase}{$type} } ) {
+ $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module};
+ }
+ }
+ }
+
+ return $collector;
+}
+
+my @include = qw(
+
+);
+
+my @exclude = qw(
+
+);
+
+# Add static prereqs to the included modules list
+my $static_prereqs = do 't/00-report-prereqs.dd';
+
+# Merge all prereqs (either with ::Prereqs or a hashref)
+my $full_prereqs = _merge_prereqs(
+ ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
+ $static_prereqs
+);
+
+# Add dynamic prereqs to the included modules list (if we can)
+my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+if ( $source && $HAS_CPAN_META ) {
+ if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
+ $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
+ }
+}
+else {
+ $source = 'static metadata';
+}
+
+my @full_reports;
+my @dep_errors;
+my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
+
+# Add static includes into a fake section
+for my $mod (@include) {
+ $req_hash->{other}{modules}{$mod} = 0;
+}
+
+for my $phase ( qw(configure build test runtime develop other) ) {
+ next unless $req_hash->{$phase};
+ next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
+
+ for my $type ( qw(requires recommends suggests conflicts modules) ) {
+ next unless $req_hash->{$phase}{$type};
+
+ my $title = ucfirst($phase).' '.ucfirst($type);
+ my @reports = [qw/Module Want Have/];
+
+ for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
+ next if $mod eq 'perl';
+ next if grep { $_ eq $mod } @exclude;
+
+ my $file = $mod;
+ $file =~ s{::}{/}g;
+ $file .= ".pm";
+ my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC;
+
+ my $want = $req_hash->{$phase}{$type}{$mod};
+ $want = "undef" unless defined $want;
+ $want = "any" if !$want && $want == 0;
+
+ my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required";
+
+ if ($prefix) {
+ my $have = MM->parse_version( File::Spec->catfile($prefix, $file) );
+ $have = "undef" unless defined $have;
+ push @reports, [$mod, $want, $have];
+
+ if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires' ) {
+ if ( $have !~ /\A$lax_version_re\z/ ) {
+ push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)";
+ }
+ elsif ( ! $full_prereqs->requirements_for( $phase, $type )->accepts_module( $mod => $have ) ) {
+ push @dep_errors, "$mod version '$have' is not in required range '$want'";
+ }
+ }
+ }
+ else {
+ push @reports, [$mod, $want, "missing"];
+
+ if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
+ push @dep_errors, "$mod is not installed ($req_string)";
+ }
+ }
+ }
+
+ if ( @reports ) {
+ push @full_reports, "=== $title ===\n\n";
+
+ my $ml = _max( map { length $_->[0] } @reports );
+ my $wl = _max( map { length $_->[1] } @reports );
+ my $hl = _max( map { length $_->[2] } @reports );
+ splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
+
+ push @full_reports, map { sprintf(" %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
+ push @full_reports, "\n";
+ }
+ }
+}
+
+if ( @full_reports ) {
+ diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports;
+}
+
+if ( @dep_errors ) {
+ diag join("\n",
+ "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n",
+ "The following REQUIRED prerequisites were not satisfied:\n",
+ @dep_errors,
+ "\n"
+ );
+}
+
+pass;
+
+# vim: ts=4 sts=4 sw=4 et:
@@ -1,157 +0,0 @@
-use strict;
-use warnings;
-use Test::More 0.88;
-# This is a relatively nice way to avoid Test::NoWarnings breaking our
-# expectations by adding extra tests, without using no_plan. It also helps
-# avoid any other test module that feels introducing random tests, or even
-# test plans, is a nice idea.
-our $success = 0;
-END { $success && done_testing; }
-
-# List our own version used to generate this
-my $v = "\nGenerated by Dist::Zilla::Plugin::ReportVersions::Tiny v1.08\n";
-
-eval { # no excuses!
- # report our Perl details
- my $want = 'v5.8.5';
- $v .= "perl: $] (wanted $want) on $^O from $^X\n\n";
-};
-defined($@) and diag("$@");
-
-# Now, our module version dependencies:
-sub pmver {
- my ($module, $wanted) = @_;
- $wanted = " (want $wanted)";
- my $pmver;
- eval "require $module;";
- if ($@) {
- if ($@ =~ m/Can't locate .* in \@INC/) {
- $pmver = 'module not found.';
- } else {
- diag("${module}: $@");
- $pmver = 'died during require.';
- }
- } else {
- my $version;
- eval { $version = $module->VERSION; };
- if ($@) {
- diag("${module}: $@");
- $pmver = 'died during VERSION check.';
- } elsif (defined $version) {
- $pmver = "$version";
- } else {
- $pmver = '<undef>';
- }
- }
-
- # So, we should be good, right?
- return sprintf('%-45s => %-10s%-15s%s', $module, $pmver, $wanted, "\n");
-}
-
-eval { $v .= pmver('App::Cmd::Setup','0.309') };
-eval { $v .= pmver('App::Cmd::Tester','0.306') };
-eval { $v .= pmver('App::Cmd::Tester::CaptureExternal','any version') };
-eval { $v .= pmver('Archive::Tar','any version') };
-eval { $v .= pmver('CPAN::Meta::Converter','2.101550') };
-eval { $v .= pmver('CPAN::Meta::Prereqs','2.120630') };
-eval { $v .= pmver('CPAN::Meta::Requirements','2.121') };
-eval { $v .= pmver('CPAN::Meta::Validator','2.101550') };
-eval { $v .= pmver('CPAN::Uploader','0.101550') };
-eval { $v .= pmver('Carp','any version') };
-eval { $v .= pmver('Class::Load','0.17') };
-eval { $v .= pmver('Config::INI::Reader','any version') };
-eval { $v .= pmver('Config::MVP::Assembler','any version') };
-eval { $v .= pmver('Config::MVP::Assembler::WithBundles','any version') };
-eval { $v .= pmver('Config::MVP::Reader','2.101540') };
-eval { $v .= pmver('Config::MVP::Reader::Findable::ByExtension','any version') };
-eval { $v .= pmver('Config::MVP::Reader::Finder','any version') };
-eval { $v .= pmver('Config::MVP::Reader::INI','2') };
-eval { $v .= pmver('Config::MVP::Section','2.200002') };
-eval { $v .= pmver('Data::Dumper','any version') };
-eval { $v .= pmver('Data::Section','0.004') };
-eval { $v .= pmver('DateTime','0.44') };
-eval { $v .= pmver('Digest::MD5','any version') };
-eval { $v .= pmver('Encode','any version') };
-eval { $v .= pmver('ExtUtils::MakeMaker','6.30') };
-eval { $v .= pmver('ExtUtils::Manifest','1.54') };
-eval { $v .= pmver('File::Copy::Recursive','any version') };
-eval { $v .= pmver('File::Find','any version') };
-eval { $v .= pmver('File::Find::Rule','any version') };
-eval { $v .= pmver('File::HomeDir','any version') };
-eval { $v .= pmver('File::Path','any version') };
-eval { $v .= pmver('File::ShareDir','any version') };
-eval { $v .= pmver('File::ShareDir::Install','0.03') };
-eval { $v .= pmver('File::Spec','any version') };
-eval { $v .= pmver('File::Temp','any version') };
-eval { $v .= pmver('File::pushd','any version') };
-eval { $v .= pmver('Hash::Merge::Simple','any version') };
-eval { $v .= pmver('JSON','2') };
-eval { $v .= pmver('List::AllUtils','any version') };
-eval { $v .= pmver('List::MoreUtils','any version') };
-eval { $v .= pmver('List::Util','any version') };
-eval { $v .= pmver('Log::Dispatchouli','1.102220') };
-eval { $v .= pmver('Moose','0.92') };
-eval { $v .= pmver('Moose::Autobox','0.10') };
-eval { $v .= pmver('Moose::Role','any version') };
-eval { $v .= pmver('Moose::Util::TypeConstraints','any version') };
-eval { $v .= pmver('MooseX::LazyRequire','any version') };
-eval { $v .= pmver('MooseX::Role::Parameterized','any version') };
-eval { $v .= pmver('MooseX::SetOnce','any version') };
-eval { $v .= pmver('MooseX::Types','any version') };
-eval { $v .= pmver('MooseX::Types::Moose','any version') };
-eval { $v .= pmver('MooseX::Types::Path::Class','any version') };
-eval { $v .= pmver('MooseX::Types::Perl','any version') };
-eval { $v .= pmver('PPI','any version') };
-eval { $v .= pmver('Params::Util','any version') };
-eval { $v .= pmver('Path::Class','any version') };
-eval { $v .= pmver('Perl::PrereqScanner','1.005') };
-eval { $v .= pmver('Perl::Version','any version') };
-eval { $v .= pmver('Pod::Eventual','0.091480') };
-eval { $v .= pmver('Scalar::Util','any version') };
-eval { $v .= pmver('Software::License','0.101370') };
-eval { $v .= pmver('Software::License::None','any version') };
-eval { $v .= pmver('Software::LicenseUtils','any version') };
-eval { $v .= pmver('String::Formatter','0.100680') };
-eval { $v .= pmver('String::RewritePrefix','0.005') };
-eval { $v .= pmver('Sub::Exporter','any version') };
-eval { $v .= pmver('Sub::Exporter::ForMethods','any version') };
-eval { $v .= pmver('Sub::Exporter::Util','any version') };
-eval { $v .= pmver('Term::ReadKey','any version') };
-eval { $v .= pmver('Term::ReadLine','any version') };
-eval { $v .= pmver('Term::ReadLine::Gnu','any version') };
-eval { $v .= pmver('Term::UI','any version') };
-eval { $v .= pmver('Test::Deep','any version') };
-eval { $v .= pmver('Test::Fatal','any version') };
-eval { $v .= pmver('Test::File::ShareDir','any version') };
-eval { $v .= pmver('Test::More','0.96') };
-eval { $v .= pmver('Test::Pod','1.41') };
-eval { $v .= pmver('Text::Glob','0.08') };
-eval { $v .= pmver('Text::Template','any version') };
-eval { $v .= pmver('Try::Tiny','any version') };
-eval { $v .= pmver('YAML::Tiny','any version') };
-eval { $v .= pmver('autobox','2.53') };
-eval { $v .= pmver('autodie','any version') };
-eval { $v .= pmver('namespace::autoclean','any version') };
-eval { $v .= pmver('parent','any version') };
-eval { $v .= pmver('strict','any version') };
-eval { $v .= pmver('version','0.9901') };
-eval { $v .= pmver('warnings','any version') };
-
-
-# All done.
-$v .= <<'EOT';
-
-Thanks for using my code. I hope it works for you.
-If not, please try and include this output in the bug report.
-That will help me reproduce the issue and solve your problem.
-
-EOT
-
-diag($v);
-ok(1, "we really didn't test anything, just reporting data");
-$success = 1;
-
-# Work around another nasty module on CPAN. :/
-no warnings 'once';
-$Template::Test::NO_FLUSH = 1;
-exit 0;
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88 tests => 1;
-use lib 't/lib';
-
use autodie;
use Dist::Zilla::Util::AuthorDeps;
@@ -11,14 +9,18 @@ use Path::Class;
my $authordeps =
Dist::Zilla::Util::AuthorDeps::extract_author_deps(
- dir('corpus/dist/AutoPrereqs'),
+ dir('corpus/dist/AuthorDeps'),
0
);
is_deeply(
$authordeps,
- [ map { +{"Dist::Zilla::Plugin::$_" => 0} } qw<AutoPrereqs ExecDir GatherDir MetaYAML> ],
- "authordeps in corpus/dist/AutoPrereqs"
+ [
+ +{ perl => '5.005' },
+ ( map { +{"Dist::Zilla::Plugin::$_" => '5.0'} } qw<AutoPrereqs Encoding ExecDir> ),
+ ( map { +{"Dist::Zilla::Plugin::$_" => 0} } qw<GatherDir MetaYAML> ),
+ ],
+ "authordeps in corpus/dist/AuthorDeps"
) or diag explain $authordeps;
done_testing;
@@ -3,8 +3,6 @@ use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use Test::DZil;
use YAML::Tiny;
@@ -1,4 +1,3 @@
-
use strict;
use warnings;
@@ -0,0 +1,53 @@
+use strict;
+use warnings FATAL => 'all';
+
+use Test::More;
+use Test::DZil;
+use Test::Fatal;
+use Path::Tiny;
+use List::Util 'first';
+
+my $tzil = Builder->from_config(
+ { dist_root => 't/does_not_exist' },
+ {
+ add_files => {
+ path(qw(source dist.ini)) => simple_ini(
+ 'GatherDir',
+ ),
+ path(qw(source lib DZT Sample.pm)) => <<MODULE,
+package DZT::Sample;
+
+# ABSTRACT:
+
+return 1;
+__END__
+
+=head1 NAME
+
+DZT::Sample - a sample module for testing handling of empty ABSTRACT comment
+
+=head1 HEY, MAINTAINER
+
+Note that we have C<< =head1 NAME >> here, and an empty ABSTRACT comment.
+
+The empty ABSTRACT comment should be skipped, and the NAME one used.
+
+=cut
+MODULE
+ },
+ },
+);
+
+is(
+ exception { $tzil->build },
+ undef,
+ 'build proceeds normally',
+);
+
+is(
+ Dist::Zilla::Util->abstract_from_file(first { $_->name eq 'lib/DZT/Sample.pm' } @{$tzil->files}),
+ 'a sample module for testing handling of empty ABSTRACT comment',
+ 'We should see the abstract from the =head NAME section in pod',
+);
+
+done_testing;
@@ -0,0 +1,75 @@
+use strict;
+use warnings FATAL => 'all';
+
+use Test::More;
+use Test::DZil;
+use Test::Deep;
+use Test::Fatal;
+use Path::Tiny;
+use List::Util 'first';
+
+my $tzil = Builder->from_config(
+ { dist_root => 't/does_not_exist' },
+ {
+ add_files => {
+ path(qw(source dist.ini)) => simple_ini(
+ 'GatherDir', # a file gatherer (adds OnDisk file)
+ 'PodSyntaxTests', # a file gatherer (adds InMemory file)
+ 'Manifest', # a file gatherer (adds FromCode file)
+
+ # a file munger that changes content
+ [ PkgVersion => { finder => ':AllFiles' } ],
+
+ 'ExtraTests', # a file munger that changes filename
+ ),
+ path(qw(source lib DZT Sample.pm)) => "package DZT::Sample;\n\n1",
+ },
+ },
+);
+
+$tzil->chrome->logger->set_debug(1);
+is(
+ exception { $tzil->build },
+ undef,
+ 'build proceeds normally',
+) or diag 'saw log messages: ', explain $tzil->log_messages;
+
+my $module = first { $_->name eq path(qw(lib DZT Sample.pm)) }
+ @{ $tzil->files };
+
+cmp_deeply(
+ $module,
+ methods(
+ added_by => all(
+ re(qr/\bencoded_content added by GatherDir \(Dist::Zilla::Plugin::GatherDir line \d+\)(;|$)/),
+ re(qr/\bencoded_content set by PkgVersion \(Dist::Zilla::Role::PPI line \d+\)(;|$)/),
+ ),
+ ),
+ 'OnDisk file added by GatherDir, set by PkgVersion has correct properties',
+);
+
+my $test = first { $_->name eq path(qw(t release-pod-syntax.t)) }
+ @{ $tzil->files };
+
+cmp_deeply(
+ $test,
+ methods(
+ added_by => all(
+ re(qr/^content added by PodSyntaxTests \(Dist::Zilla::Plugin::InlineFiles line \d+\)(;|$)/),
+ re(qr/\bcontent set by ExtraTests \(Dist::Zilla::Plugin::ExtraTests line \d+\)(;|$)/),
+ re(qr/\bfilename set by ExtraTests \(Dist::Zilla::Plugin::ExtraTests line \d+\)(;|$)/),
+ ),
+ ),
+ 'InMemory file altered by all of PodSyntaxTests, PkgVersion and ExtraTests has correct properties',
+);
+
+my $manifest = first { $_->name eq path('MANIFEST') } @{ $tzil->files };
+cmp_deeply(
+ $manifest,
+ methods(
+ added_by => re(qr/^bytes from coderef added by Manifest \(Dist::Zilla::Plugin::Manifest line \d+\)$/),
+ ),
+ 'FromCode file added by Manifest has correct properties',
+);
+
+done_testing;
@@ -0,0 +1,207 @@
+use strict;
+use warnings;
+use utf8;
+use Test::More;
+use Test::Fatal;
+use Test::FailWarnings -allow_deps => 1;
+binmode(Test::More->builder->$_, ":utf8") for qw/output failure_output todo_output/;
+
+use Encode;
+use Path::Tiny;
+use Test::DZil;
+use List::Util 'first';
+
+use Dist::Zilla::File::InMemory;
+use Dist::Zilla::File::OnDisk;
+use Dist::Zilla::File::FromCode;
+
+my %sample = (
+ dolmen => "Olivier Mengué",
+ keedi =>"김도형 - Keedi Kim",
+);
+
+my $sample = join("\n", values %sample);
+my $encoded_sample = encode("UTF-8", $sample);
+my $db_sample = $sample x 2;
+my $db_encoded_sample = $encoded_sample x 2;
+my $latin1_dolmen = encode("latin1", $sample{dolmen});
+
+my $tzil = Builder->from_config(
+ { dist_root => 't/does_not_exist' },
+ {
+ add_files => {
+ path(qw(source dist.ini)) => simple_ini(
+ 'GatherDir',
+ ),
+ path(qw(source lib DZT Sample.pm)) => "package DZT::Sample;\n\n1",
+ },
+ },
+);
+
+{
+ # this trickery is so the caller appears to be whatever called new_file()
+ my $gatherdir = first { $_->isa('Dist::Zilla::Plugin::GatherDir') } @{ $tzil->plugins };
+ my $add_file = $gatherdir->can('add_file');
+
+ my $i = 0;
+ sub new_file {
+ my ($objref, $class, @args) = @_;
+ my $obj = $class->new(
+ name => 'foo_' . $i++ . '.txt',
+ @args,
+ );
+ ok($obj, "created a $class");
+ $$objref = $obj;
+
+ # equivalent to: $gatherdir->add_file($obj);
+ @_ = ($gatherdir, $obj); goto &$add_file;
+ }
+}
+
+sub test_mutable_roundtrip {
+ my ($obj) = @_;
+
+ ok( $obj->DOES("Dist::Zilla::Role::MutableFile"), "does MutableFile role" );
+
+ # assumes object content starts as $sample
+ is( $obj->content, $sample, "get content" );
+ is( $obj->encoded_content, $encoded_sample, "get encoded_content" );
+
+ # set content, check content & encoded_content
+ ok( $obj->content($db_sample), "set content");
+ is( $obj->content, $db_sample, "get content");
+ is( $obj->encoded_content, $db_encoded_sample, "get encoded_content");
+
+ # set encoded_content, check encoded_content & content
+ ok( $obj->encoded_content($encoded_sample), "set encoded_content");
+ is( $obj->encoded_content, $encoded_sample, "get encoded_content");
+ is( $obj->content, $sample, "get content");
+}
+
+sub test_content_from_bytes {
+ my ($obj, $source_re) = @_;
+ # assumes object encoded_content is encoded sample
+ is( $obj->encoded_content, $encoded_sample, "get encoded_content" );
+ my $err = exception { $obj->content };
+ like(
+ $err,
+ qr/can't decode text from 'bytes'/i,
+ "get content from bytes should throw error"
+ );
+ # Match only the first line of the stack trace
+ like( $err, qr/^[^\n]+$source_re/s, "error shows encoded_content source" );
+}
+
+sub test_latin1 {
+ my ($obj) = @_;
+ # assumes encoded_content is $latin1_dolmen and encoding
+ # is already set to 'latin1"
+ is( $obj->encoded_content, $latin1_dolmen, "get encoded_content" );
+ is( $obj->content, $sample{dolmen}, "get content" );
+}
+
+subtest "OnDisk" => sub {
+ my $class = "Dist::Zilla::File::OnDisk";
+
+ subtest "UTF-8 file" => sub {
+ my $tempfile = Path::Tiny->tempfile;
+
+ ok( $tempfile->spew_utf8($sample), "create UTF-8 encoded tempfile" );
+ my $obj;
+ new_file(\$obj, $class, name => "$tempfile");
+ test_mutable_roundtrip($obj);
+ };
+
+ subtest "binary file" => sub {
+ my $tempfile = Path::Tiny->tempfile;
+
+ ok( $tempfile->spew_raw($encoded_sample), "create binary tempfile" );
+ my $obj;
+ new_file(\$obj, $class, name => "$tempfile");
+ ok( $obj->encoding("bytes"), "set encoding to 'bytes'");
+ test_content_from_bytes($obj, qr/encoded_content added by \S+ \(\S+ line \d+\)/);
+ };
+
+ subtest "latin1 file" => sub {
+ my $tempfile = Path::Tiny->tempfile;
+
+ ok(
+ $tempfile->spew( { binmode => ":encoding(latin1)"}, $sample{dolmen} ),
+ "create latin1 tempfile"
+ );
+ my $obj;
+ new_file(\$obj, $class, name => "$tempfile", encoding => 'latin1');
+ test_latin1($obj);
+ };
+
+};
+
+subtest "InMemory" => sub {
+ my $class = "Dist::Zilla::File::InMemory";
+
+ subtest "UTF-8 string" => sub {
+ my $obj;
+ new_file(\$obj, $class, content => $sample);
+ test_mutable_roundtrip($obj);
+ };
+
+ subtest "binary string" => sub {
+ my ($obj, $line);
+ new_file(\$obj, $class, encoded_content => $encoded_sample); $line = __LINE__;
+ ok( $obj->encoding("bytes"), "set encoding to 'bytes'");
+ test_content_from_bytes($obj, qr/encoded_content added by \S+ \(\S+ line $line\)/);
+ };
+
+ subtest "latin1 string" => sub {
+ my $obj;
+ new_file(\$obj, $class, encoded_content => $latin1_dolmen, encoding => "latin1");
+ test_latin1($obj);
+ };
+
+};
+
+subtest "FromCode" => sub {
+ my $class = "Dist::Zilla::File::FromCode";
+
+ subtest "UTF-8 string" => sub {
+ my $obj;
+ new_file(\$obj, $class, code => sub { $sample });
+ is( $obj->content, $sample, "content" );
+ is( $obj->encoded_content, $encoded_sample, "encoded_content" );
+ };
+
+ subtest "content immutable" => sub {
+ my $obj;
+ new_file(\$obj, $class, code => sub { $sample });
+ like(
+ exception { $obj->content($sample) },
+ qr/cannot set content/,
+ "changing content should throw error"
+ );
+ like(
+ exception { $obj->encoded_content($encoded_sample) },
+ qr/cannot set encoded_content/,
+ "changing encoded_content should throw error"
+ );
+ };
+
+ subtest "binary string" => sub {
+ my ($obj, $line);
+ new_file(\$obj, $class, code_return_type => 'bytes', code => sub { $encoded_sample }); $line = __LINE__;
+ test_content_from_bytes($obj, qr/bytes from coderef added by \S+ \(main line $line\)/);
+ };
+
+ subtest "latin1 string" => sub {
+ my $obj;
+ new_file(\$obj, $class, (
+ code_return_type => 'bytes',
+ code => sub { $latin1_dolmen },
+ encoding => 'latin1',
+ )
+ );
+ test_latin1($obj);
+ };
+
+};
+
+done_testing;
@@ -1,11 +1,8 @@
-#!perl
use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use File::pushd qw/pushd/;
use Path::Class;
use Test::DZil;
@@ -1,11 +1,8 @@
-#!perl
use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use Test::DZil;
use YAML::Tiny;
@@ -44,6 +41,7 @@ my %wanted = (
'DZPA::Role' => 0,
'DZPA::ScriptUse' => 0,
'base' => 0,
+ 'lib' => 0,
'parent' => 0,
'perl' => 5.008,
'strict' => 0,
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use Test::DZil;
use YAML::Tiny;
@@ -28,4 +26,24 @@ use YAML::Tiny;
is($tzil->version, $want_version, "dist version is set (in DZ obj)");
}
+{
+ my $tzil = Builder->from_config(
+ { dist_root => 'corpus/dist/DZT' },
+ {
+ add_files => {
+ 'source/dist.ini' => simple_ini(
+ { version => undef },
+ 'GatherDir',
+ [ AutoVersion => {
+ major => 7,
+ format => q<{{$major}}.{{ cldr('y') }}> } ],
+ ),
+ },
+ },
+ );
+
+ $tzil->build;
+
+ like($tzil->version, qr/^7\.20[1-9][0-9]$/, "dist version is set using CLDR");
+}
done_testing;
@@ -2,9 +2,7 @@ use strict;
use warnings;
use Test::More 0.88;
use Test::Fatal;
-
-use lib 't/lib';
-
+use Test::Deep;
use Test::DZil;
sub new_tzil {
@@ -71,8 +69,8 @@ for my $yes (qw(y yes)) {
);
}
-my $prompt = "*** Preparing to release DZT-Sample-0.001.tar.gz with FakeRelease ***\n"
- . "Do you want to continue the release process?";
+
+my $prompt = "Do you want to continue the release process?";
for my $no (qw(n no)) {
my $tzil = new_tzil;
@@ -85,6 +83,12 @@ for my $no (qw(n no)) {
"ConfirmRelease aborts when answering '$no'",
);
+ cmp_deeply(
+ $tzil->log_messages,
+ supersetof("[ConfirmRelease] *** Preparing to release DZT-Sample-0.001.tar.gz with FakeRelease ***"),
+ 'supplementary information was also displayed',
+ ) or diag explain $tzil->log_messages;
+
ok(!release_happened($tzil), "release did not happen when answering '$no'");
}
@@ -99,6 +103,12 @@ for my $yes (qw(y yes)) {
"ConfirmRelease no exception when answering '$yes'",
);
+ cmp_deeply(
+ $tzil->log_messages,
+ supersetof("[ConfirmRelease] *** Preparing to release DZT-Sample-0.001.tar.gz with FakeRelease ***"),
+ 'supplementary information was also displayed',
+ ) or diag explain $tzil->log_messages;
+
ok(release_happened($tzil), "answering '$yes' allows release");
}
@@ -0,0 +1,64 @@
+use strict;
+use warnings;
+use Test::More 0.88;
+
+use Test::DZil;
+use Test::Deep;
+
+{
+ package Keywords; # see also Dist::Zilla::Plugin::Keywords ;)
+ use Moose;
+ with 'Dist::Zilla::Role::MetaProvider';
+
+ sub mvp_multivalue_args { qw(keywords) }
+
+ has keywords => (
+ is => 'ro', isa => 'ArrayRef[Str]',
+ lazy => 1,
+ default => sub { [] },
+ );
+
+ sub metadata
+ {
+ my $self = shift;
+ my $keywords = $self->keywords;
+ return { @$keywords ? ( keywords => $keywords ) : () };
+ }
+}
+
+{
+ my $tzil = Builder->from_config(
+ { dist_root => 'corpus/dist/DZT' },
+ {
+ add_files => {
+ 'source/dist.ini' => simple_ini(
+ [ '=Keywords' => 'plugin 1' => { keywords => [ qw(foo bar) ] } ],
+ [ '=Keywords' => 'plugin 2' => { keywords => [ qw(dog cat) ] } ],
+ ),
+ },
+ },
+ );
+
+
+ cmp_deeply(
+ $tzil->distmeta,
+ {
+ abstract => 'Sample DZ Dist',
+ author => ['E. Xavier Ample <example@example.org>'],
+ dynamic_config => 0,
+ generated_by => ignore,
+ license => [ 'perl_5' ],
+ 'meta-spec' => {
+ url => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec',
+ version => 2
+ },
+ name => 'DZT-Sample',
+ release_status => 'stable',
+ version => '0.001',
+ keywords => [ qw(foo bar dog cat) ],
+ },
+ 'metadata is correctly merged together',
+ );
+}
+
+done_testing;
@@ -1,8 +1,8 @@
use strict;
use warnings;
use Test::More 0.88;
-
-use lib 't/lib';
+use Test::Deep;
+use utf8;
use Test::DZil;
@@ -70,13 +70,11 @@ use YAML::Tiny;
version => '0.001',
);
- for my $key (sort keys %want) {
- is_deeply(
- $meta->{ $key },
- $want{ $key },
- "$key is what we want in 2.0 $type",
- );
- }
+ cmp_deeply(
+ $meta,
+ superhashof(\%want),
+ "2.0 $type data",
+ );
}
}
@@ -137,13 +135,40 @@ use YAML::Tiny;
version => '0.001',
);
- for my $key (sort keys %want) {
- is_deeply(
- $meta->{ $key },
- $want{ $key },
- "$key is what we want in 1.4 $type",
- );
- }
+ cmp_deeply(
+ $meta,
+ superhashof(\%want),
+ "1.4 $type data",
+ );
+ }
+}
+
+{ # non-ASCII
+ my $tzil = Builder->from_config(
+ { dist_root => 'corpus/dist/DZ-NonAscii' },
+ );
+
+ $tzil->build;
+
+ my @files = map {; $_->name } @{ $tzil->files };
+
+ my %meta;
+
+ my $json = $tzil->slurp_file('build/META.json');
+ $meta{json} = JSON->new->decode($json);
+
+ my $yaml = $tzil->slurp_file('build/META.yml');
+ $meta{yaml} = YAML::Tiny->new->read_string($yaml)->[0];
+
+ for my $type (qw(json yaml)) {
+ is_deeply(
+ $meta{$type}{author},
+ [
+ 'Olivier Mengué <dolmen@example.org>',
+ '김도형 <keedi@example.com>'
+ ],
+ "authors ($type) are set as expected, decode properly",
+ );
}
}
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use autodie;
use Test::DZil;
use Test::Deep;
@@ -40,16 +38,16 @@ $tzil->build;
my @files = map {; $_->name } @{ $tzil->files };
-is_deeply(
- [ sort @files ],
- [ sort qw(
+cmp_deeply(
+ \@files,
+ bag(qw(
META.json
dist.ini lib/DZT/Sample.pm t/basic.t
t/smoke-huffer.t
t/author-huffer.t
t/release-huffer.t
xt/blort/huffer.t
- ) ],
+ )),
"filenames rewritten by ExtraTests",
);
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use Test::DZil qw(Builder simple_ini);
use Test::Fatal qw(exception);
@@ -1,4 +1,3 @@
-#!perl
# Test the FileFinder::ByName and FileFinder::Filter plugins
use strict;
use warnings;
@@ -2,8 +2,7 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
+use ExtUtils::Manifest 'maniread';
use Test::DZil;
my $tzil = Builder->from_config(
@@ -20,12 +19,18 @@ my $tzil = Builder->from_config(
root => '../corpus/dist/DZT_Bin',
prefix => 'bin',
} ],
+ [ GatherDir => MySHARE => {
+ root => '../corpus/dist/DZT_Share',
+ prefix => 'share',
+ } ],
[ ExecDir => ],
+ [ ShareDir => ],
'Manifest',
),
},
also_copy => { 'corpus/dist/DZT_Inc' => 'corpus/dist/DZT_Inc',
- 'corpus/dist/DZT_Bin' => 'corpus/dist/DZT_Bin'
+ 'corpus/dist/DZT_Bin' => 'corpus/dist/DZT_Bin',
+ 'corpus/dist/DZT_Share' => 'corpus/dist/DZT_Share'
},
},
);
@@ -37,7 +42,9 @@ my @files = map {; $_->name } @{ $tzil->files };
is_filelist(
[ @files ],
[ qw(
- dist.ini lib/DZT/Sample.pm t/basic.t
+ dist.ini lib/DZT/Sample.pm
+ share/my_data.dat
+ t/basic.t
MANIFEST
inc/Foo.pm inc/Foo/Bar.pm
bin/test.pl
@@ -45,12 +52,11 @@ is_filelist(
"GatherDir gathers all files in the source dir",
);
-my $manifest = $tzil->slurp_file('build/MANIFEST');
-my %in_manifest = map {; chomp; $_ => 1 } grep {length} split /\n/, $manifest;
+my $manifest = maniread($tzil->tempdir->file('build/MANIFEST')->stringify);
-my $count = grep { $in_manifest{$_} } @files;
+my $count = grep { exists $manifest->{$_} } @files;
ok($count == @files, "all files found were in manifest");
-ok(keys(%in_manifest) == @files, "all files in manifest were on disk");
+ok(keys(%$manifest) == @files, "all files in manifest were on disk");
# Test our finders
my $files = $tzil->find_files(':InstallModules');
@@ -89,15 +95,27 @@ is_filelist(
"ExecFiles finds all files",
);
-# XXX I don't use sharedir, how do I configure it? --apocal
-# disabled for now because DZ::Tester doesn't allow sharedir finder to work...
-# Can't locate object method "zilla" via package "Dist::Zilla::Tester::_Builder" at blib/lib/Dist/Zilla/Dist/Builder.pm line 114.
-#$files = $tzil->find_files(':ShareFiles');
-#is_filelist(
-# [ map {; $_->name } @$files ],
-# [ ],
-# "ShareFiles finds all files",
-#);
+$files = $tzil->find_files(':ShareFiles');
+is_filelist(
+ [ map {; $_->name } @$files ],
+ [ qw(
+ share/my_data.dat
+ ) ],
+ "ShareFiles finds all files",
+);
-done_testing;
+$files = $tzil->find_files(':AllFiles');
+is_filelist(
+ [ map {; $_->name } @$files ],
+ [ @files ],
+ ":AllFiles finds all files",
+);
+$files = $tzil->find_files(':NoFiles');
+is_filelist(
+ [ map {; $_->name } @$files ],
+ [ ],
+ ":NoFiles finds no files",
+);
+
+done_testing;
@@ -2,9 +2,9 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
+use ExtUtils::Manifest 'maniread';
use Test::DZil;
+use Path::Tiny;
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
@@ -24,23 +24,41 @@ my $tzil = Builder->from_config(
[ GatherDir => Selective => {
root => '../corpus/extra',
prefix => 'some',
- exclude_filename => 'notme.txt',
+ exclude_filename => [ 'notme.txt', 'subdir/index.html' ],
} ],
[ GatherDir => SelectiveMatch => {
root => '../corpus/extra',
prefix => 'xmatch',
- exclude_match => 'notme\.*',
+ exclude_match => [ 'notme\.*', '^subdir/index\.html$' ],
+ } ],
+ [ GatherDir => Symlinks => {
+ root => '../corpus/extra',
+ follow_symlinks => 1,
+ prefix => 'links',
+ } ],
+ [ GatherDir => PruneDirectory => {
+ root => '../corpus/extra',
+ prefix => 'pruned',
+ prune_directory => '^subdir$',
} ],
'Manifest',
+ 'MetaConfig',
),
'source/.profile' => "Bogus dotfile.\n",
'corpus/extra/.dotfile' => "Bogus dotfile.\n",
'corpus/extra/notme.txt' => "A file to exclude.\n",
+ 'source/.dotdir/extra/notme.txt' => "Another file to exclude.\n",
+ 'source/extra/.dotdir/notme.txt' => "Another file to exclude.\n",
},
also_copy => { 'corpus/extra' => 'corpus/extra' },
},
);
+my $corpus_dir = path($tzil->tempdir)->child('corpus');
+symlink $corpus_dir->child('extra', 'vader.txt'), $corpus_dir->child('extra', 'vader_link.txt')
+ or note "could not create link: $!"
+ if $^O ne 'MSWin32';
+
$tzil->build;
my @files = map {; $_->name } @{ $tzil->files };
@@ -50,20 +68,23 @@ is_filelist(
[ qw(
bonus/subdir/index.html bonus/vader.txt bonus/notme.txt
dotty/subdir/index.html dotty/vader.txt dotty/.dotfile dotty/notme.txt
- some/subdir/index.html some/vader.txt
- xmatch/subdir/index.html xmatch/vader.txt
+ some/vader.txt
+ xmatch/vader.txt
+ links/vader.txt links/subdir/index.html links/notme.txt
+ pruned/notme.txt pruned/vader.txt
dist.ini lib/DZT/Sample.pm t/basic.t
MANIFEST
- ) ],
+ ),
+ ($^O ne 'MSWin32' ? (map { $_ . '/vader_link.txt' } qw(bonus dotty some xmatch links pruned)) : ()),
+ ],
"GatherDir gathers all files in the source dir",
);
-my $manifest = $tzil->slurp_file('build/MANIFEST');
-my %in_manifest = map {; chomp; $_ => 1 } grep {length} split /\n/, $manifest;
+my $manifest = maniread($tzil->tempdir->file('build/MANIFEST')->stringify);
-my $count = grep { $in_manifest{$_} } @files;
+my $count = grep { exists $manifest->{$_} } @files;
ok($count == @files, "all files found were in manifest");
-ok(keys(%in_manifest) == @files, "all files in manifest were on disk");
+ok(keys(%$manifest) == @files, "all files in manifest were on disk");
done_testing;
@@ -1,8 +1,7 @@
use strict;
use warnings;
use Test::More 0.88;
-
-use lib 't/lib';
+use utf8;
use autodie;
use Test::DZil;
@@ -17,7 +16,7 @@ my $tzil = Builder->from_config(
filename => 'txt/dingo.txt',
is_template => 1,
content => [
- 'Welcome to Dingo Kidneys {{ $dist->version }}',
+ 'Welcome to Dingo Kidneys ⽝ {{ $dist->version }}',
'Generated by {{ $plugin->VERSION || 0 }}',
],
}
@@ -26,7 +25,7 @@ my $tzil = Builder->from_config(
GenerateFile => Kidneys => {
filename => 'txt/dingo.tmpl',
content => [
- 'Welcome to Dingo Kidneys {{ $dist->version }}',
+ 'Welcome to Dingo Kidneys ⽝ {{ $dist->version }}',
'Generated by {{ $plugin->VERSION || 0 }}',
],
}
@@ -43,7 +42,7 @@ $tzil->build;
like(
$contents,
- qr{Kidneys 0.001\n}sm,
+ qr{Kidneys ⽝ 0.001\n}sm,
'we render $dist stuff into dingo.txt',
);
@@ -60,7 +59,7 @@ $tzil->build;
is(
$contents,
<<'END_TMPL',
-Welcome to Dingo Kidneys {{ $dist->version }}
+Welcome to Dingo Kidneys ⽝ {{ $dist->version }}
Generated by {{ $plugin->VERSION || 0 }}
END_TMPL
'we include template literals into dingo.tmpl',
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use Test::DZil;
sub test_this {
@@ -1,36 +1,52 @@
use strict;
use warnings;
use Test::More 0.88;
-
-use lib 't/lib';
+use utf8;
use autodie;
use Test::DZil;
-my $tzil = Builder->from_config(
- { dist_root => 'corpus/dist/DZT' },
- {
- add_files => {
- 'source/dist.ini' => simple_ini('License'),
+subtest "ASCII-only author" => sub {
+ my $tzil = Builder->from_config(
+ { dist_root => 'corpus/dist/DZT' },
+ {
+ add_files => {
+ 'source/dist.ini' => simple_ini('License'),
+ },
},
- },
-);
+ );
-$tzil->build;
+ $tzil->build;
-my $contents = $tzil->slurp_file('build/LICENSE');
+ my $contents = $tzil->slurp_file('build/LICENSE');
-like(
- $contents,
- qr{This software is copyright .c. [0-9]+ by E\. Xavier Ample}i,
- "copyright appears in LICENSE file",
-);
+ like(
+ $contents,
+ qr{This software is copyright .c. [0-9]+ by E\. Xavier Ample}i,
+ "copyright appears in LICENSE file",
+ );
-like(
- $contents,
- qr{same terms as (the )?perl.*itself}i,
- "'same terms as perl'-ish text appears in LICENSE",
-);
+ like(
+ $contents,
+ qr{same terms as (the )?perl.*itself}i,
+ "'same terms as perl'-ish text appears in LICENSE",
+ );
+};
-done_testing;
+subtest "non-ASCII author" => sub {
+ my $tzil = Builder->from_config(
+ { dist_root => 'corpus/dist/DZ-NonAscii' },
+ );
+
+ $tzil->build;
+ my $contents = $tzil->slurp_file('build/LICENSE');
+
+ like(
+ $contents,
+ qr{This software is copyright .c. [0-9]+ by ภูมิพลอดุลยเดช},
+ "copyright appears in LICENSE file",
+ );
+};
+
+done_testing;
@@ -1,8 +1,7 @@
use strict;
use warnings;
use Test::More 0.88;
-
-use lib 't/lib';
+use Test::Deep;
use Test::DZil;
@@ -14,10 +13,14 @@ use Test::DZil;
'source/dist.ini' => simple_ini(
'GatherDir',
'MakeMaker',
- [ Prereqs => { 'Foo::Bar' => '1.20', perl => '5.008' } ],
+ [ Prereqs => { 'Foo::Bar' => '1.20',
+ perl => '5.008',
+ Baz => '1.2.3',
+ Buzz => 'v1.2' } ],
[ Prereqs => BuildRequires => { 'Builder::Bob' => '9.901' } ],
[ Prereqs => TestRequires => { 'Test::Deet' => '7',
perl => '5.008' } ],
+ [ Prereqs => ConfigureRequires => { perl => '5.010' } ],
),
},
},
@@ -34,26 +37,33 @@ use Test::DZil;
VERSION => '0.001',
AUTHOR => 'E. Xavier Ample <example@example.org>',
LICENSE => 'perl',
+ MIN_PERL_VERSION => '5.010',
+ EXE_FILES => [],
+ test => { TESTS => 't/*.t' },
PREREQ_PM => {
- 'Foo::Bar' => '1.20'
+ 'Foo::Bar' => '1.20',
+ 'Baz' => '1.2.3',
+ 'Buzz' => '1.2.0',
},
BUILD_REQUIRES => {
'Builder::Bob' => '9.901',
+ },
+ TEST_REQUIRES => {
'Test::Deet' => '7',
},
CONFIGURE_REQUIRES => {
- 'ExtUtils::MakeMaker' => '6.30'
+ 'ExtUtils::MakeMaker' => '0'
},
+ EXE_FILES => [],
+ test => { TESTS => 't/*.t' },
);
- for my $key (sort keys %want) {
- is_deeply(
- $makemaker->__write_makefile_args->{ $key },
- $want{ $key },
- "correct value set for $key",
- );
- }
+ cmp_deeply(
+ $makemaker->__write_makefile_args,
+ \%want,
+ 'correct makemaker args generated',
+ );
}
{
@@ -65,6 +75,7 @@ use Test::DZil;
'GatherDir',
'MakeMaker',
[ Prereqs => { perl => '5.8.1' } ],
+ [ Prereqs => ConfigureRequires => { 'Builder::Bob' => 0 } ],
),
},
},
@@ -75,6 +86,9 @@ use Test::DZil;
my $content = $tzil->slurp_file('build/Makefile.PL');
like($content, qr/^use 5\.008001;\s*$/m, "normalized the perl version needed");
+
+ $content =~ m'^my %FallbackPrereqs = \(\n([^;]+)^\);$'mg;
+ like($1, qr'"Builder::Bob" => ', 'configure-requires prereqs made it into %FallbackPrereqs');
}
done_testing;
@@ -1,10 +1,9 @@
use strict;
use warnings;
use Test::More 0.88;
+use Test::Deep;
-use ExtUtils::Manifest;
-
-use lib 't/lib';
+use ExtUtils::Manifest 1.66; # or maniread can't cope with quoting properly
use Test::DZil;
@@ -13,13 +12,15 @@ my $tzil = Builder->from_config(
{
add_files => {
q{source/file with spaces.txt} => "foo\n",
- # q{source/file\\with some\\whacks.txt} => "bar\n",
- # q{source/'file-with-ticks.txt'} => "baz\n",
- # q{source/file'with'quotes\\or\\backslash.txt} => "quux\n",
+ q{source/'file-with-ticks.txt'} => "baz\n",
'source/dist.ini' => simple_ini(
'GatherDir',
'Manifest',
),
+ $^O eq "MSWin32" ? () : (
+ q{source/file\\with some\\whacks.txt} => "bar\n",
+ q{source/file'with'quotes\\or\\backslash.txt} => "quux\n",
+ ),
},
},
);
@@ -28,36 +29,40 @@ $tzil->build;
my $manihash = ExtUtils::Manifest::maniread($tzil->built_in->file('MANIFEST'));
-is_deeply(
- [ sort keys %$manihash ],
- [ sort(
+cmp_deeply(
+ [ keys %$manihash ],
+ bag(
'MANIFEST',
q{file with spaces.txt},
- # q{file\\with some\\whacks.txt},
- # q{file'with'quotes\\or\\backslash.txt},
- # q{'file-with-ticks.txt'},
+ q{'file-with-ticks.txt'},
'dist.ini',
'lib/DZT/Sample.pm',
't/basic.t',
- ) ],
+ $^O eq "MSWin32" ? () : (
+ q{file\\with some\\whacks.txt},
+ q{file'with'quotes\\or\\backslash.txt},
+ ),
+ ),
'manifest quotes files with spaces'
);
-my @manilines = split /\n/, $tzil->slurp_file('build/MANIFEST');
+my @manilines = grep { ! /^#/ } split /\n/, $tzil->slurp_file('build/MANIFEST');
chomp @manilines;
-is_deeply(
- [ sort @manilines ],
- [ sort(
+cmp_deeply(
+ \@manilines,
+ bag(
'MANIFEST',
q{'file with spaces.txt'},
- # q{'file\\\\with some\\\\whacks.txt'},
- # q{'\\'file-with-ticks.txt\\''},
- # q{'file\\'with\\'quotes\\\\or\\\\backslash.txt'},
+ q{'\\'file-with-ticks.txt\\''},
'dist.ini',
'lib/DZT/Sample.pm',
't/basic.t',
- ) ],
+ $^O eq "MSWin32" ? () : (
+ q{'file\\\\with some\\\\whacks.txt'},
+ q{'file\\'with\\'quotes\\\\or\\\\backslash.txt'},
+ ),
+ ),
'manifest quotes files with spaces'
);
@@ -1,4 +1,3 @@
-#!perl
use strict;
use warnings;
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use Test::DZil;
use Test::Deep;
use CPAN::Meta::Converter;
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use autodie;
use JSON 2;
use Test::DZil;
@@ -1,8 +1,7 @@
use strict;
use warnings;
use Test::More 0.88;
-
-use lib 't/lib';
+use Test::Deep;
use Test::DZil;
@@ -43,21 +42,24 @@ use Test::DZil;
},
build_requires => {
'Builder::Bob' => '9.901',
- 'Module::Build' => '0.3601',
+ 'Module::Build' => '0.28',
+ },
+ test_requires => {
'Test::Deet' => '7',
},
'configure_requires' => {
- 'Module::Build' => '0.3601',
+ 'Module::Build' => '0.28',
},
+ 'recommends' => {},
+ 'recursive_test_files' => ignore,
+ 'script_files' => [],
);
- for my $key (sort keys %want) {
- is_deeply(
- $have->{ $key },
- $want{ $key },
- "correct value set for $key",
- );
- }
+ cmp_deeply(
+ $have,
+ \%want,
+ 'module_build_args',
+ );
is($modulebuild->_use_custom_class, q{}, 'no custom class by default');
}
@@ -1,8 +1,7 @@
use strict;
use warnings;
use Test::More 0.88;
-
-use lib 't/lib';
+use utf8;
use Test::DZil;
use Test::Fatal;
@@ -169,6 +168,31 @@ END_CHANGES
add_files => {
'source/Changes' => $changes,
'source/dist.ini' => simple_ini(
+ qw(GatherDir NextRelease FakeRelease)
+ ),
+ },
+ },
+ );
+
+ $tzil_trial->build;
+
+ like(
+ $tzil_trial->slurp_file('build/Changes'),
+ # not using /m here because it stinks on 5.8.8
+ qr{0\.001 .+ \(TRIAL RELEASE\)},
+ "adding -TRIAL works",
+ );
+}
+
+{
+ local $ENV{TRIAL} = 1;
+
+ my $tzil_trial = Builder->from_config(
+ { dist_root => 'corpus/dist/DZT' },
+ {
+ add_files => {
+ 'source/Changes' => $changes,
+ 'source/dist.ini' => simple_ini(
'GatherDir',
[ NextRelease => { format => "%v%T", } ],
'FakeRelease',
@@ -295,4 +319,18 @@ END_CHANGES
);
}
+{
+ my $tzil = Builder->from_config(
+ { dist_root => 'corpus/dist/DZ-NonAscii' },
+ );
+
+ $tzil->build;
+
+ like(
+ $tzil->slurp_file('build/Changes'),
+ qr{Olivier Mengué},
+ "dolmen's name is unmangled",
+ );
+}
+
done_testing;
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use autodie;
use Test::DZil;
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use autodie;
use Test::DZil;
@@ -26,6 +24,36 @@ print "\$VERSION = 1.234;"
1;
';
+my $in_comment = '
+package DZT::WInComment;
+# our $VERSION = 1.234;
+1;
+';
+
+my $in_comment_in_sub = '
+package DZT::WInCommentInSub;
+sub foo {
+ # our $VERSION = 1.234;
+}
+1;
+';
+
+my $in_pod_stm = '
+package DZT::WInPODStm;
+
+1;
+
+END
+our $VERSION = 1.234;
+=for bug
+
+ # Because we have an END up there PPI considers this a statement
+
+ our $VERSION = 1.234;
+
+=cut
+'; $in_pod_stm =~ s/END/__END__/g;
+
my $two_packages = '
package DZT::TP1;
@@ -74,6 +102,19 @@ my $script_pkg = '
package DZT::Script;
';
+my $pod_with_pkg = '
+package DZT::PodWithPackage;
+=pod
+
+=cut
+';
+
+my $pod_no_pkg = '
+=pod
+
+=cut
+';
+
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
{
@@ -82,9 +123,14 @@ my $tzil = Builder->from_config(
'source/lib/DZT/WVer.pm' => $with_version,
'source/lib/DZT/WVerTwoLines.pm' => $with_version_two_lines,
'source/lib/DZT/WStrEscaped.pm' => $in_a_string_escaped,
+ 'source/lib/DZT/WInComment.pm' => $in_comment,
+ 'source/lib/DZT/WInCommentInSub.pm' => $in_comment_in_sub,
+ 'source/lib/DZT/WInPODStm.pm' => $in_pod_stm,
'source/lib/DZT/R1.pm' => $repeated_packages,
'source/lib/DZT/Monkey.pm' => $monkey_patched,
'source/lib/DZT/HideMe.pm' => $hide_me_comment,
+ 'source/lib/DZT/PodWithPackage.pm' => $pod_with_pkg,
+ 'source/lib/DZT/PodNoPackage.pm' => $pod_no_pkg,
'source/bin/script_pkg.pl' => $script_pkg,
'source/bin/script_ver.pl' => $script_pkg . "our \$VERSION = 1.234;\n",
'source/bin/script.pl' => $script,
@@ -129,6 +175,27 @@ unlike(
"*not* added to DZT::WVerTwoLines; we have one already",
);
+my $dzt_wver_in_comment = $tzil->slurp_file('build/lib/DZT/WInComment.pm');
+like(
+ $dzt_wver_in_comment,
+ qr{^\s*\$\QDZT::WInComment::VERSION = '0.001';\E\s*$}m,
+ "added to DZT::WInComment; the one we have is in a comment",
+);
+
+my $dzt_wver_in_comment_in_sub = $tzil->slurp_file('build/lib/DZT/WInCommentInSub.pm');
+like(
+ $dzt_wver_in_comment_in_sub,
+ qr{^\s*\$\QDZT::WInCommentInSub::VERSION = '0.001';\E\s*$}m,
+ "added to DZT::WInCommentInSub; the one we have is in a comment",
+);
+
+my $dzt_wver_in_pod_stm = $tzil->slurp_file('build/lib/DZT/WInPODStm.pm');
+like(
+ $dzt_wver_in_pod_stm,
+ qr{^\s*\$\QDZT::WInPODStm::VERSION = '0.001';\E\s*$}m,
+ "added to DZT::WInPODStm; the one we have is in some POD",
+);
+
my $dzt_wver_str_escaped = $tzil->slurp_file('build/lib/DZT/WStrEscaped.pm');
like(
$dzt_wver_str_escaped,
@@ -189,6 +256,20 @@ unlike(
"no version for DZT::TP2 when it was hidden with a comment"
);
+my $dzt_podwithpackage = $tzil->slurp_file('build/lib/DZT/PodWithPackage.pm');
+like(
+ $dzt_podwithpackage,
+ qr{^\s*\$\QDZT::PodWithPackage::VERSION = '0.001';\E\s*$}m,
+ "added version to DZT::PodWithPackage",
+);
+
+my $dzt_podnopackage = $tzil->slurp_file('build/lib/DZT/PodNoPackage.pm');
+unlike(
+ $dzt_podnopackage,
+ qr{VERSION},
+ "no version for pod files with no package declaration"
+);
+
{
local $ENV{TRIAL} = 1;
@@ -204,6 +285,10 @@ unlike(
$tzil_trial->build;
my $dzt_sample_trial = $tzil_trial->slurp_file('build/lib/DZT/Sample.pm');
+ my $assignments = () = $dzt_sample_trial =~ /(DZT::Sample::VERSION =)/g;
+
+ is($assignments, 1, "we only add 1 VERSION assignment");
+
like(
$dzt_sample_trial,
qr{^\s*\$\QDZT::Sample::VERSION = '0.001'; # TRIAL\E\s*$}m,
@@ -211,5 +296,38 @@ unlike(
);
}
+my $two_packages_weird = <<'END';
+package DZT::TPW1;
+
+{package DZT::TPW2;
+
+sub tmp}
+END
+
+my $tzil2 = Builder->from_config(
+ { dist_root => 'corpus/dist/DZT' },
+ {
+ add_files => {
+ 'source/lib/DZT/TPW.pm' => $two_packages_weird,
+ 'source/dist.ini' => simple_ini('GatherDir', 'PkgVersion', 'ExecDir'),
+ },
+ },
+);
+$tzil2->plugins->[1]->{die_on_line_insertion} = 1;
+$tzil2->build;
+
+my $dzt_tpw = $tzil2->slurp_file('build/lib/DZT/TPW.pm');
+like(
+ $dzt_tpw,
+ qr{^\s*\$\QDZT::TPW1::VERSION = '0.001';\E\s*$}m,
+ "added version to DZT::TPW1",
+);
+
+like(
+ $dzt_tpw,
+ qr{^\s*\$\QDZT::TPW2::VERSION = '0.001';\E\s*$}m,
+ "added version to DZT::TPW2",
+);
+
done_testing;
@@ -3,8 +3,6 @@ use warnings;
use Test::More 0.88;
use Test::Fatal qw(exception);
-use lib 't/lib';
-
use JSON 2;
use Test::DZil;
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use autodie;
use Test::DZil;
@@ -41,6 +39,22 @@ sub foo { }
1;
';
+my $with_multi_line_abstract = '
+
+package DZT::MLA;
+
+=head1 NAME
+
+DZT::MLA - This abstract spans
+multiple lines.
+
+=cut
+
+sub foo { }
+
+1;
+';
+
my $script = '
#!/usr/bin/perl
@@ -59,6 +73,7 @@ my $tzil = Builder->from_config(
add_files => {
'source/lib/DZT/WPFP.pm' => $with_place_for_pod,
'source/lib/DZT/WVer.pm' => $with_version,
+ 'source/lib/DZT/MLA.pm' => $with_multi_line_abstract,
'source/bin/script.pl' => $script,
'source/dist.ini' => simple_ini('GatherDir', 'PodVersion', 'ExecDir'),
},
@@ -75,6 +90,19 @@ version 0.001
=cut
END_POD
+my $want_mla = <<'END_POD';
+=head1 NAME
+
+DZT::MLA - This abstract spans
+multiple lines.
+
+=head1 VERSION
+
+version 0.001
+
+=cut
+END_POD
+
my $dzt_sample = $tzil->slurp_file('build/lib/DZT/Sample.pm');
ok(
index($dzt_sample, $want) == -1,
@@ -93,6 +121,12 @@ ok(
"we didn't add version pod to WVer; it has one already",
);
+my $dzt_mla = $tzil->slurp_file('build/lib/DZT/MLA.pm');
+ok(
+ index($dzt_mla, $want_mla) > 0,
+ "we properly skipped over multi-line abstract",
+);
+
my $dzt_script = $tzil->slurp_file('build/bin/script.pl');
ok(
index($dzt_script, $want) > 0,
@@ -3,8 +3,6 @@ use warnings;
use Test::More 0.88;
use Test::Fatal qw(exception);
-use lib 't/lib';
-
use JSON 2;
use Test::DZil;
@@ -46,6 +44,47 @@ use Test::DZil;
);
}
+# test that we avoid a CPAN.pm bug by synchronizing Runtime|Build|Test requires
+{
+ my $tzil = Builder->from_config(
+ { dist_root => 'corpus/dist/DZT' },
+ {
+ add_files => {
+ 'source/dist.ini' => simple_ini(
+ [ GatherDir => ],
+ [ MetaJSON => ],
+ [ Prereqs => RuntimeRequires => { A => 2, B => 0, C => 2 } ],
+ [ RemovePrereqs => { remove => [ qw(C) ] } ],
+ [ Prereqs => TestRequires => { A => 1, B => 1, C => 1 } ],
+ [ Prereqs => BuildRequires => { A => 0, B => 2, C => 0 } ],
+ ),
+ },
+ },
+ );
+
+ $tzil->build;
+
+ my $json = $tzil->slurp_file('build/META.json');
+
+ my $meta = JSON->new->decode($json);
+
+ is_deeply(
+ $meta->{prereqs},
+ {
+ runtime => {
+ requires => { A => 2, B => 2 },
+ },
+ test => {
+ requires => { A => 2, B => 2, C => 1 },
+ },
+ build => {
+ requires => { A => 2, B => 2, C => 1 },
+ },
+ },
+ "prereqs synchronized across runtime, build & test phases",
+ );
+}
+
{
my $tzil = Builder->from_config(
{ dist_root => 'corpus/dist/DZT' },
@@ -1,8 +1,7 @@
use strict;
use warnings;
use Test::More 0.88;
-
-use lib 't/lib';
+use utf8;
use autodie;
use Test::DZil;
@@ -39,5 +38,21 @@ like(
"dist name appears in README",
);
+{
+ my $tzil = Builder->from_config(
+ { dist_root => 'corpus/dist/DZ-NonAscii' },
+ );
+
+ $tzil->build;
+
+ my $contents = $tzil->slurp_file('build/README');
+
+ like(
+ $contents,
+ qr{ภูมิพลอดุลยเดช},
+ "HRH unmangled in README",
+ );
+}
+
done_testing;
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88 tests => 16;
-use lib 't/lib';
-
use File::Spec ();
use Test::DZil qw(Builder simple_ini);
use Test::Fatal qw(exception);
@@ -2,8 +2,6 @@ use strict;
use warnings;
use Test::More 0.88;
-use lib 't/lib';
-
use Dist::Zilla::App::Tester;
use Test::DZil;
@@ -13,6 +11,7 @@ $ENV{DZIL_GLOBAL_CONFIG_ROOT} = 't';
my $result = test_dzil('corpus/dist/DZ1', [ qw(build) ]);
+is($result->error, undef, 'No errors');
is($result->exit_code, 0, "dzil would have exited 0");
ok(
@@ -18,6 +18,8 @@ my $tzil = Builder->from_config(
$tzil->release;
+is($tzil->VERSION, Dist::Zilla->VERSION, "zilla tester VERSION");
+
my $basename = $tzil->dist_basename;
my $tarball = $tzil->archive_filename;
@@ -22,8 +22,7 @@ If no real package is found, substitutes stubs instead of basic functions.
=head1 SYNOPSIS
EOP
- is abstract_from_string($pod), 'Perl interface to various C<readline> packages.
-If no real package is found, substitutes stubs instead of basic functions.';
+ is abstract_from_string($pod), 'Perl interface to various C<readline> packages. If no real package is found, substitutes stubs instead of basic functions.';
}
{
@@ -0,0 +1,34 @@
+use strict;
+use warnings;
+
+# this test was generated with Dist::Zilla::Plugin::Test::CheckBreaks 0.011
+
+use Test::More 0.88;
+
+SKIP: {
+ eval 'require Moose::Conflicts; Moose::Conflicts->check_conflicts';
+ skip('no Moose::Conflicts module found', 1) if not $INC{'Moose/Conflicts.pm'};
+
+ diag $@ if $@;
+ pass 'conflicts checked via Moose::Conflicts';
+}
+
+my $breaks = {
+ "Dist::Zilla::Plugin::MakeMaker::Awesome" => "< 0.22"
+};
+
+use CPAN::Meta::Requirements;
+my $reqs = CPAN::Meta::Requirements->new;
+$reqs->add_string_requirement($_, $breaks->{$_}) foreach keys %$breaks;
+
+use CPAN::Meta::Check 0.007 'check_requirements';
+our $result = check_requirements($reqs, 'conflicts');
+
+if (my @breaks = grep { defined $result->{$_} } keys %$result)
+{
+ diag 'Breakages found with Dist-Zilla:';
+ diag "$result->{$_}" for sort @breaks;
+ diag "\n", 'You should now update these modules!';
+}
+
+done_testing;
@@ -4,7 +4,7 @@ use Test::More tests => 2;
note 'Checking Changes';
my $changes_file = 'Changes';
-my $newver = '4.300030';
+my $newver = '5.025';
my $trial_token = '-TRIAL';
SKIP: {
@@ -1,7 +1,6 @@
#!perl
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+use Test::Pod 1.41;
all_pod_files_ok();