CPAN-Reporter-Smoker-0.30000755000000000000 014551645671 14330 5ustar00rootroot000000000000Todo100644000000000000 354614551645671 15251 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30TODO list for Perl module CPAN::Reporter::Smoker #--------------------------------------------------------------------------# # Bugs #--------------------------------------------------------------------------# #--------------------------------------------------------------------------# # Features #--------------------------------------------------------------------------# # High priority - "list => \@list" option - refactor sub to call test to support PoCo::C::R into CPAN::Reporter # Medium priority - "limit => $n" option - try to make TTY sane (if possible) after each smoke run - clear CPAN build cache on start? # Low/Maybe - if interrupted, be more helpful - offer to send email to bug-Dist-Name@rt.cpan.org? (use Net::SMTP and CPAN::Reporter mail host?) - if CPAN has distroprefs, offer to auto-disable the current distro, or at least to open distroprefs in editor? - retest discards after some period of time - would need CPAN::Reporter::History to keep timestamp - or after failing deps are updated -- but how to discover what these are? would need changes to CPAN::Reporter history logging to separately log DISCARD with the missing dependencies - but halt_on_failure prevents a DISCARD message, so then what? Maybe this does need to be logged via CPAN::Reporter::Smoker - docs: suggest that they join cpan-testers-discuss mailing list - docs: document how to disable CPANPLUS - create old alpha modules for minicpan and confirm they *aren't* tested - edit file-ls.gz - dependencies - look at Module::Depends::Intrusive and CPAN::Unwind - statistics -- show counter of tests for each test run; show total tests run at the end - logging STDERR to a file -- parameter to start()? - add some process control -- keep a proces ID in a run file and add a stop() commnd to stop a running process. README100644000000000000 4121014551645671 15307 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30NAME CPAN::Reporter::Smoker - Turnkey CPAN Testers smoking VERSION version 0.30 SYNOPSIS $ perl -MCPAN::Reporter::Smoker -e start DESCRIPTION Rudimentary smoke tester for CPAN Testers, built upon CPAN::Reporter. Use at your own risk. It requires a recent version of CPAN::Reporter to run. Currently, CPAN::Reporter::Smoker requires zero independent configuration; instead it uses configuration settings from CPAN.pm and CPAN::Reporter. Once started, it retrieves a list of distributions from the configured CPAN mirror and begins testing them in reverse order of upload. It will skip any distribution which has already had a report sent by CPAN::Reporter. Features (or bugs, depending on your point of view): * No configuration needed * Tests each distribution as a separate CPAN process -- each distribution has prerequisites like build_requires satisfied from scratch * Automatically checks for new distributions every twelve hours or as otherwise specified * Continues until interrupted with CTRL-C * Checks CPAN.pm "distroprefs" to see if distributions should be skipped (before handing off to CPAN) Current limitations: * Does not attempt to retest distributions that had reports discarded because of prerequisites that could not be satisfied * Does not test trial version if there is no non-trial version WARNING -- smoke testing is risky Smoke testing will download and run programs that other people have uploaded to CPAN. These programs could do anything to your system, including deleting everything on it. Do not run CPAN::Reporter::Smoker unless you are prepared to take these risks. USAGE "start()" Starts smoke testing using defaults already in CPAN::Config and CPAN::Reporter's .cpanreporter directory. Runs until all distributions are tested or the process is halted with CTRL-C or otherwise killed. "start()" supports several optional arguments: * "clean_cache_after" -- number of distributions that will be tested before checking to see if the CPAN build cache needs to be cleaned up (not including any prerequisites tested). Must be a positive integer. Defaults to 100 * "list" -- if provided, this list of distributions will be tested instead of all of CPAN. May be a reference to an array of distribution names or may be a filename containing one distribution name per line. Distribution names must be of the form 'AUTHOR/Dist-Name-0.00.tar.gz' * "restart_delay" -- number of seconds that must elapse before restarting smoke testing. This will reload indices to search for new distributions and restart testing from the most recent distribution. Must be a positive integer; Defaults to 43200 seconds (12 hours) * "skip_dev_versions" -- if true, unindexed distributions will not be tested. Valid values are 0 or 1. Defaults to 0. * "set_term_title" -- toggle for whether the terminal titlebar will be updated with the distribution being smoke tested and the starting time of the test. Helps determine if a test is hung and which distribution might be responsible. Valid values are 0 or 1. Defaults to 1 * "status_file" -- during testing, the name of the distribution under test and a timestamp are written to this file. The file is removed after the test is complete. This helps identify a problem distribution if testing hangs or crashes the computer. If the argument includes a path, all directories to the file must exist. Defaults to "smoker-status-$$.txt" in File::Spec->tmpdir. * "install" -- toggle for whether the distribution should be installed after successful testing. Can be useful to avoid prerequisite re-building and growing PERL5LIB for the cost of disk space used for installed modules. Valid values are 0 or 1. Defaults to 0 * "reverse" -- toggle the order in which releases are tested. When set to 1, testing starts from the older release not the most recent one (or the last distribution if --list is provided). Valid values are 0 or 1. Defaults to 0 * "random" -- toggle whether to randomize distribution test order. When set to 1, the list of releases is shuffled. Valid values are 0 or 1. Defaults to 0 * "force_trust" -- toggle whether to override CPAN's "trust_test_report_history" option. When set to 1, "trust_test_report_history" is set to 1. When set to 0, "trust_test_report_history" is left alone and whatever the user has configured for their CPAN client is used. Valid values are 0 or 1. Defaults to 0 * "reload_history_period" -- after this period in seconds, history of modules smoked will be reloaded when possible. Default value 1800 seconds (30 minutes). HINTS Selection of distributions to test Only the most recently uploaded developer and normal releases will be tested, and only if the developer release is newer than the regular release indexed by PAUSE. For example, if Foo-Bar-0.01, Foo-Bar-0.02, Foo-Bar-0.03_01 and Foo-Bar-0.03_02 are on CPAN, only Foo-Bar-0.02 and Foo-Bar-0.03_02 will be tested, and in reverse order of when they were uploaded. Once Foo-Bar-0.04 is released and indexed, Foo-Bar-0.03_02 will not longer be tested. To avoid testing script or other tarballs, developer distributions included must have a base distribution name that resembles a distribution tarball already indexed by PAUSE. If the first upload of distribution to PAUSE is a developer release -- Baz-Bam-0.00_01.tar.gz -- it will not be tested as there is no indexed Baz-Bam appearing in CPAN's 02packages.details.txt file. Unauthorized tarballs are treated like developer releases and will be tested if they resemble an indexed distribution and are newer than the indexed tarball. Perl, parrot, kurila, Pugs and similar distributions will not be tested. The skip list is based on CPAN::Mini and matches as follows: qr{(?: /(?:emb|syb|bio)?perl-\d | /(?:parrot|ponie|kurila|Perl6-Pugs)-\d | /perl-?5\.004 | /perl_mlb\.zip )}xi, Bundles and mod_perl distributions will also not be tested, though mod_perl is likely to be requested as a dependency by many modules. See the next section for how to tell CPAN.pm not to test certain dependencies. Skipping additional distributions If certain distributions hang, crash or otherwise cause trouble, you can use CPAN's "distroprefs" system to disable them. If a distribution is disabled, it won't be built or tested. If a distribution's dependency is disabled, a failing test is just discarded. The first step is configuring a directory for distroprefs files: $ cpan cpan> o conf init prefs_dir cpan> o conf commit Next, ensure that either the YAML or YAML::Syck module is installed. (YAML::Syck is faster). Then create a file in the "prefs_dir" directory to hold the list of distributions to disable, e.g. call it "disabled.yml" In that file, you can add blocks of YAML code to disable distributions. The match criteria "distribution" is a regex that matches against the canonical name of a distribution, e.g. "AUTHOR/Foo-Bar-3.14.tar.gz". Here is a sample file to show you some syntax (don't actually use these, though): --- comment: "Tests take too long" match: distribution: "^DAGOLDEN/CPAN-Reporter-\d" disabled: 1 --- comment: "Skip Win32 distributions" match: distribution: "/Win32" disabled: 1 --- comment: "Skip distributions by Andy Lester" match: distribution: "^PETDANCE" disabled: 1 Please note that disabling distributions like this will also disable them for normal, non-smoke usage of CPAN.pm. One distribution that I would recommend either installing up front or else disabling with distroprefs is mod_perl, as it is a common requirement for many Apache:: modules but does not (easily) build and test under automation. --- comment: "Don't build mod_perl if required by some other module" match: distribution: "/mod_perl-\d" disabled: 1 Distroprefs are more powerful than this -- they can be used to automate responses to prompts in distributions, set environment variables, specify additional dependencies and so on. Read the docs for CPAN.pm for more and look in the "distroprefs" directory in the CPAN distribution tarball for examples. Using a local CPAN::Mini mirror Because distributions must be retrieved from a CPAN mirror, the smoker may cause heavy network load and will repetitively download common build prerequisites. An alternative is to use CPAN::Mini to create a local CPAN mirror and to point CPAN's "urllist" to the local mirror. $ cpan cpan> o conf urllist unshift file:///path/to/minicpan cpan> o conf commit However, CPAN::Reporter::Smoker needs the "find-ls.gz" file, which CPAN::Mini does not mirror by default. Add it to a .minicpanrc file in your home directory to include it in your local CPAN mirror. also_mirror: indices/find-ls.gz Note that CPAN::Mini does not mirror developer versions. Therefore, a live, network CPAN Mirror will be needed in the urllist to retrieve these. Note that CPAN requires the LWP module to be installed to use a local CPAN mirror. Alternatively, you might experiment with the alpha-quality release of CPAN::Mini::Devel, which subclasses CPAN::Mini to retrieve developer distributions (and find-ls.gz) using the same logic as CPAN::Reporter::Smoker. Timing out hanging tests CPAN::Reporter (since 1.08) supports a 'command_timeout' configuration option. Set this option in the CPAN::Reporter configuration file to time out tests that hang up or get stuck at a prompt. Set it to a high-value to avoid timing out a lengthy tests that are still running -- 1000 or more seconds is probably enough. Warning -- on Win32, terminating processes via the command_timeout is equivalent to SIGKILL and could cause system instability or later deadlocks This option is still considered experimental. Avoiding repetitive prerequisite testing Because CPAN::Reporter::Smoker satisfies all requirements from scratch, common dependencies (e.g. Class::Accessor) will be unpacked, built and tested repeatedly. As of version 1.92_56, CPAN supports the "trust_test_report_history" config option. When set, CPAN will check the last test report for a distribution. If one is found, the results of that test are used instead of running tests again. $ cpan cpan> o conf init trust_test_report_history cpan> o conf commit Avoiding repetitive prerequisite builds (EXPERIMENTAL) CPAN has a "build_dir_reuse" config option. When set (and if a YAML module is installed and configured), CPAN will attempt to make build directories persistent. This has the potential to save substantial time and space during smoke testing. CPAN::Reporter::Smoker will recognize if this option is set and make adjustments to the test process to keep PERL5LIB from growing uncontrollably as the number of persistent directories increases. NOTE: Support for "build_dir_reuse" is highly experimental. Wait for at least CPAN version 1.92_62 before trying this option. $ cpan cpan> o conf init build_dir_reuse cpan> o conf commit Stopping early if a prerequisite fails Normally, CPAN.pm continues testing a distribution even if a prerequisite fails to build or fails testing. Some distributions may pass their tests even without a listed prerequisite, but most just fail (and CPAN::Reporter discards failures if prerequisites are not met). As of version 1.92_57, CPAN supports the "halt_on_failure" config option. When set, a prerequisite failure stops further processing. $ cpan cpan> o conf init halt_on_failure cpan> o conf commit However, a disadvantage of halting early is that no DISCARD grade is recorded in the history. The next time CPAN::Reporter::Smoker runs, the distribution will be tested again from scratch. It may be better to let all prerequisites finish so the distribution can fail its test and be flagged with DISCARD so it will be skipped in the future. CPAN cache bloat CPAN will use a lot of scratch space to download, build and test modules. Use CPAN's built-in cache management configuration to let it purge the cache periodically if you don't want to do this manually. When configured, the cache will be purged on start and after a certain number of distributions have been tested as determined by the "clean_cache_after" option for the "start()" function. $ cpan cpan> o conf init build_cache scan_cache cpan> o conf commit CPAN verbosity Recent versions of CPAN are verbose by default, but include some lesser known configuration settings to minimize this for untarring distributions and for loading support modules. Setting the verbosity for these to 'none' will minimize some of the clutter to the screen as distributions are tested. $ cpan cpan> o conf init /verbosity/ cpan> o conf commit Saving reports to files instead of sending directly In some cases, such as when smoke testing using a development or prerelease toolchain module like Test-Harness, it may be preferable to save reports to files in a directory for review prior to submitting them. To do this, manually set the "transport" option in your CPAN::Reporter config file to use the Test::Reporter::Transport::File transport. transport=File /path/to/directory After review, send saved reports using Test::Reporter: Test::Reporter->new()->read($filename)->send() ENVIRONMENT Automatically sets the following environment variables to true values while running: * "AUTOMATED_TESTING" -- signal that tests are being run by an automated smoke testing program (i.e. don't expect interactivity) * "PERL_MM_USE_DEFAULT" -- accept ExtUtils::MakeMaker prompt() defaults * "PERL_EXTUTILS_AUTOINSTALL" -- set to '--defaultdeps' for default dependencies The following environment variables, if set, will modify the behavior of CPAN::Reporter::Smoker. Generally, they are only required during the testing of CPAN::Reporter::Smoker * "PERL_CR_SMOKER_RUNONCE" -- if true, "start()" will exit after all distributions are tested instead of sleeping for the "restart_delay" and then continuing * "PERL_CR_SMOKER_SHORTCUT" -- if true, "start()" will process arguments (if any) but will return before starting smoke testing; used for testing argument handling by "start()" BUGS Please report any bugs or feature using the CPAN Request Tracker. Bugs can be submitted through the web interface at When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature. SEE ALSO * CPAN * CPAN::Reporter * CPAN::Testers * CPAN::Mini * CPAN::Mini::Devel SUPPORT Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at . You will be notified automatically of any progress on your issue. Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. git clone https://github.com/cpan-testers/CPAN-Reporter-Smoker.git AUTHOR David Golden CONTRIBUTORS * Alexandr Ciornii * Breno G. de Oliveira * Christian Walde * gregor herrmann * gregor herrmann COPYRIGHT AND LICENSE This software is Copyright (c) 2024 by David Golden. This is free software, licensed under: The Apache License, Version 2.0, January 2004 Changes100644000000000000 1575114551645671 15735 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30Revision history for Perl module CPAN::Reporter::Smoker 0.30 2024-01-17 03:38:29+00:00 UTC [FIXED] - Adjust tests to CPAN 2.29+ (GREGOA) 0.29 2017-04-15 09:52:48-04:00 America/New_York [FIXED] - Fixed tests for perls without '.' in @INC. 0.28 2016-02-29 19:06:11-05:00 America/New_York [ADDED] - More tests (CHORNY) - New experimental option to skip distributions released before some date (CHORNY) - New experimental option _hook_after_test (CHORNY) [FIXED] - Skips Perl 6 distributions 0.27 2015-03-10 04:33:13-04:00 America/New_York [ADDED] - New option 'random' to randomize distribution test order (GREGOA) 0.26 2014-03-14 15:52:43+01:00 Europe/Paris [ADDED] - New option 'skip_dev_versions' to work on minicpans (CHORNY) 0.25 2013-11-06 10:06:15 America/New_York - Add reloading history of modules smoked (CHORNY) - Add support for custom filtering (CHORNY) 0.24 2011-07-21 00:12:34 America/New_York - Fixes test failures with CPAN::Reporter 1.19_04 0.23 2011-06-01 17:54:27 America/New_York - Fix cache cleanup with newer CPAN.pm (STSC) 0.22 2010-12-07 16:05:46 EST5EDT - Force localization of index files (don't allow cached copies) - Convert distribution to Dist::Zilla management 0.21 - Wed Sep 29 07:45:04 EDT 2010 Fixed: - Skips t/smoke-disabled.t unless YAML is installed 0.20 Mon Sep 27 21:02:21 EDT 2010 Added: - Checks distroprefs for skipping before firing up a CPAN test process [Christian Walde] - New 'reverse' option to reverse distribution test order [Serguei Trouchelle] - New 'force_trust' option to switch on CPAN's trust_test_report_history (instead of relying on the existing CPAN configuration) Fixed: - Temporary directories are labeled "C-R-Smoker-XXXXXX" to help identify them 0.19 Fri Jun 5 07:08:10 EDT 2009 - Added: 'install' argument to install modules rather than just test them (without installing). This helps avoid growing PERL5LIB at the cost of disk space of installed modules. (Patch from Serguei Trouchelle) 0.18 -- NEVER RELEASED - Changed: bumped CPAN, CPAN::Reporter, Module::Build and ExtUtils::MakeMaker prereqs to latest versions - Fixed: don't treat .ppm.zip files in CPAN mirror as distributions 0.17 Sat Sep 20 10:11:00 EDT 2008 - Added: 'list' argument may also be a filename 0.16 Sat Sep 20 08:54:49 EDT 2008 - Added: 'list' argument to specify a particular list of distributions to test instead of testing all of CPAN in reverse order - Changed: sets PERL_EXTUTILS_AUTOINSTALL=--defaultdeps environment variable for automatic handling of Auto Install dependency - Changed: bumped up the CPAN::Reporter and Test::Reporter prereqs 0.15 Sun Jun 22 23:53:26 EDT 2008 - Test fixed: smoke.t and smoke-restart.t no longer fail if PERL5OPT is set (as by CPAN::Reporter dev releases) 0.14 Wed Jun 18 19:13:27 EDT 2008 - Fixed: localizing CPAN config was causing some segfaults on 5.6.2; removed the call to local() as a workaround 0.13 Tue Jun 10 22:38:15 EDT 2008 - Fixed: under build_dir_reuse, be sure to regenerate build dirs before calling reset_tested 0.12 Tue Jun 3 11:52:49 EDT 2008 - Added: 'status_file' argument used to record distribution being tested into a file; helps in determining which distribution is at fault if testing some distribution crashes or hangs the computer - Added: shows count of distributions found when index is processed and number of the current distribution being tested - Changed: CPAN::Reporter history is cached at startup for faster processing of distributions already tested 0.11 Sat May 17 11:59:08 EDT 2008 - Documented: support for 'build_dir_reuse' is experimental and needs CPAN 1.92_62 (as yet unreleased) to work properly 0.10 Fri May 16 08:27:47 EDT 2008 - Added: 'clean_cache_after' argument to have CPAN clean its build cache after a certain number of distributions are smoked (default 100) - Added: 'set_term_title' boolean argument to control whether the terminal title is updated or not (default 1) - Changed: if CPAN config option 'build_dir_reuse' is true and CPAN has the 'reset_tested' method, then 'reset_tested' will be called prior to each distribution's smoke test to limit PERL5INC to direct dependencies only instead of all available build directories - Documented: how to use (and limitations of) CPAN's build_dir_reuse config option 0.09 Wed Apr 23 22:56:17 EDT 2008 - Documented: CPAN distroprefs option is 'prefs_dir' not 'pref_dir' (Serguei Trouchelle) 0.08 Mon Mar 24 13:46:46 EDT 2008 - Changed: smoker now maintains a cache of distributions seen during a session to speed up skipping distributions already tested when the smoker rechecks indices and restarts testing - Fixed: our $SIG{INT} handler now installed *after* CPAN.pm installs its handler so we take precedence 0.07 Mon Mar 10 08:32:50 EDT 2008 - Added: Sets title of terminal window (xterm or Win32) to indicate current distribution being smoked (adds Term::Title as prereq) - Changed: interrupting smoker with CTRL-C now shows what distribution was interrupted (helpful for disabling in distroprefs) - Changed: progress message -- added blank line before to help it stand out and localtime() timestamp to help see how long a test has been running (e.g is it hung?) - Documented: how to use 'trust_test_report_history' and 'halt_on_failure' config options from the latest dev release of CPAN.pm - Documented: cache purge happens when indices are checked for new distros 0.06 Thu Mar 6 10:12:26 EST 2008 - Added documentation on using distroprefs to skip building and testing certain distributions - Edited other usage hints for clarity 0.05 Tue Feb 26 22:56:12 EST 2008 - Smoker now periodically checks for new distributions; added "restart_delay" option (default 12 hours) to control frequency - Added support for CPAN cache scanning on start and at each restart (if configured in CPAN::Config) - Changed invocation of CPAN so trust_test_report_history option will work - Skips Bundles and mod_perl 0.04 Mon Feb 4 11:51:16 EST 2008 - Quick fix of broken distribution (added missing prereq and restored a private function that was mistakenly deleted) 0.03 Mon Feb 4 11:23:43 EST 2008 - Vastly improved logic for selecting distributions to test - Test suite confirms smoke tester picks up a developer version (still could be improved) 0.02 Mon Jan 28 11:55:35 EST 2008 - Added rudimentary test of smoke testing - Updated prerequisites 0.01_02 Mon Jan 21 19:28:58 EST 2008 - Added support for smoking developer releases 0.01_01 Sun Jan 20 22:55:20 EST 2008 - initial alpha release LICENSE100644000000000000 2633514551645671 15447 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30This software is Copyright (c) 2024 by David Golden. This is free software, licensed under: The Apache License, Version 2.0, January 2004 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2024 David Golden Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. dist.ini100644000000000000 137114551645671 16057 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30name = CPAN-Reporter-Smoker author = David Golden license = Apache_2_0 copyright_holder = David Golden [@DAGOLDEN] :version = 0.072 stopwords = unindexed stopwords = Bam stopwords = Baz stopwords = CTRL stopwords = Distroprefs stopwords = SIGKILL stopwords = cpanreporter stopwords = defaultdeps stopwords = distroprefs stopwords = kurila stopwords = minicpanrc stopwords = prerelease stopwords = titlebar stopwords = untarring stopwords = urllist [Prereqs] ExtUtils::MakeMaker = 6.46 Module::Build = 0.30 Test::Reporter = 1.58 [RemovePrereqs] remove = YAML remove = CPAN::MyConfig [Encoding] encoding = bytes match = ^t/CPAN/authors match = ^t/CPAN/indices match = ^t/CPAN/modules t000755000000000000 014551645671 14514 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30args.t100644000000000000 716714551645671 16010 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tuse strict; use warnings; use Test::More 0.62; use Config; use File::Spec; use lib 't/lib'; use DotDirs; use IO::CaptureOutput 1.06 qw/capture/; my @good_args = ( { label => "no args", args => [], }, { label => "clean_cache_after", args => [ clean_cache_after => 10 ], }, { label => "restart_delay", args => [ restart_delay => 30], }, { label => "set_term_title", args => [ set_term_title => 0 ], }, { label => "status_file - dir/file", args => [ status_file => File::Spec->catfile( File::Spec->tmpdir, 'foo.txt') ], }, { label => "status_file - bare filename", args => [ status_file => 'foo.txt' ], }, { label => "reverse", args => [ 'reverse' => 1 ], }, { label => "force_trust", args => [ 'force_trust' => 1 ], }, { label => "skip_dev_versions", args => [ 'skip_dev_versions' => 1 ], }, { label => "filter", args => [ 'filter' => sub {} ], }, { label => "random", args => [ 'random' => 1 ], }, { label => "_hook_after_test", args => [ 'filter' => sub {} ], }, ); my @bad_args = ( { label => "args not % 2", args => [ 30 ], }, { label => "clean_cache_after alpha", args => [ clean_cache_after => 'abc' ], }, { label => "clean_cache_after negative", args => [ clean_cache_after => '-1' ], }, { label => "clean_cache_after mixed alphanum", args => [ clean_cache_after => 'abc 123' ], }, { label => "restart_delay with alpha", args => [ restart_delay => 'abc'], }, { label => "set_term_title with alpha", args => [ set_term_title => 'y' ], }, { label => "set_term_title with 2", args => [ set_term_title => 2 ], }, { label => "status_file", args => [ status_file => 'slakjdflaksjdfkds/foo.txt' ], }, { label => "reverse", args => [ 'reverse' => 2 ], }, { label => "force_trust", args => [ 'force_trust' => 2 ], }, { label => "filter", args => [ 'filter' => 'test' ], }, { label => "_hook_after_test", args => [ 'filter' => 'test' ], }, ); plan tests => 1 + 2 * ( @good_args + @bad_args ); #--------------------------------------------------------------------------# # Setup test environment #--------------------------------------------------------------------------# # Setup CPAN::Reporter configuration and add mock lib path to @INC $ENV{PERL_CPAN_REPORTER_DIR} = DotDirs->prepare_cpan_reporter; # Setup CPAN dotdir with custom CPAN::MyConfig DotDirs->prepare_cpan; my ($stdout, $stderr); #--------------------------------------------------------------------------# # tests begin here #--------------------------------------------------------------------------# use_ok( 'CPAN::Reporter::Smoker' ); local $ENV{PERL_CR_SMOKER_SHORTCUT} = 1; # don't run at all, just check args for my $c ( @good_args ) { my $rc = eval { capture { start( @{$c->{args}} ) } \$stdout, \$stderr }; my $err = $@; is( $rc, 1, "$c->{label}: start() successful" ); unlike( $err, qr/Invalid arguments? to start/, "$c->{label}: no error message"); } for my $c ( @bad_args ) { my $rc = eval { capture { start( @{$c->{args}} ) } \$stdout, \$stderr }; my $err = $@; ok( ! $rc, "$c->{label}: start() failed" ); like( $err, qr/Invalid arguments? to start/, "$c->{label}: saw error message"); } META.yml100644000000000000 350414551645671 15664 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30--- abstract: 'Turnkey CPAN Testers smoking' author: - 'David Golden ' build_requires: CPAN::Checksums: '0' Cwd: '3.27' ExtUtils::MakeMaker: '6.46' File::Find: '0' File::Path: '0' File::Spec: '3.27' IO::CaptureOutput: '1.06' IO::File: '0' Test::More: '0.62' lib: '0' perl: '5.010' vars: '0' configure_requires: ExtUtils::MakeMaker: '6.17' perl: '5.006' dynamic_config: 0 generated_by: 'Dist::Zilla version 6.031, CPAN::Meta::Converter version 2.150010' license: apache meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: CPAN-Reporter-Smoker no_index: directory: - corpus - examples - t - xt package: - DB provides: CPAN::Reporter::Smoker: file: lib/CPAN/Reporter/Smoker.pm version: '0.30' requires: CPAN: '1.93' CPAN::HandleConfig: '0' CPAN::Reporter::History: '1.1702' CPAN::Tarzip: '0' Carp: '0' Compress::Zlib: '1.2' Exporter: '0' ExtUtils::MakeMaker: '6.46' Fcntl: '0' File::Basename: '0' File::Spec: '3.27' File::Temp: '0.20' List::Util: '1.03' Module::Build: '0.30' Probe::Perl: '0.01' Term::Title: '0.01' Test::Reporter: '1.58' perl: '5.010' strict: '0' warnings: '0' resources: bugtracker: https://github.com/cpan-testers/CPAN-Reporter-Smoker/issues homepage: https://github.com/cpan-testers/CPAN-Reporter-Smoker repository: https://github.com/cpan-testers/CPAN-Reporter-Smoker.git version: '0.30' x_authority: cpan:DAGOLDEN x_contributors: - 'Alexandr Ciornii ' - 'Breno G. de Oliveira ' - 'Christian Walde ' - 'gregor herrmann ' - 'gregor herrmann ' x_generated_by_perl: v5.36.0 x_serialization_backend: 'YAML::Tiny version 1.74' x_spdx_expression: Apache-2.0 cpanfile100644000000000000 434014551645671 16116 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30# This file is generated by Dist::Zilla::Plugin::CPANFile v6.031 # Do not edit this file directly. To change prereqs, edit the `dist.ini` file. requires "CPAN" => "1.93"; requires "CPAN::HandleConfig" => "0"; requires "CPAN::Reporter::History" => "1.1702"; requires "CPAN::Tarzip" => "0"; requires "Carp" => "0"; requires "Compress::Zlib" => "1.2"; requires "Exporter" => "0"; requires "ExtUtils::MakeMaker" => "6.46"; requires "Fcntl" => "0"; requires "File::Basename" => "0"; requires "File::Spec" => "3.27"; requires "File::Temp" => "0.20"; requires "List::Util" => "1.03"; requires "Module::Build" => "0.30"; requires "Probe::Perl" => "0.01"; requires "Term::Title" => "0.01"; requires "Test::Reporter" => "1.58"; requires "perl" => "5.010"; requires "strict" => "0"; requires "warnings" => "0"; on 'test' => sub { requires "CPAN::Checksums" => "0"; requires "Cwd" => "3.27"; requires "ExtUtils::MakeMaker" => "6.46"; requires "File::Find" => "0"; requires "File::Path" => "0"; requires "File::Spec" => "3.27"; requires "IO::CaptureOutput" => "1.06"; requires "IO::File" => "0"; requires "Test::More" => "0.62"; requires "lib" => "0"; requires "perl" => "5.010"; requires "vars" => "0"; }; on 'test' => sub { recommends "CPAN::Meta" => "2.120900"; }; on 'configure' => sub { requires "ExtUtils::MakeMaker" => "6.17"; requires "perl" => "5.006"; }; on 'develop' => sub { requires "Dist::Zilla" => "5"; requires "Dist::Zilla::Plugin::Encoding" => "0"; requires "Dist::Zilla::Plugin::Prereqs" => "0"; requires "Dist::Zilla::Plugin::RemovePrereqs" => "0"; requires "Dist::Zilla::PluginBundle::DAGOLDEN" => "0.072"; requires "File::Spec" => "0"; requires "File::Temp" => "0"; requires "IO::Handle" => "0"; requires "IPC::Open3" => "0"; requires "Pod::Coverage::TrustPod" => "0"; requires "Pod::Wordlist" => "0"; requires "Software::License::Apache_2_0" => "0"; requires "Test::CPAN::Meta" => "0"; requires "Test::MinimumVersion" => "0"; requires "Test::More" => "0"; requires "Test::Perl::Critic" => "0"; requires "Test::Pod" => "1.41"; requires "Test::Pod::Coverage" => "1.08"; requires "Test::Portability::Files" => "0"; requires "Test::Spelling" => "0.12"; requires "Test::Version" => "1"; }; MANIFEST100644000000000000 327214551645671 15546 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.031. CONTRIBUTING.mkdn Changes LICENSE MANIFEST META.json META.yml Makefile.PL README Todo cpanfile dist.ini lib/CPAN/Reporter/Smoker.pm perlcritic.rc t/00-report-prereqs.dd t/00-report-prereqs.t t/00load.t t/CPAN/authors/01mailrc.txt.gz t/CPAN/authors/id/A/AN/ANDK/Bogus-OSUnsupported-0.01.tar.gz t/CPAN/authors/id/A/AN/ANDK/CHECKSUMS t/CPAN/authors/id/D/DA/DAGOLDEN/Bogus-Fail-0.01.tar.gz t/CPAN/authors/id/D/DA/DAGOLDEN/Bogus-PL-Fail-0.01.tar.gz t/CPAN/authors/id/D/DA/DAGOLDEN/Bogus-Pass-0.01.tar.gz t/CPAN/authors/id/D/DA/DAGOLDEN/Bundle-Fake-1.00.tar.gz t/CPAN/authors/id/D/DA/DAGOLDEN/CHECKSUMS t/CPAN/authors/id/J/JH/JHI/Bogus-Fail-0.01_01.tar.gz t/CPAN/authors/id/J/JH/JHI/CHECKSUMS t/CPAN/authors/id/P/P6/P6DISTS/Perl6/CHECKSUMS t/CPAN/authors/id/P/P6/P6DISTS/Perl6/Test-Harness-666.tar.gz t/CPAN/authors/id/P/PE/PETDANCE/CHECKSUMS t/CPAN/authors/id/P/PE/PETDANCE/Test-Harness-2.62.tar.gz t/CPAN/indices/README t/CPAN/indices/find-ls.gz t/CPAN/modules/02packages.details.txt.gz t/CPAN/modules/03modlist.data.gz t/CPAN/update-checksums.pl t/args.t t/data/MyConfig.pm t/data/disabled.yml t/data/dist-list t/lib/DotDirs.pm t/lib/Test/Reporter.pm t/parse_module_index.t t/parse_module_index/02packages.details.txt t/parse_module_index/find-ls t/parse_module_index/t_02packages.details.txt t/parse_module_index/t_find-ls t/smoke-all.t t/smoke-disabled.t t/smoke-list-array.t t/smoke-list-file.t t/smoke-restart.t t/smoke-reverse.t xt/author/00-compile.t xt/author/critic.t xt/author/distmeta.t xt/author/minimum-version.t xt/author/pod-coverage.t xt/author/pod-spell.t xt/author/pod-syntax.t xt/author/portability.t xt/author/test-version.t META.json100644000000000000 766314551645671 16046 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30{ "abstract" : "Turnkey CPAN Testers smoking", "author" : [ "David Golden " ], "dynamic_config" : 0, "generated_by" : "Dist::Zilla version 6.031, CPAN::Meta::Converter version 2.150010", "license" : [ "apache_2_0" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : 2 }, "name" : "CPAN-Reporter-Smoker", "no_index" : { "directory" : [ "corpus", "examples", "t", "xt" ], "package" : [ "DB" ] }, "prereqs" : { "configure" : { "requires" : { "ExtUtils::MakeMaker" : "6.17", "perl" : "5.006" } }, "develop" : { "requires" : { "Dist::Zilla" : "5", "Dist::Zilla::Plugin::Encoding" : "0", "Dist::Zilla::Plugin::Prereqs" : "0", "Dist::Zilla::Plugin::RemovePrereqs" : "0", "Dist::Zilla::PluginBundle::DAGOLDEN" : "0.072", "File::Spec" : "0", "File::Temp" : "0", "IO::Handle" : "0", "IPC::Open3" : "0", "Pod::Coverage::TrustPod" : "0", "Pod::Wordlist" : "0", "Software::License::Apache_2_0" : "0", "Test::CPAN::Meta" : "0", "Test::MinimumVersion" : "0", "Test::More" : "0", "Test::Perl::Critic" : "0", "Test::Pod" : "1.41", "Test::Pod::Coverage" : "1.08", "Test::Portability::Files" : "0", "Test::Spelling" : "0.12", "Test::Version" : "1" } }, "runtime" : { "requires" : { "CPAN" : "1.93", "CPAN::HandleConfig" : "0", "CPAN::Reporter::History" : "1.1702", "CPAN::Tarzip" : "0", "Carp" : "0", "Compress::Zlib" : "1.2", "Exporter" : "0", "ExtUtils::MakeMaker" : "6.46", "Fcntl" : "0", "File::Basename" : "0", "File::Spec" : "3.27", "File::Temp" : "0.20", "List::Util" : "1.03", "Module::Build" : "0.30", "Probe::Perl" : "0.01", "Term::Title" : "0.01", "Test::Reporter" : "1.58", "perl" : "5.010", "strict" : "0", "warnings" : "0" } }, "test" : { "recommends" : { "CPAN::Meta" : "2.120900" }, "requires" : { "CPAN::Checksums" : "0", "Cwd" : "3.27", "ExtUtils::MakeMaker" : "6.46", "File::Find" : "0", "File::Path" : "0", "File::Spec" : "3.27", "IO::CaptureOutput" : "1.06", "IO::File" : "0", "Test::More" : "0.62", "lib" : "0", "perl" : "5.010", "vars" : "0" } } }, "provides" : { "CPAN::Reporter::Smoker" : { "file" : "lib/CPAN/Reporter/Smoker.pm", "version" : "0.30" } }, "release_status" : "stable", "resources" : { "bugtracker" : { "web" : "https://github.com/cpan-testers/CPAN-Reporter-Smoker/issues" }, "homepage" : "https://github.com/cpan-testers/CPAN-Reporter-Smoker", "repository" : { "type" : "git", "url" : "https://github.com/cpan-testers/CPAN-Reporter-Smoker.git", "web" : "https://github.com/cpan-testers/CPAN-Reporter-Smoker" } }, "version" : "0.30", "x_authority" : "cpan:DAGOLDEN", "x_contributors" : [ "Alexandr Ciornii ", "Breno G. de Oliveira ", "Christian Walde ", "gregor herrmann ", "gregor herrmann " ], "x_generated_by_perl" : "v5.36.0", "x_serialization_backend" : "Cpanel::JSON::XS version 4.37", "x_spdx_expression" : "Apache-2.0" } 00load.t100644000000000000 44614551645671 16104 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tpackage main; use strict; use warnings; use Test::More; plan tests => 1 ; #--------------------------------------------------------------------------# # tests begin here #--------------------------------------------------------------------------# require_ok( 'CPAN::Reporter::Smoker' ); Makefile.PL100644000000000000 460514551645671 16370 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.031. use strict; use warnings; use 5.010; use ExtUtils::MakeMaker 6.17; my %WriteMakefileArgs = ( "ABSTRACT" => "Turnkey CPAN Testers smoking", "AUTHOR" => "David Golden ", "CONFIGURE_REQUIRES" => { "ExtUtils::MakeMaker" => "6.17" }, "DISTNAME" => "CPAN-Reporter-Smoker", "LICENSE" => "apache", "MIN_PERL_VERSION" => "5.010", "NAME" => "CPAN::Reporter::Smoker", "PREREQ_PM" => { "CPAN" => "1.93", "CPAN::HandleConfig" => 0, "CPAN::Reporter::History" => "1.1702", "CPAN::Tarzip" => 0, "Carp" => 0, "Compress::Zlib" => "1.2", "Exporter" => 0, "ExtUtils::MakeMaker" => "6.46", "Fcntl" => 0, "File::Basename" => 0, "File::Spec" => "3.27", "File::Temp" => "0.20", "List::Util" => "1.03", "Module::Build" => "0.30", "Probe::Perl" => "0.01", "Term::Title" => "0.01", "Test::Reporter" => "1.58", "strict" => 0, "warnings" => 0 }, "TEST_REQUIRES" => { "CPAN::Checksums" => 0, "Cwd" => "3.27", "ExtUtils::MakeMaker" => "6.46", "File::Find" => 0, "File::Path" => 0, "File::Spec" => "3.27", "IO::CaptureOutput" => "1.06", "IO::File" => 0, "Test::More" => "0.62", "lib" => 0, "vars" => 0 }, "VERSION" => "0.30", "test" => { "TESTS" => "t/*.t" } ); my %FallbackPrereqs = ( "CPAN" => "1.93", "CPAN::Checksums" => 0, "CPAN::HandleConfig" => 0, "CPAN::Reporter::History" => "1.1702", "CPAN::Tarzip" => 0, "Carp" => 0, "Compress::Zlib" => "1.2", "Cwd" => "3.27", "Exporter" => 0, "ExtUtils::MakeMaker" => "6.46", "Fcntl" => 0, "File::Basename" => 0, "File::Find" => 0, "File::Path" => 0, "File::Spec" => "3.27", "File::Temp" => "0.20", "IO::CaptureOutput" => "1.06", "IO::File" => 0, "List::Util" => "1.03", "Module::Build" => "0.30", "Probe::Perl" => "0.01", "Term::Title" => "0.01", "Test::More" => "0.62", "Test::Reporter" => "1.58", "lib" => 0, "strict" => 0, "vars" => 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} unless eval { ExtUtils::MakeMaker->VERSION(6.52) }; WriteMakefile(%WriteMakefileArgs); perlcritic.rc100644000000000000 116614551645671 17103 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30severity = 5 verbose = 8 [Variables::ProhibitPunctuationVars] allow = $@ $! [TestingAndDebugging::ProhibitNoStrict] allow = refs [Variables::ProhibitEvilVariables] variables = $DB::single # Turn these off [-BuiltinFunctions::ProhibitStringyEval] [-ControlStructures::ProhibitPostfixControls] [-ControlStructures::ProhibitUnlessBlocks] [-Documentation::RequirePodSections] [-InputOutput::ProhibitInteractiveTest] [-References::ProhibitDoubleSigils] [-RegularExpressions::RequireExtendedFormatting] [-InputOutput::ProhibitTwoArgOpen] [-Modules::ProhibitEvilModules] # Turn this on [Lax::ProhibitStringyEval::ExceptForRequire] smoke-all.t100644000000000000 227514551645671 16733 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tuse strict; use warnings; use Test::More; use Config; use File::Spec; use IO::CaptureOutput qw/capture/; use lib 't/lib'; use DotDirs; plan tests => 5 ; #--------------------------------------------------------------------------# # Setup test environment #--------------------------------------------------------------------------# # Setup CPAN::Reporter configuration and add mock lib path to @INC $ENV{PERL_CPAN_REPORTER_DIR} = DotDirs->prepare_cpan_reporter; # Setup CPAN dotdir with custom CPAN::MyConfig DotDirs->prepare_cpan; my ($stdout, $stderr); #--------------------------------------------------------------------------# # tests begin here #--------------------------------------------------------------------------# require_ok( 'CPAN::Reporter::Smoker' ); can_ok( 'CPAN::Reporter::Smoker', 'start' ); pass ("Starting simulated smoke testing"); local $ENV{PERL_CR_SMOKER_RUNONCE} = 1; if ( $ENV{PERL_AUTHOR_TESTING} ) { CPAN::Reporter::Smoker::start(); } else { capture \&CPAN::Reporter::Smoker::start, \$stdout, \$stderr; } require_ok( 'CPAN::Reporter::History' ); my @results = CPAN::Reporter::History::have_tested(); is( scalar @results, 6, "Number of reports in history" ); data000755000000000000 014551645671 15425 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tdist-list100644000000000000 10214551645671 17375 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/dataDAGOLDEN/Bogus-Pass-0.01.tar.gz DAGOLDEN/Bogus-Fail-0.01.tar.gz lib000755000000000000 014551645671 15262 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tDotDirs.pm100644000000000000 403414551645671 17331 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/libpackage DotDirs; # stolen/adapted from local_utils.pm in the CPAN.pm distro use Config; use File::Path qw(rmtree mkpath); use File::Spec (); use IO::File; sub _f ($) {File::Spec->rel2abs(File::Spec->catfile(split /\//, shift));} sub _d ($) {File::Spec->rel2abs(File::Spec->catdir(split /\//, shift));} my $dot_cpan = _d("t/dot-cpan$$"); my $dot_cpan_reporter = _d("t/dot-cpanreporter$$"); my $cpanlib = _d("$dot_cpan/lib"); my $testlib = _d("t/lib"); sub _cleanup { my $dir = shift; # suppress warnings local $SIG{__WARN__} = sub { 1 }; # try more than once -- Win32 sometimes fails due to apparent timing issues for ( 0 .. 1 ) { rmtree $dir if -d $dir; } } sub prepare_cpan { my $class = shift; _cleanup $dot_cpan; mkpath $dot_cpan; my $fh = IO::File->new( "t/data/MyConfig.pm" ); my $config = do { local $/; <$fh> }; $config =~ s/DOT_CPAN/dot-cpan$$/; mkpath _d("$cpanlib/CPAN"); $fh = IO::File->new(_f("$cpanlib/CPAN/MyConfig.pm"), "w") or die $!; print {$fh} $config; close $fh; $class->munge_inc($cpanlib); # load early require CPAN::MyConfig; $ENV{PERL5OPT} = join( q{ }, "-I$cpanlib -MCPAN::MyConfig", ( defined $ENV{PERL5OPT} ? $ENV{PERL5OPT} : () ) ); return $dot_cpan; } sub prepare_cpan_reporter { my $class = shift; _cleanup $dot_cpan_reporter; mkpath $dot_cpan_reporter; my $config = IO::File->new( _f"$dot_cpan_reporter\/config.ini", ">" ); print {$config} ; $config->close; $class->munge_inc( $testlib ); return $dot_cpan_reporter; } sub munge_inc { my $class = shift; my (@dirs) = @_; unshift @INC, @dirs; $ENV{PERL5LIB} = join( $Config{path_sep}, @dirs, ( defined $ENV{PERL5LIB} ? $ENV{PERL5LIB} : () ) ); } END { _cleanup $dot_cpan unless $?; _cleanup $dot_cpan_reporter unless $?; } 1; # standard .cpanreporter/config.ini for testing __DATA__ email_from = johndoe@example.com command_timeout = 30 send_duplicates = yes transport = Null CONTRIBUTING.mkdn100644000000000000 660414551645671 17201 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30## HOW TO CONTRIBUTE Thank you for considering contributing to this distribution. This file contains instructions that will help you work with the source code. The distribution is managed with Dist::Zilla. This means that many of the usual files you might expect are not in the repository, but are generated at release time, as is much of the documentation. Some generated files are kept in the repository as a convenience (e.g. Makefile.PL or cpanfile). Generally, **you do not need Dist::Zilla to contribute patches**. You do need Dist::Zilla to create a tarball. See below for guidance. ### Getting dependencies If you have App::cpanminus 1.6 or later installed, you can use `cpanm` to satisfy dependencies like this: $ cpanm --installdeps . Otherwise, look for either a `Makefile.PL` or `cpanfile` file for a list of dependencies to satisfy. ### Running tests You can run tests directly using the `prove` tool: $ prove -l $ prove -lv t/some_test_file.t For most of my distributions, `prove` is entirely sufficient for you to test any patches you have. I use `prove` for 99% of my testing during development. ### Code style and tidying Please try to match any existing coding style. If there is a `.perltidyrc` file, please install Perl::Tidy and use perltidy before submitting patches. If there is a `tidyall.ini` file, you can also install Code::TidyAll and run `tidyall` on a file or `tidyall -a` to tidy all files. ### Patching documentation Much of the documentation Pod is generated at release time. Some is generated boilerplate; other documentation is built from pseudo-POD directives in the source like C<=method> or C<=func>. If you would like to submit a documentation edit, please limit yourself to the documentation you see. If you see typos or documentation issues in the generated docs, please email or open a bug ticket instead of patching. ### Where to send patches and pull requests If you found this distribution on Github, sending a pull-request is the best way to contribute. If a pull-request isn't possible, a bug ticket with a patch file is the next best option. As a last resort, an email to the author(s) is acceptable. ## Installing and using Dist::Zilla Dist::Zilla is not required for contributing, but if you'd like to learn more, this section will get you up to speed. Dist::Zilla is a very powerful authoring tool, optimized for maintaining a large number of distributions with a high degree of automation, but it has a large dependency chain, a bit of a learning curve and requires a number of author-specific plugins. To install it from CPAN, I recommend one of the following approaches for the quickest installation: # using CPAN.pm, but bypassing non-functional pod tests $ cpan TAP::Harness::Restricted $ PERL_MM_USE_DEFAULT=1 HARNESS_CLASS=TAP::Harness::Restricted cpan Dist::Zilla # using cpanm, bypassing *all* tests $ cpanm -n Dist::Zilla In either case, it's probably going to take about 10 minutes. Go for a walk, go get a cup of your favorite beverage, take a bathroom break, or whatever. When you get back, Dist::Zilla should be ready for you. Then you need to install any plugins specific to this distribution: $ cpan `dzil authordeps` $ dzil authordeps | cpanm Once installed, here are some dzil commands you might try: $ dzil build $ dzil test $ dzil xtest You can learn more about Dist::Zilla at http://dzil.org/ smoke-restart.t100644000000000000 251414551645671 17643 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tuse strict; use warnings; use Test::More; use Config; use File::Spec; use IO::CaptureOutput qw/capture/; use lib 't/lib'; use DotDirs; plan tests => 6 ; #--------------------------------------------------------------------------# # Setup test environment #--------------------------------------------------------------------------# # Setup CPAN::Reporter configuration and add mock lib path to @INC $ENV{PERL_CPAN_REPORTER_DIR} = DotDirs->prepare_cpan_reporter; # Setup CPAN dotdir with custom CPAN::MyConfig DotDirs->prepare_cpan; my ($stdout, $stderr); #--------------------------------------------------------------------------# # tests begin here #--------------------------------------------------------------------------# require_ok( 'CPAN::Reporter::Smoker' ); can_ok( 'CPAN::Reporter::Smoker', 'start' ); pass ("Starting simulated smoke testing"); local $ENV{PERL_CR_SMOKER_RUNONCE} = 1; my $rc; if ( $ENV{PERL_AUTHOR_TESTING} ) { $rc = CPAN::Reporter::Smoker::start( restart_delay => 1 ); } else { $rc = capture { CPAN::Reporter::Smoker::start( restart_delay => 1 ) } \$stdout, \$stderr; } require_ok( 'CPAN::Reporter::History' ); my @results = CPAN::Reporter::History::have_tested(); is( scalar @results, 6 , "Number of reports in history" ); ok( $rc > 1, "Looped more than once due to restart delay" ); smoke-reverse.t100644000000000000 317514551645671 17636 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tuse strict; use warnings; use Test::More; use Config; use File::Spec; use IO::CaptureOutput qw/capture/; use lib 't/lib'; use DotDirs; plan tests => 7 ; #--------------------------------------------------------------------------# # Setup test environment #--------------------------------------------------------------------------# # Setup CPAN::Reporter configuration and add mock lib path to @INC $ENV{PERL_CPAN_REPORTER_DIR} = DotDirs->prepare_cpan_reporter; # Setup CPAN dotdir with custom CPAN::MyConfig DotDirs->prepare_cpan; my ($stdout, $stderr); my @list = qw( DAGOLDEN/Bogus-Pass-0.01.tar.gz DAGOLDEN/Bogus-Fail-0.01.tar.gz ); #--------------------------------------------------------------------------# # tests begin here #--------------------------------------------------------------------------# require_ok( 'CPAN::Reporter::Smoker' ); can_ok( 'CPAN::Reporter::Smoker', 'start' ); pass ("Starting simulated smoke testing"); local $ENV{PERL_CR_SMOKER_RUNONCE} = 1; my @args = ( list => \@list, 'reverse' => 1 ); my ($ran_ok); if ( ( $ENV{PERL_AUTHOR_TESTING} || "" ) eq 'DAGOLDEN' ) { CPAN::Reporter::Smoker::start( @args ); } else { $ran_ok = eval { capture sub { CPAN::Reporter::Smoker::start( @args ) } => \$stdout, \$stderr; 1; } } ok( $ran_ok, "Finished simulated smoke testing" ) or diag $@; my $regex = join( ".+?", map { quotemeta } reverse @list ); like( $stdout, qr/$regex/ms, "saw dists in correct order" ) or diag $stdout; require_ok( 'CPAN::Reporter::History' ); my @results = CPAN::Reporter::History::have_tested(); is( scalar @results, scalar @list, "Number of reports in history" ); MyConfig.pm100644000000000000 504314551645671 17640 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/data# MyConfig for CPAN -- adapted from CPAN.pm test files use Cwd 3.27; my $cwd = cwd; my $dot_cpan = "DOT_CPAN"; my $Iswin = $^O eq "MSWin32"; my $is_disable_test = $ENV{IS_DISABLE_TEST}; $CPAN::Config = { $Iswin ? () : ( 'make_install_make_command' => q[make], 'mbuild_install_build_command' => q[./Build], ), $is_disable_test ? ( 'prefs_dir' => qq[$cwd/t/data] ) : (), 'auto_commit' => 0, 'build_cache' => q[100], 'build_dir' => qq[$cwd/t/$dot_cpan/build], #'bzip2' => q[/bin/bzip2], 'cache_metadata' => q[1], colorize_output=>0, 'cpan_home' => qq[$cwd/t/$dot_cpan], #'curl' => q[], #'ftp' => q[], 'ftp_proxy' => q[], 'getcwd' => q[cwd], #'gpg' => q[/usr/bin/gpg], #'gzip' => q[/bin/gzip], 'histfile' => qq[$cwd/t/$dot_cpan/histfile], 'histsize' => q[100], 'http_proxy' => q[], 'inactivity_timeout' => q[0], 'index_expire' => q[1], 'inhibit_startup_message' => q[0], 'keep_source_where' => qq[$cwd/t/$dot_cpan/sources], #'lynx' => q[], #'make' => q[/usr/bin/make], 'make_arg' => q[], 'make_install_arg' => q[UNINST=1], 'makepl_arg' => q[], 'mbuild_arg' => q[], 'mbuild_install_arg' => q[--uninst 1], 'mbuildpl_arg' => q[], #'ncftp' => q[], #'ncftpget' => q[], 'no_proxy' => q[], #'pager' => q[less], 'prefer_installer' => q[MB], 'prerequisites_policy' => q[follow], 'scan_cache' => q[atstart], #'shell' => q[/usr/bin/zsh], 'show_upload_date' => q[0], #'tar' => q[/bin/tar], 'term_is_latin' => q[0], 'term_ornaments' => q[0], #'unzip' => q[/usr/bin/unzip], 'urllist' => [qq[file://$cwd/t/CPAN]], 'wait_list' => [q[wait://ls6.informatik.uni-dortmund.de:1404]], #'wget' => q[/usr/bin/wget], 'pushy_https' => 0, }; __END__ # Local Variables: # mode: cperl # cperl-indent-level: 2 # End: smoke-disabled.t100644000000000000 246014551645671 17726 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tuse strict; use warnings; use Test::More; use Config; use File::Spec; use IO::CaptureOutput qw/capture/; use lib 't/lib'; use DotDirs; if( eval {require YAML; 1 } ) { plan tests => 5 ; } else { plan skip_all => "Requires YAML module"; } #--------------------------------------------------------------------------# # Setup test environment #--------------------------------------------------------------------------# # Setup CPAN::Reporter configuration and add mock lib path to @INC $ENV{PERL_CPAN_REPORTER_DIR} = DotDirs->prepare_cpan_reporter; # Setup CPAN dotdir with custom CPAN::MyConfig DotDirs->prepare_cpan; my ($stdout, $stderr); $ENV{IS_DISABLE_TEST} = 1; #--------------------------------------------------------------------------# # tests begin here #--------------------------------------------------------------------------# require_ok( 'CPAN::Reporter::Smoker' ); can_ok( 'CPAN::Reporter::Smoker', 'start' ); pass ("Starting simulated smoke testing"); local $ENV{PERL_CR_SMOKER_RUNONCE} = 1; if ( $ENV{PERL_AUTHOR_TESTING} ) { CPAN::Reporter::Smoker::start(); } else { capture \&CPAN::Reporter::Smoker::start, \$stdout, \$stderr; } require_ok( 'CPAN::Reporter::History' ); my @results = CPAN::Reporter::History::have_tested(); is( scalar @results, 1, "Number of reports in history" ); author000755000000000000 014551645671 16206 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xtcritic.t100644000000000000 20114551645671 17761 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/author#!perl use strict; use warnings; use Test::Perl::Critic (-profile => "perlcritic.rc") x!! -e "perlcritic.rc"; all_critic_ok(); disabled.yml100644000000000000 17114551645671 20036 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/data--- comment: "Don't build mod_perl if required by some other module" match: distribution: "/Bogus-" disabled: 1 smoke-list-file.t100644000000000000 270314551645671 20047 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tuse strict; use warnings; use Test::More; use Config; use File::Spec; use IO::CaptureOutput qw/capture/; use lib 't/lib'; use DotDirs; plan tests => 6 ; #--------------------------------------------------------------------------# # Setup test environment #--------------------------------------------------------------------------# # Setup CPAN::Reporter configuration and add mock lib path to @INC $ENV{PERL_CPAN_REPORTER_DIR} = DotDirs->prepare_cpan_reporter; # Setup CPAN dotdir with custom CPAN::MyConfig DotDirs->prepare_cpan; my ($stdout, $stderr); my $list_file = File::Spec->catfile(qw/t data dist-list/); #--------------------------------------------------------------------------# # tests begin here #--------------------------------------------------------------------------# require_ok( 'CPAN::Reporter::Smoker' ); can_ok( 'CPAN::Reporter::Smoker', 'start' ); pass ("Starting simulated smoke testing"); local $ENV{PERL_CR_SMOKER_RUNONCE} = 1; my $ran_ok; $ran_ok = eval { capture sub { CPAN::Reporter::Smoker::start( list => $list_file ) } => \$stdout, \$stderr; 1; }; ok( $ran_ok, "Finished simulated smoke testing" ) or diag $@; # check non-blank lines for expected count open my $dist_file, "<", $list_file; my @lines = grep { /\S/ } <$dist_file>; close $dist_file; require_ok( 'CPAN::Reporter::History' ); my @results = CPAN::Reporter::History::have_tested(); is( scalar @results, scalar @lines, "Number of reports in history" ); smoke-list-array.t100644000000000000 265414551645671 20253 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tuse strict; use warnings; use Test::More; use Config; use File::Spec; use IO::CaptureOutput qw/capture/; use lib 't/lib'; use DotDirs; plan tests => 6 ; #--------------------------------------------------------------------------# # Setup test environment #--------------------------------------------------------------------------# # Setup CPAN::Reporter configuration and add mock lib path to @INC $ENV{PERL_CPAN_REPORTER_DIR} = DotDirs->prepare_cpan_reporter; # Setup CPAN dotdir with custom CPAN::MyConfig DotDirs->prepare_cpan; my ($stdout, $stderr); my @list = qw( DAGOLDEN/Bogus-Pass-0.01.tar.gz DAGOLDEN/Bogus-Fail-0.01.tar.gz ); #--------------------------------------------------------------------------# # tests begin here #--------------------------------------------------------------------------# require_ok( 'CPAN::Reporter::Smoker' ); can_ok( 'CPAN::Reporter::Smoker', 'start' ); pass ("Starting simulated smoke testing"); local $ENV{PERL_CR_SMOKER_RUNONCE} = 1; my $ran_ok; if ( $ENV{PERL_AUTHOR_TESTING} ) { CPAN::Reporter::Smoker::start(); } else { $ran_ok = eval { capture sub { CPAN::Reporter::Smoker::start( list => \@list ) } => \$stdout, \$stderr; 1; } } ok( $ran_ok, "Finished simulated smoke testing" ) or diag $@; require_ok( 'CPAN::Reporter::History' ); my @results = CPAN::Reporter::History::have_tested(); is( scalar @results, scalar @list, "Number of reports in history" ); distmeta.t100644000000000000 22314551645671 20322 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/author#!perl # This file was automatically generated by Dist::Zilla::Plugin::MetaTests. use strict; use warnings; use Test::CPAN::Meta; meta_yaml_ok(); indices000755000000000000 014551645671 16653 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPANREADME100644000000000000 77414551645671 17663 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/indices#--------------------------------------------------------------------------# README for find-ls #--------------------------------------------------------------------------# - generated from 'find . -ls > find-ls' - any leading ./ stripped - dates converted to YYYYMMDD.dddddd timestamp if needed - timestamps for modules adjusted so that alphabetically earlier Author/DistName-version strings have a later timestamp (as they will be tested first) - resulting file to be compresses with gzip 00-report-prereqs.t100644000000000000 1360114551645671 20271 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t#!perl use strict; use warnings; # This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.029 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'; my $cpan_meta_error; if ( $source && $HAS_CPAN_META && (my $meta = eval { CPAN::Meta->load_file($source) } ) ) { $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs); } else { $cpan_meta_error = $@; # capture error from CPAN::Meta->load_file($source) $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 grep { $_ eq $mod } @exclude; my $want = $req_hash->{$phase}{$type}{$mod}; $want = "undef" unless defined $want; $want = "any" if !$want && $want == 0; if ($mod eq 'perl') { push @reports, ['perl', $want, $]]; next; } my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required"; my $file = $mod; $file =~ s{::}{/}g; $file .= ".pm"; my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC; 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 ); if ($type eq 'modules') { splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl]; push @full_reports, map { sprintf(" %*s %*s\n", -$ml, $_->[0], $hl, $_->[2]) } @reports; } else { 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 ( $cpan_meta_error || @dep_errors ) { diag "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n"; } if ( $cpan_meta_error ) { my ($orig_source) = grep { -f } 'MYMETA.json', 'MYMETA.yml'; diag "\nCPAN::Meta->load_file('$orig_source') failed with: $cpan_meta_error\n"; } if ( @dep_errors ) { diag join("\n", "\nThe following REQUIRED prerequisites were not satisfied:\n", @dep_errors, "\n" ); } pass('Reported prereqs'); # vim: ts=4 sts=4 sw=4 et: pod-spell.t100644000000000000 77314551645671 20421 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/authoruse strict; use warnings; use Test::More; # generated by Dist::Zilla::Plugin::Test::PodSpelling 2.007005 use Test::Spelling 0.12; use Pod::Wordlist; add_stopwords(); all_pod_files_spelling_ok( qw( bin lib ) ); __DATA__ Alexandr Bam Baz Breno CPAN CTRL Christian Ciornii David Distroprefs Golden Oliveira Reporter SIGKILL Smoker Walde alexchorny cpanreporter dagolden de defaultdeps distroprefs garu gregoa gregor herrmann kurila lib minicpanrc prerelease titlebar unindexed untarring urllist walde Test000755000000000000 014551645671 16201 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/libReporter.pm100644000000000000 120514551645671 20477 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/lib/Test# Mock Test::Reporter -- don't actually send anything # Adapated from helper test code in CPAN::Reporter package Test::Reporter; our $VERSION = 1.54; use Config; use vars qw/$AUTOLOAD/; sub new { return bless {}, shift } # always pretend to be successful sending sub send { return 1 } sub address { return "nowhere" } sub subject { my $self = shift; return uc($self->grade) . ' ' . $self->distribution . " $Config{archname} $Config{osvers}"; } # handle all other properties sub AUTOLOAD { my $self = shift; if ( @_ ) { $self->{ $AUTOLOAD } = shift; } return $self->{ $AUTOLOAD }; } 1; parse_module_index.t100644000000000000 251414551645671 20711 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tuse strict; use warnings; use Test::More; use CPAN::Reporter::Smoker; plan tests => 9; my $list = CPAN::Reporter::Smoker::_parse_module_index('t/parse_module_index/02packages.details.txt', 't/parse_module_index/find-ls', 0); is(scalar(@$list), 10); ok((grep {$_ eq 'PETDANCE/Test-Harness-2.62_02.tar.gz'} @$list), 'Test-Harness-2.62_02 present'); ok(!(grep {$_ eq 'PETDANCE/Test-Harness-2.62_01.tar.gz'} @$list), 'Test-Harness-2.62_01 not present'); ok(!(grep {$_ eq 'DAGOLDEN/Bundle-Fake-1.00.tar.gz'} @$list), 'bundle module not present'); ok((grep {$_ eq 'TEST/Test-Test-1.01.tar.gz'} @$list), 'Test-Test-1.01 present'); ok(!(grep {$_ eq 'TEST/Test-Test-1.00_01.tar.gz'} @$list), 'Test-Test-1.00_01 not present'); my $list1 = CPAN::Reporter::Smoker::_parse_module_index('t/parse_module_index/02packages.details.txt', 't/parse_module_index/find-ls', 1); is(scalar(@$list1), 7, 'correct amount without trial versions'); my $list2 = CPAN::Reporter::Smoker::_parse_module_index('t/parse_module_index/t_02packages.details.txt', 't/parse_module_index/t_find-ls', 0, '20080101'); is(scalar(@$list2), 4, 'correct amount with date'); @$list2 = sort @$list2; is_deeply($list2, [ 'TEST/Test-Test-1.01_02.tar.gz', 'TEST/Test-Test2-1.02.tar.gz', 'TEST/Test-Test2-1.03_01.tar.gz', 'TEST/Test-Test3-1.03_02.tar.gz' ], 'correct distributions'); 00-compile.t100644000000000000 267114551645671 20406 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/authoruse 5.006; use strict; use warnings; # this test was generated with Dist::Zilla::Plugin::Test::Compile 2.058 use Test::More; plan tests => 2; my @module_files = ( 'CPAN/Reporter/Smoker.pm' ); # fake home for cpan-testers use File::Temp; local $ENV{HOME} = File::Temp::tempdir( CLEANUP => 1 ); my @switches = ( -d 'blib' ? '-Mblib' : '-Ilib', ); use File::Spec; use IPC::Open3; use IO::Handle; open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!"; my @warnings; for my $lib (@module_files) { # see L my $stderr = IO::Handle->new; diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} } $^X, @switches, '-e', "require q[$lib]")) if $ENV{PERL_COMPILE_TEST_DEBUG}; my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]"); binmode $stderr, ':crlf' if $^O eq 'MSWin32'; my @_warnings = <$stderr>; waitpid($pid, 0); is($?, 0, "$lib loaded ok"); shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/ and not eval { +require blib; blib->VERSION('1.01') }; if (@_warnings) { warn @_warnings; push @warnings, @_warnings; } } is(scalar(@warnings), 0, 'no warnings found') or diag 'got warnings: ', ( Test::More->can('explain') ? Test::More::explain(\@warnings) : join("\n", '', @warnings) ); 00-report-prereqs.dd100644000000000000 1003414551645671 20412 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tdo { my $x = { 'configure' => { 'requires' => { 'ExtUtils::MakeMaker' => '6.17', 'perl' => '5.006' } }, 'develop' => { 'requires' => { 'Dist::Zilla' => '5', 'Dist::Zilla::Plugin::Encoding' => '0', 'Dist::Zilla::Plugin::Prereqs' => '0', 'Dist::Zilla::Plugin::RemovePrereqs' => '0', 'Dist::Zilla::PluginBundle::DAGOLDEN' => '0.072', 'File::Spec' => '0', 'File::Temp' => '0', 'IO::Handle' => '0', 'IPC::Open3' => '0', 'Pod::Coverage::TrustPod' => '0', 'Pod::Wordlist' => '0', 'Software::License::Apache_2_0' => '0', 'Test::CPAN::Meta' => '0', 'Test::MinimumVersion' => '0', 'Test::More' => '0', 'Test::Perl::Critic' => '0', 'Test::Pod' => '1.41', 'Test::Pod::Coverage' => '1.08', 'Test::Portability::Files' => '0', 'Test::Spelling' => '0.12', 'Test::Version' => '1' } }, 'runtime' => { 'requires' => { 'CPAN' => '1.93', 'CPAN::HandleConfig' => '0', 'CPAN::Reporter::History' => '1.1702', 'CPAN::Tarzip' => '0', 'Carp' => '0', 'Compress::Zlib' => '1.2', 'Exporter' => '0', 'ExtUtils::MakeMaker' => '6.46', 'Fcntl' => '0', 'File::Basename' => '0', 'File::Spec' => '3.27', 'File::Temp' => '0.20', 'List::Util' => '1.03', 'Module::Build' => '0.30', 'Probe::Perl' => '0.01', 'Term::Title' => '0.01', 'Test::Reporter' => '1.58', 'perl' => '5.010', 'strict' => '0', 'warnings' => '0' } }, 'test' => { 'recommends' => { 'CPAN::Meta' => '2.120900' }, 'requires' => { 'CPAN::Checksums' => '0', 'Cwd' => '3.27', 'ExtUtils::MakeMaker' => '6.46', 'File::Find' => '0', 'File::Path' => '0', 'File::Spec' => '3.27', 'IO::CaptureOutput' => '1.06', 'IO::File' => '0', 'Test::More' => '0.62', 'lib' => '0', 'perl' => '5.010', 'vars' => '0' } } }; $x; }pod-syntax.t100644000000000000 25214551645671 20620 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/author#!perl # This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests. use strict; use warnings; use Test::More; use Test::Pod 1.41; all_pod_files_ok(); portability.t100644000000000000 16314551645671 21055 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/authoruse strict; use warnings; use Test::More; use Test::Portability::Files; options(test_one_dot => 0); run_tests(); pod-coverage.t100644000000000000 36514551645671 21072 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/author#!perl # This file was automatically generated by Dist::Zilla::Plugin::PodCoverageTests. use strict; use warnings; use Test::Pod::Coverage 1.08; use Pod::Coverage::TrustPod; all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' }); test-version.t100644000000000000 63714551645671 21163 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/authoruse strict; use warnings; use Test::More; # generated by Dist::Zilla::Plugin::Test::Version 1.09 use Test::Version; my @imports = qw( version_all_ok ); my $params = { is_strict => 0, has_version => 1, multiple => 0, }; push @imports, $params if version->parse( $Test::Version::VERSION ) >= version->parse('1.002'); Test::Version->import(@imports); version_all_ok; done_testing; find-ls.gz100644000000000000 123314551645671 20710 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/indices-Vfind-lsn0y$vwɀҎ"Ad,j (?k />6J8׷][VEo?pڸ\ P`FUk+_/a@^4~V:DHPn䁜QZB7h#?Ġ7q4Sz6Æb 3 畊JEQre q*fI/_1śC &uja0`4᮰$}_2R/jK*?N5ZH-TplnMV8Kxh4 Wv ߵbش9a݈y[]#qI{08[ -vKh' *\m P W DiMHZ`:̆ԆbI@]Ztv̓FQJᦾczghC6<폆-*"nQ1gm$DpێV7~/?FnET4}CGaOn<*K1MܭKSՀ)=,2)8)q,́^⠸t0Ң㨌[/5[ĩd`ܲ  CPAN000755000000000000 014551645671 15235 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tupdate-checksums.pl100755000000000000 53114551645671 21161 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN#!/usr/bin/env perl use strict; use warnings; use CPAN::Checksums qw/updatedir/; use File::Find; sub wanted { return unless -d $File::Find::name && $File::Find::name =~ m{authors/id/./../.+$}; print "$File::Find::name\n"; updatedir( $File::Find::name ); } find( { wanted => \&wanted, no_chdir => 1 }, q{.} ); Reporter000755000000000000 014551645671 17342 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/lib/CPANSmoker.pm100644000000000000 10153514551645671 21345 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/lib/CPAN/Reporteruse 5.006; use strict; use warnings; package CPAN::Reporter::Smoker; our $VERSION = '0.30'; use Carp; use Config; use CPAN 1.93; use CPAN::Tarzip; use CPAN::HandleConfig; use CPAN::Reporter::History 1.1702; use Compress::Zlib 1.2; use Fcntl ':flock'; use File::Basename qw/basename dirname/; use File::Spec 3.27; use File::Temp 0.20; use List::Util 1.03 qw/shuffle/; use Probe::Perl 0.01; use Term::Title 0.01; use Exporter; our @ISA = 'Exporter'; our @EXPORT = qw/ start /; ## no critic Export #--------------------------------------------------------------------------# # globals #--------------------------------------------------------------------------# my $perl = Probe::Perl->find_perl_interpreter; my $tmp_dir = File::Temp::tempdir( 'C-R-Smoker-XXXXXXXX', DIR => File::Spec->tmpdir, CLEANUP => 1 ); #--------------------------------------------------------------------------# # start -- start automated smoking #--------------------------------------------------------------------------# my %spec = ( clean_cache_after => { default => 100, is_valid => sub { /^\d+$/ }, }, restart_delay => { default => 12 * 3600, # 12 hours is_valid => sub { /^\d+$/ }, }, set_term_title => { default => 1, is_valid => sub { /^[01]$/ }, }, status_file => { default => File::Spec->catfile( File::Spec->tmpdir, "smoker-status-$$.txt" ), is_valid => sub { -d dirname( $_ ) }, }, list => { default => undef, is_valid => sub { !defined $_ || ref $_ eq 'ARRAY' || -r $_ } }, install => { default => 0, is_valid => sub { /^[01]$/ }, }, 'reverse' => { default => 0, is_valid => sub { /^[01]$/ }, }, 'random' => { default => 0, is_valid => sub { /^[01]$/ }, }, force_trust => { default => 0, is_valid => sub { /^[01]$/ }, }, 'reload_history_period' => { default => 30*60, is_valid => sub { /^\d+$/ }, }, filter => { default => undef, is_valid => sub { !defined $_ || ref $_ eq 'CODE' } }, skip_dev_versions => { default => 0, is_valid => sub { /^[01]$/ }, }, '_start_from_timestamp' => { default => 0, is_valid => sub { /^(?:[\d.]{8}|0)$/ }, }, _hook_after_test => { default => undef, is_valid => sub { !defined $_ || ref $_ eq 'CODE' } }, ); sub start { my %args = map { $_ => $spec{$_}{default} } keys %spec; croak "Invalid arguments to start(): must be key/value pairs" if @_ % 2; while ( @_ ) { my ($key, $value) = splice @_, 0, 2; local $_ = $value; # alias for validator croak "Invalid argument to start(): $key => $value" unless $spec{$key} && $spec{$key}{is_valid}->($value); $args{$key} = $value; } # Stop here if we're just testing return 1 if $ENV{PERL_CR_SMOKER_SHORTCUT}; # Notify before CPAN messages start $CPAN::Frontend->mywarn( "Starting CPAN::Reporter::Smoker\n" ); # Let things know we're running automated local $ENV{AUTOMATED_TESTING} = 1; # Always accept default prompts local $ENV{PERL_MM_USE_DEFAULT} = 1; local $ENV{PERL_EXTUTILS_AUTOINSTALL} = "--defaultdeps"; # Load CPAN configuration my $init_cpan = 0; unless ( $init_cpan++ ) { CPAN::HandleConfig->load(); CPAN::Shell::setup_output; CPAN::Index->reload; $CPAN::META->checklock(); # needed for cache scanning } # Win32 SIGINT propogates all the way to us, so trap it before we smoke # Must come *after* checklock() to override CPAN's $SIG{INT} local $SIG{INT} = \&_prompt_quit; # Master loop # loop counter will increment with each restart - useful for testing my $loop_counter = 0; # global cache of distros smoked to speed skips on restart my %seen = map { $_->{dist} => 1 } CPAN::Reporter::History::have_tested(); my $history_loaded_at = time; SCAN_LOOP: while ( 1 ) { $loop_counter++; my $loop_start_time = time; my $dists; # Get the list of distributions to process if ( $args{list} ) { # Given a list if ( ref $args{list} eq 'ARRAY' ) { $dists = $args{list}; } # Given a file else { open( my $list_fh, "<", $args{list} ) or die $!; my @list = map { chomp; $_ } grep { /\S/ } <$list_fh>; $dists = \@list; } } else { # Or get list from CPAN my $package = _get_module_index( 'modules/02packages.details.txt.gz' ); my $find_ls = _get_module_index( 'indices/find-ls.gz' ); CPAN::Index->reload; $CPAN::Frontend->mywarn( "Smoker: scanning and sorting index\n"); $dists = _parse_module_index( $package, $find_ls, $args{skip_dev_versions}, $args{_start_from_timestamp} ); $CPAN::Frontend->mywarn( "Smoker: found " . scalar @$dists . " distributions on CPAN\n"); } # Maybe reverse the list if ( $args{'reverse'} ) { $dists = [ reverse @$dists ]; } # Maybe shuffle the list if ( $args{'random'} ) { $dists = [ shuffle @$dists ]; } # Check if we need to manually reset test history during each dist loop my $reset_string = q{}; if ( $CPAN::Config->{build_dir_reuse} && $CPAN::META->can('reset_tested') ) { $reset_string = 'CPAN::Index->reload; $CPAN::META->reset_tested; ' } # Force trust_test_report_history if requested my $trust_string = q{}; if ( $args{force_trust} ) { $trust_string = '$CPAN::Config->{trust_test_report_history} = 1; ' } # Clean cache on start and count dists tested to trigger cache cleanup _clean_cache(); my $dists_tested = 0; # Start smoking DIST: for my $d ( 0 .. $#{$dists} ) { my $dist = CPAN::Shell->expandany($dists->[$d]); my $base = $dist->base_id; my $count = sprintf('%d/%d', $d+1, scalar @$dists); if ( $seen{$base}++ ) { $CPAN::Frontend->mywarn( "Smoker: already tested $base [$count]\n"); next DIST; } elsif ( $args{filter} and $args{filter}->($dist) ) { $CPAN::Frontend->mywarn( "Smoker: dist skipped $base [$count]\n"); next DIST; } elsif ( CPAN::Distribution->new(%{$dist})->prefs->{disabled} ) { $CPAN::Frontend->mywarn( "Smoker: dist disabled $base [$count]\n"); next DIST; } else { # record distribution being smoked my $time = scalar localtime(); my $msg = "$base [$count] at $time"; if ( $args{set_term_title} ) { Term::Title::set_titlebar( "Smoking $msg" ); } $CPAN::Frontend->mywarn( "\nSmoker: testing $msg\n\n" ); local $ENV{PERL_CR_SMOKER_CURRENT} = $base; open my $status_fh, ">", $args{status_file}; if ( $status_fh ) { flock $status_fh, LOCK_EX; print {$status_fh} $msg; flock $status_fh, LOCK_UN; close $status_fh; } # invoke CPAN.pm to test distribution system($perl, "-MCPAN", "-e", "\$CPAN::Config->{test_report} = 1; " . $trust_string . $reset_string . ($args{'install'} ? 'install' : 'test') . "( '$dists->[$d]' )" ); my $interrupted = 0; if ( $? & 127 ) { $interrupted = 1; _prompt_quit( $? & 127 ) ; } if ($args{_hook_after_test}) { $args{_hook_after_test}->($dist, $interrupted); } # cleanup and record keeping unlink $args{status_file} if -f $args{status_file}; $dists_tested++; } if ( $dists_tested >= $args{clean_cache_after} ) { _clean_cache(); $dists_tested = 0; } if (time - $history_loaded_at > $args{reload_history_period}) { #_reload_history %seen = map { $_->{dist} => 1 } CPAN::Reporter::History::have_tested(); $history_loaded_at = time; $CPAN::Frontend->mywarn( "List of distros smoked updated\n"); } next SCAN_LOOP if time - $loop_start_time > $args{restart_delay}; } last SCAN_LOOP if $ENV{PERL_CR_SMOKER_RUNONCE}; last SCAN_LOOP if $args{list}; # if here, we are out of distributions to test, so sleep my $delay = int( $args{restart_delay} - ( time - $loop_start_time )); if ( $delay > 0 ) { $CPAN::Frontend->mywarn( "\nSmoker: Finished all available dists. Sleeping for $delay seconds.\n\n" ); sleep $delay ; } } CPAN::cleanup(); return $loop_counter; } #--------------------------------------------------------------------------# # private variables and functions #--------------------------------------------------------------------------# sub _clean_cache { my $phase = $CPAN::Config->{scan_cache}; # Possibly clean up cache if it exceeds defined size if ( $CPAN::META->{cachemgr} ) { $CPAN::META->{cachemgr}->scan_cache($phase); } else { $CPAN::META->{cachemgr} = CPAN::CacheMgr->new($phase); # also scans cache } } sub _prompt_quit { my ($sig) = @_; # convert numeric to name if ( $sig =~ /\d+/ ) { my @signals = split q{ }, $Config{sig_name}; $sig = $signals[$sig] || '???'; } $CPAN::Frontend->myprint( "\nStopped during $ENV{PERL_CR_SMOKER_CURRENT}.\n" ) if defined $ENV{PERL_CR_SMOKER_CURRENT}; $CPAN::Frontend->myprint( "\nCPAN testing halted on SIG$sig. Continue (y/n)? [n]\n" ); my $answer = ; CPAN::cleanup(), exit 0 unless substr( lc($answer), 0, 1) eq 'y'; return; } #--------------------------------------------------------------------------# # _get_module_index # # download the 01modules index and return the local file name #--------------------------------------------------------------------------# sub _get_module_index { my ($remote_file) = @_; $CPAN::Frontend->mywarn( "Smoker: getting $remote_file from CPAN\n"); # CPAN.pm may not use aslocal if it's a file:// mirror my $aslocal_file = File::Spec->catfile( $tmp_dir, basename( $remote_file )); my $actual_local = CPAN::FTP->localize( $remote_file, $aslocal_file, 1 ); if ( ! -r $actual_local ) { die "Couldn't get '$remote_file' from your CPAN mirror. Halting\n"; } return $actual_local; } my $module_index_re = qr{ ^\s href="\.\./authors/id/./../ # skip prelude ([^"]+) # capture to next dquote mark .+? # skip to end of hyperlink \s+ # skip spaces \S+ # skip size \s+ # skip spaces (\S+) # capture day \s+ # skip spaces (\S+) # capture month \s+ # skip spaces (\S+) # capture year }xms; my %months = ( Jan => '01', Feb => '02', Mar => '03', Apr => '04', May => '05', Jun => '06', Jul => '07', Aug => '08', Sep => '09', Oct => '10', Nov => '11', Dec => '12' ); # standard regexes # note on archive suffixes -- .pm.gz shows up in 02packagesf my %re = ( bundle => qr{^Bundle::}, mod_perl => qr{/mod_perl}, perls => qr{(?: /(?:emb|syb|bio)?perl-\d | /(?:parrot|ponie|kurila|Perl6-Pugs)-\d | /perl-?5\.004 | /perl_mlb\.zip )}xi, archive => qr{\.(?:tar\.(?:bz2|gz|Z)|t(?:gz|bz)|(? qr{ ^(?: modules/by-module/[^/]+/./../ | modules/by-module/[^/]+/ | modules/by-category/[^/]+/[^/]+/./../ | modules/by-category/[^/]+/[^/]+/ | authors/id/./../ ) }x, leading_initials => qr{(.)/\1./}, ); # match version and suffix $re{version_suffix} = qr{([-._]v?[0-9].*)($re{archive})}; # split into "AUTHOR/Name" and "Version" $re{split_them} = qr{^(.+?)$re{version_suffix}$}; # matches "AUTHOR/tarball.suffix" or AUTHOR/modules/tarball.suffix # and not other "AUTHOR/subdir/whatever" # Just get AUTHOR/tarball.suffix from whatever file name is passed in sub _get_base_id { my $file = shift; my $base_id = $file; $base_id =~ s{$re{target_dir}}{}; return $base_id; } sub _base_name { my ($base_id) = @_; my $base_file = basename $base_id; my ($base_name, $base_version) = $base_file =~ $re{split_them}; return $base_name; } #--------------------------------------------------------------------------# # _parse_module_index # # parse index and return array_ref of distributions in reverse date order #--------------------------------------------------------------------------#- sub _parse_module_index { my ( $packages, $file_ls, $skip_dev_versions, $start_from_timestamp ) = @_; # first walk the packages list # and build an index my (%valid_bases, %valid_distros, %mirror); my (%latest, %latest_dev); my $gz = Compress::Zlib::gzopen($packages, "rb") or die "Cannot open package list: $Compress::Zlib::gzerrno"; my $inheader = 1; while ($gz->gzreadline($_) > 0) { if ($inheader) { $inheader = 0 unless /\S/; next; } my ($module, $version, $path) = split; my $base_id = _get_base_id("authors/id/$path"); # skip all perl-like distros next if $base_id =~ $re{perls}; # skip mod_perl environment next if $base_id =~ $re{mod_perl}; # skip all bundles next if $module =~ $re{bundle}; $valid_distros{$base_id}++; my $base_name = _base_name( $base_id ); if ($base_name) { $latest{$base_name} = { datetime => 0, base_id => $base_id }; } } # next walk the find-ls file local *FH; tie *FH, 'CPAN::Tarzip', $file_ls; while ( defined ( my $line = ) ) { my %stat; @stat{qw/inode blocks perms links owner group size datetime name linkname/} = split q{ }, $line; unless ($stat{name} && $stat{perms} && $stat{datetime}) { next; } # skip directories, symlinks and things that aren't a tarball next if $stat{perms} eq "l" || substr($stat{perms},0,1) eq "d"; next unless $stat{name} =~ $re{target_dir}; next unless $stat{name} =~ $re{archive}; next if $start_from_timestamp && $stat{datetime} < $start_from_timestamp; # skip if not AUTHOR/tarball # skip perls my $base_id = _get_base_id($stat{name}); next unless $base_id; next if $base_id =~ $re{perls}; # skip Perl6 distros: AUTHOR/Perl6/... next if $base_id =~ m{\A\w+/Perl6/}; my $base_name = _base_name( $base_id ); # if $base_id matches 02packages, then it is the latest version # and we definitely want it; also update datetime from the initial # assumption of 0 if ( $valid_distros{$base_id} ) { $mirror{$base_id} = $stat{datetime}; next unless $base_name; if ( $stat{datetime} > $latest{$base_name}{datetime} ) { $latest{$base_name} = { datetime => $stat{datetime}, base_id => $base_id }; } } # if not in the packages file, we only want it if it resembles # something in the package file and we only the most recent one else { # skip if couldn't parse out the name without version number next unless defined $base_name; # skip unless there's a matching base from the packages file next unless $latest{$base_name}; next if $skip_dev_versions; # keep only the latest $latest_dev{$base_name} ||= { datetime => 0 }; if ( $stat{datetime} > $latest_dev{$base_name}{datetime} ) { $latest_dev{$base_name} = { datetime => $stat{datetime}, base_id => $base_id }; } } } if ( !$start_from_timestamp ) { # pick up anything from packages that wasn't found in find-ls # usually because find-ls is updated more rarely than packages # as it is missing from find-ls, timestamp would be set to 0 for my $name ( keys %latest ) { my $base_id = $latest{$name}{base_id}; $mirror{$base_id} = $latest{$name}{datetime} unless $mirror{$base_id}; } } # for dev versions, it must be newer than the latest version of # the same base name from the packages file for my $name ( keys %latest_dev ) { if ( ! $latest{$name} ) { next; } next if $latest{$name}{datetime} > $latest_dev{$name}{datetime}; $mirror{ $latest_dev{$name}{base_id} } = $latest_dev{$name}{datetime} } return [ sort { $mirror{$b} <=> $mirror{$a} } keys %mirror ]; } 1; # ABSTRACT: Turnkey CPAN Testers smoking __END__ =pod =encoding UTF-8 =head1 NAME CPAN::Reporter::Smoker - Turnkey CPAN Testers smoking =head1 VERSION version 0.30 =head1 SYNOPSIS $ perl -MCPAN::Reporter::Smoker -e start =head1 DESCRIPTION Rudimentary smoke tester for CPAN Testers, built upon L. Use at your own risk. It requires a recent version of CPAN::Reporter to run. Currently, CPAN::Reporter::Smoker requires zero independent configuration; instead it uses configuration settings from CPAN.pm and CPAN::Reporter. Once started, it retrieves a list of distributions from the configured CPAN mirror and begins testing them in reverse order of upload. It will skip any distribution which has already had a report sent by CPAN::Reporter. Features (or bugs, depending on your point of view): =over =item * No configuration needed =item * Tests each distribution as a separate CPAN process -- each distribution has prerequisites like build_requires satisfied from scratch =item * Automatically checks for new distributions every twelve hours or as otherwise specified =item * Continues until interrupted with CTRL-C =item * Checks CPAN.pm "distroprefs" to see if distributions should be skipped (before handing off to CPAN) =back Current limitations: =over =item * Does not attempt to retest distributions that had reports discarded because of prerequisites that could not be satisfied =item * Does not test trial version if there is no non-trial version =back =head2 WARNING -- smoke testing is risky Smoke testing will download and run programs that other people have uploaded to CPAN. These programs could do B to your system, including deleting everything on it. Do not run CPAN::Reporter::Smoker unless you are prepared to take these risks. =head1 USAGE =head2 C<<< start() >>> Starts smoke testing using defaults already in CPAN::Config and CPAN::Reporter's .cpanreporter directory. Runs until all distributions are tested or the process is halted with CTRL-C or otherwise killed. C<<< start() >>> supports several optional arguments: =over =item * C<<< clean_cache_after >>> -- number of distributions that will be tested before checking to see if the CPAN build cache needs to be cleaned up (not including any prerequisites tested). Must be a positive integer. Defaults to 100 =item * C<<< list >>> -- if provided, this list of distributions will be tested instead of all of CPAN. May be a reference to an array of distribution names or may be a filename containing one distribution name per line. Distribution names must be of the form 'AUTHOREDist-Name-0.00.tar.gz' =item * C<<< restart_delay >>> -- number of seconds that must elapse before restarting smoke testing. This will reload indices to search for new distributions and restart testing from the most recent distribution. Must be a positive integer; Defaults to 43200 seconds (12 hours) =item * C<<< skip_dev_versions >>> -- if true, unindexed distributions will not be tested. Valid values are 0 or 1. Defaults to 0. =item * C<<< set_term_title >>> -- toggle for whether the terminal titlebar will be updated with the distribution being smoke tested and the starting time of the test. Helps determine if a test is hung and which distribution might be responsible. Valid values are 0 or 1. Defaults to 1 =item * C<<< status_file >>> -- during testing, the name of the distribution under test and a timestamp are written to this file. The file is removed after the test is complete. This helps identify a problem distribution if testing hangs or crashes the computer. If the argument includes a path, all directories to the file must exist. Defaults to C<<< smoker-status-$$.txt >>> in File::Spec-Etmpdir. =item * C<<< install >>> -- toggle for whether the distribution should be installed after successful testing. Can be useful to avoid prerequisite re-building and growing PERL5LIB for the cost of disk space used for installed modules. Valid values are 0 or 1. Defaults to 0 =item * C<<< reverse >>> -- toggle the order in which releases are tested. When set to 1, testing starts from the older release not the most recent one (or the last distribution if --list is provided). Valid values are 0 or 1. Defaults to 0 =item * C<<< random >>> -- toggle whether to randomize distribution test order. When set to 1, the list of releases is shuffled. Valid values are 0 or 1. Defaults to 0 =item * C<<< force_trust >>> -- toggle whether to override CPAN's C<<< trust_test_report_history >>> option. When set to 1, C<<< trust_test_report_history >>> is set to 1. When set to 0, C<<< trust_test_report_history >>> is left alone and whatever the user has configured for their CPAN client is used. Valid values are 0 or 1. Defaults to 0 =item * C<<< reload_history_period >>> -- after this period in seconds, history of modules smoked will be reloaded when possible. Default value 1800 seconds (30 minutes). =back =head1 HINTS =head2 Selection of distributions to test Only the most recently uploaded developer and normal releases will be tested, and only if the developer release is newer than the regular release indexed by PAUSE. For example, if Foo-Bar-0.01, Foo-Bar-0.02, Foo-Bar-0.03_01 and Foo-Bar-0.03_02 are on CPAN, only Foo-Bar-0.02 and Foo-Bar-0.03_02 will be tested, and in reverse order of when they were uploaded. Once Foo-Bar-0.04 is released and indexed, Foo-Bar-0.03_02 will not longer be tested. To avoid testing script or other tarballs, developer distributions included must have a base distribution name that resembles a distribution tarball already indexed by PAUSE. If the first upload of distribution to PAUSE is a developer release -- Baz-Bam-0.00_01.tar.gz -- it will not be tested as there is no indexed Baz-Bam appearing in CPAN's 02packages.details.txt file. Unauthorized tarballs are treated like developer releases and will be tested if they resemble an indexed distribution and are newer than the indexed tarball. Perl, parrot, kurila, Pugs and similar distributions will not be tested. The skip list is based on CPAN::Mini and matches as follows: qr{(?: /(?:emb|syb|bio)?perl-\d | /(?:parrot|ponie|kurila|Perl6-Pugs)-\d | /perl-?5\.004 | /perl_mlb\.zip )}xi, Bundles and mod_perl distributions will also not be tested, though mod_perl is likely to be requested as a dependency by many modules. See the next section for how to tell CPAN.pm not to test certain dependencies. =head2 Skipping additional distributions If certain distributions hang, crash or otherwise cause trouble, you can use CPAN's "distroprefs" system to disable them. If a distribution is disabled, it won't be built or tested. If a distribution's dependency is disabled, a failing test is just discarded. The first step is configuring a directory for distroprefs files: $ cpan cpan> o conf init prefs_dir cpan> o conf commit Next, ensure that either the L or L module is installed. (YAML::Syck is faster). Then create a file in the C<<< prefs_dir >>> directory to hold the list of distributions to disable, e.g. call it C<<< disabled.yml >>> In that file, you can add blocks of YAML code to disable distributions. The match criteria "distribution" is a regex that matches against the canonical name of a distribution, e.g. C<<< AUTHOR/Foo-Bar-3.14.tar.gz >>>. Here is a sample file to show you some syntax (don't actually use these, though): --- comment: "Tests take too long" match: distribution: "^DAGOLDEN/CPAN-Reporter-\d" disabled: 1 --- comment: "Skip Win32 distributions" match: distribution: "/Win32" disabled: 1 --- comment: "Skip distributions by Andy Lester" match: distribution: "^PETDANCE" disabled: 1 Please note that disabling distributions like this will also disable them for normal, non-smoke usage of CPAN.pm. One distribution that I would recommend either installing up front or else disabling with distroprefs is mod_perl, as it is a common requirement for many Apache:: modules but does not (easily) build and test under automation. --- comment: "Don't build mod_perl if required by some other module" match: distribution: "/mod_perl-\d" disabled: 1 Distroprefs are more powerful than this -- they can be used to automate responses to prompts in distributions, set environment variables, specify additional dependencies and so on. Read the docs for CPAN.pm for more and look in the "distroprefs" directory in the CPAN distribution tarball for examples. =head2 Using a local CPAN::Mini mirror Because distributions must be retrieved from a CPAN mirror, the smoker may cause heavy network load and will repetitively download common build prerequisites. An alternative is to use L to create a local CPAN mirror and to point CPAN's C<<< urllist >>> to the local mirror. $ cpan cpan> o conf urllist unshift file:///path/to/minicpan cpan> o conf commit However, CPAN::Reporter::Smoker needs the C<<< find-ls.gz >>> file, which CPAN::Mini does not mirror by default. Add it to a .minicpanrc file in your home directory to include it in your local CPAN mirror. also_mirror: indices/find-ls.gz Note that CPAN::Mini does not mirror developer versions. Therefore, a live, network CPAN Mirror will be needed in the urllist to retrieve these. Note that CPAN requires the LWP module to be installed to use a local CPAN mirror. Alternatively, you might experiment with the alpha-quality release of L, which subclasses CPAN::Mini to retrieve developer distributions (and find-ls.gz) using the same logic as CPAN::Reporter::Smoker. =head2 Timing out hanging tests CPAN::Reporter (since 1.08) supports a 'command_timeout' configuration option. Set this option in the CPAN::Reporter configuration file to time out tests that hang up or get stuck at a prompt. Set it to a high-value to avoid timing out a lengthy tests that are still running -- 1000 or more seconds is probably enough. Warning -- on Win32, terminating processes via the command_timeout is equivalent to SIGKILL and could cause system instability or later deadlocks This option is still considered experimental. =head2 Avoiding repetitive prerequisite testing Because CPAN::Reporter::Smoker satisfies all requirements from scratch, common dependencies (e.g. Class::Accessor) will be unpacked, built and tested repeatedly. As of version 1.92_56, CPAN supports the C<<< trust_test_report_history >>> config option. When set, CPAN will check the last test report for a distribution. If one is found, the results of that test are used instead of running tests again. $ cpan cpan> o conf init trust_test_report_history cpan> o conf commit =head2 Avoiding repetitive prerequisite builds (EXPERIMENTAL) CPAN has a C<<< build_dir_reuse >>> config option. When set (and if a YAML module is installed and configured), CPAN will attempt to make build directories persistent. This has the potential to save substantial time and space during smoke testing. CPAN::Reporter::Smoker will recognize if this option is set and make adjustments to the test process to keep PERL5LIB from growing uncontrollably as the number of persistent directories increases. B Support for C<<< build_dir_reuse >>> is highly experimental. Wait for at least CPAN version 1.92_62 before trying this option. $ cpan cpan> o conf init build_dir_reuse cpan> o conf commit =head2 Stopping early if a prerequisite fails Normally, CPAN.pm continues testing a distribution even if a prerequisite fails to build or fails testing. Some distributions may pass their tests even without a listed prerequisite, but most just fail (and CPAN::Reporter discards failures if prerequisites are not met). As of version 1.92_57, CPAN supports the C<<< halt_on_failure >>> config option. When set, a prerequisite failure stops further processing. $ cpan cpan> o conf init halt_on_failure cpan> o conf commit However, a disadvantage of halting early is that no DISCARD grade is recorded in the history. The next time CPAN::Reporter::Smoker runs, the distribution will be tested again from scratch. It may be better to let all prerequisites finish so the distribution can fail its test and be flagged with DISCARD so it will be skipped in the future. =head2 CPAN cache bloat CPAN will use a lot of scratch space to download, build and test modules. Use CPAN's built-in cache management configuration to let it purge the cache periodically if you don't want to do this manually. When configured, the cache will be purged on start and after a certain number of distributions have been tested as determined by the C<<< clean_cache_after >>> option for the C<<< start() >>> function. $ cpan cpan> o conf init build_cache scan_cache cpan> o conf commit =head2 CPAN verbosity Recent versions of CPAN are verbose by default, but include some lesser known configuration settings to minimize this for untarring distributions and for loading support modules. Setting the verbosity for these to 'none' will minimize some of the clutter to the screen as distributions are tested. $ cpan cpan> o conf init /verbosity/ cpan> o conf commit =head2 Saving reports to files instead of sending directly In some cases, such as when smoke testing using a development or prerelease toolchain module like Test-Harness, it may be preferable to save reports to files in a directory for review prior to submitting them. To do this, manually set the C<<< transport >>> option in your CPAN::Reporter config file to use the L transport. transport=File /path/to/directory After review, send saved reports using Test::Reporter: Test::Reporter->new()->read($filename)->send() =head1 ENVIRONMENT Automatically sets the following environment variables to true values while running: =over =item * C<<< AUTOMATED_TESTING >>> -- signal that tests are being run by an automated smoke testing program (i.e. don't expect interactivity) =item * C<<< PERL_MM_USE_DEFAULT >>> -- accept L prompt() defaults =item * C<<< PERL_EXTUTILS_AUTOINSTALL >>> -- set to '--defaultdeps' for default dependencies =back The following environment variables, if set, will modify the behavior of CPAN::Reporter::Smoker. Generally, they are only required during the testing of CPAN::Reporter::Smoker =over =item * C<<< PERL_CR_SMOKER_RUNONCE >>> -- if true, C<<< start() >>> will exit after all distributions are tested instead of sleeping for the C<<< restart_delay >>> and then continuing =item * C<<< PERL_CR_SMOKER_SHORTCUT >>> -- if true, C<<< start() >>> will process arguments (if any) but will return before starting smoke testing; used for testing argument handling by C<<< start() >>> =back =head1 BUGS Please report any bugs or feature using the CPAN Request Tracker. Bugs can be submitted through the web interface at L When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature. =head1 SEE ALSO =over =item * L =item * L =item * L =item * L =item * L =back =for :stopwords cpan testmatrix url bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan =head1 SUPPORT =head2 Bugs / Feature Requests Please report any bugs or feature requests through the issue tracker at L. You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. L git clone https://github.com/cpan-testers/CPAN-Reporter-Smoker.git =head1 AUTHOR David Golden =head1 CONTRIBUTORS =for stopwords Alexandr Ciornii Breno G. de Oliveira Christian Walde gregor herrmann =over 4 =item * Alexandr Ciornii =item * Breno G. de Oliveira =item * Christian Walde =item * gregor herrmann =item * gregor herrmann =back =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2024 by David Golden. This is free software, licensed under: The Apache License, Version 2.0, January 2004 =cut minimum-version.t100644000000000000 15214551645671 21647 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/xt/authoruse strict; use warnings; use Test::More; use Test::MinimumVersion; all_minimum_version_ok( qq{5.010} ); parse_module_index000755000000000000 014551645671 20362 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/tfind-ls100644000000000000 673314551645671 22012 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/parse_module_index31486 0 drwxrwxrwx 1 user group 0 20080123.070030 authors 25558 1 -rw-rw-rw- 1 user group 174 20080123.070005 authors/01mailrc.txt 16708 0 drwxrwxrwx 1 user group 0 20080123.070007 authors/id 18970 0 drwxrwxrwx 1 user group 0 20080123.070006 authors/id/A 703 0 drwxrwxrwx 1 user group 0 20080123.070006 authors/id/A/AN 9387 0 drwxrwxrwx 1 user group 0 20080123.999999 authors/id/A/AN/ANDK 35830 2 -rw-rw-rw- 1 user group 1104 20080123.070028 authors/id/A/AN/ANDK/Bogus-OSUnsupported-0.01.tar.gz 18975 0 drwxrwxrwx 1 user group 0 20080123.070005 authors/id/D 21088 0 drwxrwxrwx 1 user group 0 20080123.070005 authors/id/D/DA 59402 0 drwxrwxrwx 1 user group 0 20080123.070029 authors/id/D/DA/DAGOLDEN 35796 2 -rw-rw-rw- 1 user group 1093 20080124.999998 authors/id/D/DA/DAGOLDEN/Bogus-Fail-0.01.tar.gz 35779 2 -rw-rw-rw- 1 user group 1099 20080124.999997 authors/id/D/DA/DAGOLDEN/Bogus-Pass-0.01.tar.gz 35814 2 -rw-rw-rw- 1 user group 1142 20080124.999996 authors/id/D/DA/DAGOLDEN/Bogus-PL-Fail-0.01.tar.gz 35815 2 -rw-rw-rw- 1 user group 1142 20080124.999995 authors/id/D/DA/DAGOLDEN/Bundle-Fake-1.00.tar.gz 18961 0 drwxrwxrwx 1 user group 0 20080125.070004 authors/id/J 29513 0 drwxrwxrwx 1 user group 0 20080125.070005 authors/id/J/JH 59870 0 drwxrwxrwx 1 user group 0 20080125.070006 authors/id/J/JH/JHI 17236902 4 -rw-r--r-- 1 david david 968 20080125.070007 authors/id/J/JH/JHI/Bogus-Fail-0.01_01.tar.gz 17237091 4 drwxr-xr-x 3 david david 4096 20080126.010000 authors/id/P 17237092 4 drwxr-xr-x 3 david david 4096 20080125.010001 authors/id/P/PE 17237093 4 drwxr-xr-x 2 david david 4096 20080125.010002 authors/id/P/PE/PETDANCE 17237095 4 -rw-r--r-- 1 david david 967 20080125.010003 authors/id/P/PE/PETDANCE/Test-Harness-2.62.tar.gz 17237095 4 -rw-r--r-- 1 david david 967 20080126.010003 authors/id/P/PE/PETDANCE/Test-Harness-2.62_01.tar.gz 17237095 4 -rw-r--r-- 1 david david 967 20080127.010003 authors/id/P/PE/PETDANCE/Test-Harness-2.62_02.tar.gz 17236907 4 -r--r--r-- 1 david david 460 20080125.010004 authors/id/P/PE/PETDANCE/CHECKSUMS 35815 2 -rw-rw-rw- 1 user group 1142 20070101.000000 authors/id/T/TE/TEST/Test-Test-0.01.tar.gz 35815 2 -rw-rw-rw- 1 user group 1142 20080101.000000 authors/id/T/TE/TEST/Test-Test-1.00_01.tar.gz 35815 2 -rw-rw-rw- 1 user group 1142 20080102.000000 authors/id/T/TE/TEST/Test-Test-1.01.tar.gz 35815 2 -rw-rw-rw- 1 user group 1142 20080101.000001 authors/id/T/TE/TEST/Test-Test2-1.01.tar.gz 35815 2 -rw-rw-rw- 1 user group 1142 20080102.000001 authors/id/T/TE/TEST/Test-Test2-1.02-TRIAL.tar.gz 30319 0 drwxrwxrwx 1 user group 0 20080123.090010 indices 20724 0 -rw-rw-rw- 1 user group 0 20080123.090013 indices/find-ls 10095 0 drwxrwxrwx 1 user group 0 20080123.070030 modules 25521 2 -rw-rw-rw- 1 user group 1928 20080123.080004 modules/02packages.details.txt 25532 2 -rw-rw-rw- 1 user group 1261 20080123.080004 modules/03modlist.data 35823 1 -rw-rw-rw- 1 user group 176 20080123.070030 modules/files.txt authors000755000000000000 014551645671 16722 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN01mailrc.txt.gz100644000000000000 20714551645671 21631 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authorstțG01mailrc.txtKL,VT%/=ļԒļL\eĕ 阗R ii>-/3VGwW?VIJF=31N 06RrX:$r~?^!:iU):a|)>frB])&t&L!p҇bPD%Ug&<:q-Eg-x#̱eD!2QUݒؤW:2 VEE&#rnLCvyi-TW!}veiJ({'Uޣn[P2g ^Ast^w{?`lH؞8-[9Nbt{寎՘PBל_m hah 20U&,h4Jp*t(EH̑bsєl ԍ"u>u+'h,2p U?&j.2{t*)h՞{.]r_P&ԕMdp˛pTit0 &HɃd?~ Cn˛?i/2@$"XO-HL|D])!D g bJHI000755000000000000 014551645671 20422 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/J/JHCHECKSUMS100644000000000000 75414551645671 22020 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/J/JH/JHI# CHECKSUMS file written on Wed Feb 13 03:44:01 2008 GMT by CPAN::Checksums (v1.064) $cksum = { 'Bogus-Fail-0.01_01.tar.gz' => { 'cpan_path' => 'J/JH/JHI', 'md5' => 'd59a04393812e66619686c84f1aab7fa', 'md5-ungz' => 'eab1658ad451035b75667243987e841a', 'mtime' => '2008-02-04', 'sha256' => '66a5d9e8fa131a81b2ff52705bd00e01f959af2630ea82857259516a885ddbe4', 'sha256-ungz' => '2a737c1579ab2065a79d5f69406567951c935a70ee9d51e4a997e05b18086997', 'size' => 968 } }; ANDK000755000000000000 014551645671 20511 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/A/ANCHECKSUMS100644000000000000 76414551645671 22110 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/A/AN/ANDK# CHECKSUMS file written on Mon Jan 28 13:21:04 2008 GMT by CPAN::Checksums (v1.064) $cksum = { 'Bogus-OSUnsupported-0.01.tar.gz' => { 'cpan_path' => 'A/AN/ANDK', 'md5' => '1e054a7da63e22a7b5acb98baaa47eb3', 'md5-ungz' => '8cf33a880347adb0376b7ab6b5a16dff', 'mtime' => '2008-01-27', 'sha256' => '0dc430f0deded63d47b141e7161e2d0b73fbd6509a03fa97614c8dff79246b21', 'sha256-ungz' => 'b019dfb9f90e91cad36e16c281a9cd63fb0e5fbbb7c21065ca67add4de782bd6', 'size' => 1004 } }; 02packages.details.txt.gz100644000000000000 103314551645671 23566 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/modulesG02packages.details.txt[0~I74*MP6Q}\MP#4sۤVF2Bo V:QFY"Um2ӠstߓNiie_+Kߡdʖ\[G jE,z}+Q"YU:m^чSnAiJwx@?~nZZ$hQ;$zQ"{W>H!˾Q ?n3QSʺhѐabC<9q qr:Ѫ,F@g9UA%Kw$rqRqY؝ D.h1Ze<S'13&۪atyEltLyNәDr/G4 { 'cpan_path' => 'D/DA/DAGOLDEN', 'md5' => 'e5967bcb6cb23987db704607fda283b3', 'md5-ungz' => 'e8c5a6e36636aec8b19b115020026f13', 'mtime' => '2008-01-27', 'sha256' => '65656eb60eda4c6d994beb6165737609d6b442a846a2c32010b1b96165c24164', 'sha256-ungz' => '209e5e8642a10db943ee2d5e2068f7b5fc07fc7a2fb126baefdc1b67a7af5852', 'size' => 965 }, 'Bogus-PL-Fail-0.01.tar.gz' => { 'cpan_path' => 'D/DA/DAGOLDEN', 'md5' => 'a60f2751456efa0e787e9d2b143d1ccc', 'md5-ungz' => '70580f04a8db2ee4b2fd50614cb38f19', 'mtime' => '2008-01-27', 'sha256' => '5341aeb3d594e70b57972f0763de429b77fc8da0743b0beecb35823cfe0c1fb2', 'sha256-ungz' => 'd6c691d4ed0f2229f0cc79b8478f1ff8803eb9b90bfcc78002f3e390e596b27e', 'size' => 1007 }, 'Bogus-Pass-0.01.tar.gz' => { 'cpan_path' => 'D/DA/DAGOLDEN', 'md5' => '6a208561a1c455dfce11ca7a446f4eb9', 'md5-ungz' => 'ef5b052ce8d8ffc29107a99d0e79016c', 'mtime' => '2008-01-27', 'sha256' => '8eb6b1b2bb42b660273ecbc3169504afa8e61cda805fca56fea73afd2d374b94', 'sha256-ungz' => '896bd2840aef8beecdb6e24a1806b92de93ccfbe5ab21cc6380731b747a1ccc9', 'size' => 962 }, 'Bundle-Fake-1.00.tar.gz' => { 'cpan_path' => 'D/DA/DAGOLDEN', 'md5' => '2685146a32c45b6c0fee2dd8807cad68', 'md5-ungz' => 'ca55cef7ab32536681f5056124570b9c', 'mtime' => '2008-02-13', 'sha256' => '85be1998dfb2ed4d650c7eac8e8b13980ad5ee4aee5175983acd87a9f38520ab', 'sha256-ungz' => '443bc422247ca8a23ad4bd620e5c12a95c70d7e036a90e9b8449090b9e28331b', 'size' => 997 } }; PETDANCE000755000000000000 014551645671 21204 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/P/PECHECKSUMS100644000000000000 76014551645671 22577 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/P/PE/PETDANCE# CHECKSUMS file written on Mon Feb 4 15:50:30 2008 GMT by CPAN::Checksums (v1.064) $cksum = { 'Test-Harness-2.62.tar.gz' => { 'cpan_path' => 'P/PE/PETDANCE', 'md5' => '4e62bf6e872ffa5eae6ce1dd2cc45a6e', 'md5-ungz' => '74f91dc11e218373a467d80df5a483ef', 'mtime' => '2008-02-04', 'sha256' => '94c619bc6adc9a6acb51455c08e4b6bb62e4c9465a26ec077b9a6e82900dc9f2', 'sha256-ungz' => '9c44c974e249f567c301379cad4a022038b226b3d27f9f689633def0c47ce648', 'size' => 967 } }; 02packages.details.txt100644000000000000 217114551645671 24630 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/parse_module_indexFile: 02packages.details.txt URL: http://www.perl.com/CPAN/modules/02packages.details.txt Description: Package names found in directory $CPAN/authors/id/ Columns: package name, version, path Intended-For: Automated fetch routines, namespace documentation. Written-By: Id: mldistwatch 697 1970-01-18 07:33:13Z k Line-Count: 9 Last-Updated: Tue, 03 Feb 1970 03:17:06 GMT Bogus::Fail 0.01 D/DA/DAGOLDEN/Bogus-Fail-0.01.tar.gz Bogus::OSUnsupported 0.01 A/AN/ANDK/Bogus-OSUnsupported-0.01.tar.gz Bogus::PL::Fail 0.01 D/DA/DAGOLDEN/Bogus-PL-Fail-0.01.tar.gz Bogus::Pass 0.01 D/DA/DAGOLDEN/Bogus-Pass-0.01.tar.gz Bundle::Fake 1.00 D/DA/DAGOLDEN/Bundle-Fake-1.00.tar.gz Fcntl 1.03 G/GS/GSAR/perl-5.6.1.tar.gz Test::Harness 2.62 P/PE/PETDANCE/Test-Harness-2.62.tar.gz Apache2::Process 0.009 P/PG/PGOLLUCCI/mod_perl-2.0.3.tar.gz Apache 1.27 G/GO/GOZER/mod_perl-1.30.tar.gz Test 1 T/TE/TEST/Test-Test-1.01.tar.gz Test2 1 T/TE/TEST/Test-Test2-1.01.tar.gz t_02packages.details.txt100644000000000000 143114551645671 25151 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/parse_module_indexFile: 02packages.details.txt URL: http://www.perl.com/CPAN/modules/02packages.details.txt Description: Package names found in directory $CPAN/authors/id/ Columns: package name, version, path Intended-For: Automated fetch routines, namespace documentation. Written-By: Id: mldistwatch 697 1970-01-18 07:33:13Z k Line-Count: 9 Last-Updated: Tue, 03 Feb 1970 03:17:06 GMT Test::Harness 2.62 P/PE/PETDANCE/Test-Harness-2.62.tar.gz Test 1 T/TE/TEST/Test-Test-1.01.tar.gz Test2 1 T/TE/TEST/Test-Test2-1.02.tar.gz Test2::A 1 T/TE/TEST/Test-Test2-1.00.tar.gz Test3 1 T/TE/TEST/Test-Test3-1.01.tar.gz Test4 1 T/TE/TEST/Test-Test4-1.00.tar.gz Perl6000755000000000000 014551645671 22066 5ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/P/P6/P6DISTSCHECKSUMS100644000000000000 76414551645671 23465 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/P/P6/P6DISTS/Perl6# CHECKSUMS file written on Mon Feb 4 15:50:30 2008 GMT by CPAN::Checksums (v1.064) $cksum = { 'Perl6/Test-Harness-666.tar.gz' => { 'cpan_path' => 'P/P6/P6DISTS', 'md5' => '4e62bf6e872ffa5eae6ce1dd2cc45a6e', 'md5-ungz' => '74f91dc11e218373a467d80df5a483ef', 'mtime' => '2008-02-04', 'sha256' => '94c619bc6adc9a6acb51455c08e4b6bb62e4c9465a26ec077b9a6e82900dc9f2', 'sha256-ungz' => '9c44c974e249f567c301379cad4a022038b226b3d27f9f689633def0c47ce648', 'size' => 967 } }; Bogus-Fail-0.01_01.tar.gz100644000000000000 171014551645671 24514 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/J/JH/JHI6GYmoH%'9 vsZRY]N:l.Iv8q{8#Yaf3̰ .IvZUCVRޠ*}ԾRnOS[`TH(1@wܾS_$ȳqe6u]zv(O(bwH\OB'iA0@t/p`C; (~J:.e6NM$ߊ B!uz*%_'^#t.A*&Ƿˌ q;sy6]n7vJؑ|*}ot7& LCFL`7.uxҚ$ &#Ĕ'(rO!'gJ&)zhhl]E~87^-%ݩrWa cz;_u6iuE @sSk?B:s6v7zFSkAWxMuwO;qv"4:䏂ϷXthuAϪ_w ׁ6_wO'aJ(*',iN˜A&(N?A>vE';Kpvp 4hРAs $+(Bogus-Fail-0.01.tar.gz100644000000000000 170514551645671 24740 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/D/DA/DAGOLDENGYmoHkWH5T]tu*$^d-xCMutvmPq#!xfٙyfS( @ڶ][^WhZ 1k40MK,qF$O cQW3[W]x4=̿HHbM\,xE#a|:㨼cR©;ze&AqR՝)\=-R?񭝲GT.)`[ۆ^vN`s 0+KT$u^M&=MH&TCWd4OC>B =Wsݖ)߯s?L6jk"i?=S1ϵߜؽzuu*5 ׵Mŝ?͝㎍Wl6nov=`GRVaqtt4L M 񎦻*G#gW2Fۥ=oPçH@eY C;UNZu ,hĄ,%i,R&MTJ8d $ԯGް!RNЅ[5J@8KF+Fّߥ몡rAseCczˍ޵/=M6 B9>"vg,>oΦoR/ ;[}o<`\>. 5{q/fr@?-v"8YD#6H'.y0DAlS adIT^K-IrJ=eM G69zJНO\v9EUyn<[F"[fS%Lf.3z~u/8j/̅5 ~@G;v?I/j{h'QmXxYɅ&MH| |D{leZDzlL>•MU! ="e(o V/kѶU73:4 wa8RLR 73ىUԯXGڰ&`j $&F?H4q WX 1ؑ%ˢ"RJ`cǖݴ/=3˼o^Nl|rCy{^u. ;{uw3q~<4Nٸ<@hbtluE: ʠ?=7ecoה~Y9ńT~'XaØF fo ?Ng\.@E-Zh;(Bundle-Fake-1.00.tar.gz100644000000000000 174514551645671 25071 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/D/DA/DAGOLDENegGBundle-Fake-1.00.tarXmoF%H4Q;rd;>} ac`@4߻ vLߵԭ}$ ؙ>3{^@|O]մF8ݶVnйiv1ޥ24<{o(_!VWx!\G&"ilmşuMY-k)F(((K|]aƇ-k%sEAɧp,lMP-T+ed^>X2jao_ oYVS =^CnY"漠=oG p biqN`yi@(s,I BK=Fv4G)B.Kݔ!P7Y>v0G%FGBË{7ơ%&s2 xq|q0O73KB=}=(N"nP؏g2/)!,$xɂa֮XV6w;MG+°Bc 7iXd,6GgFi;yD hRt.O~hFsүNϷ{ "yى#),SD>ZŘmlDžoI S3Y\4cmx)ۢ?z$7)7,G.+&]˯%zLnj)Oׯ,;CvY!.FR;>P<% Y )d=y Ew&%Dº(XxXOt3Z'ܐ =p3j{cėOiY(Test-Harness-2.62.tar.gz100644000000000000 170714551645671 25405 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/P/PE/PETDANCE'4GYmoF%H ۨY}HUf&vI.߻ 89ߵԕ{Ob%s>Ɇo2/ +V 8'fWp'-p)CW_'gI!~IĈΣ gk$IHNOU] HB9@kGQ3 ?skI|>9٬-tӑs3* '`4z;mݴ+&n=] o|~ޏs?d:•Uoә=pbcWc=_nwk l=Q͢8;;[yɅ6S b ?>bEu2/2;5&|"_5͆ǀ$IHdQQ-^yI[wW9Ӛvi-ӡsYixF!;%T(p+Ba,U'1Vs,jòըp0,јD4-c,:FdɊE䐰U҃*kW?wjq?Fh=!fT+a6?>Bjq]{5Ix&w\s~^EG!XtjuA]}wx _Ok;]cࢬjN(!eP~ ΅{NnCA 4h?Tq(Bogus-PL-Fail-0.01.tar.gz100644000000000000 175714551645671 25260 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/D/DA/DAGOLDENGYmoFkW̑HF%w 8JR[Y ހɻNU5&.KG ;yfeL2*WMflh]ӔzԶ?7Z 1k41Z50K?II Psȝ<#oHq9dXi`0jaz۬V +(0 C(tb:A!ǥPxUx7u1W.ztOa/Ɠ!Rie& _qNt)wY~XD$Pxya.,G؝' l"S'G J9"Ow\ds6[n$[Y((B>'ZC!e b,i@cqw4f){[bp4$9v9ݸ:Cݮ^ؤvTh+[dDJ&  z5w4,x(ft'ު(d! (KuiES(GRCA.͂L(M PbSʤ,Ӽ* %}\Η.;%)' B*JbÊ70JZ,LGՀ$*NW[ꊋhu 1vKֵVWCTC+_$/atA /V}ϒұnؿӒ{DdqKt!6뉬[P![zN._\)88* (?/ 㿨VN):/ī>F~p8CfbQS1y$X ʶ7 3=~ %p~< *TPo(Bogus-OSUnsupported-0.01.tar.gz100644000000000000 175414551645671 26232 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/A/AN/ANDK GBogus-OSUnsupported-0.01.tarXmoFk+FTprzQɝS!Z 7yI66 J}3;c3Ü|3,IbOVUk7gSjsnjnt`jR|o.WuˀSD-W5'*>x è?F:7܁yO!eM!@1DBSߥRϜ-[(N1[H@6A;0Մ ~Cm?\۳|濱3 ;-o߻ 8]^$`}r3&"*+9.sEQII3p<|RczŕON;' F1V^֚LQ~`!H& v, ,40'/I,u-{OD|w+wc|g@/noWuDf}}q5]A --= nHdBqo 4Ͱt@/}7:/0)k7<"ӏO՞ٲ>aF晏 $sSN*,o &Cz0g->Po˲x6B"L2BZڿ%_Vjs=Ԟ?:eґ@k .]0y3R~&_F /z鱃|&ʖ0-f % V;愫z$AY|y._;CO3Z@@@@@@@`;|U\(Test-Harness-666.tar.gz100644000000000000 170714551645671 26221 0ustar00rootroot000000000000CPAN-Reporter-Smoker-0.30/t/CPAN/authors/id/P/P6/P6DISTS/Perl6'4GYmoF%H ۨY}HUf&vI.߻ 89ߵԕ{Ob%s>Ɇo2/ +V 8'fWp'-p)CW_'gI!~IĈΣ gk$IHNOU] HB9@kGQ3 ?skI|>9٬-tӑs3* '`4z;mݴ+&n=] o|~ޏs?d:•Uoә=pbcWc=_nwk l=Q͢8;;[yɅ6S b ?>bEu2/2;5&|"_5͆ǀ$IHdQQ-^yI[wW9Ӛvi-ӡsYixF!;%T(p+Ba,U'1Vs,jòըp0,јD4-c,:FdɊE䐰U҃*kW?wjq?Fh=!fT+a6?>Bjq]{5Ix&w\s~^EG!XtjuA]}wx _Ok;]cࢬjN(!eP~ ΅{NnCA 4h?Tq(