Hello community,
here is the log from the commit of package perl-Test-CheckManifest for
openSUSE:Factory checked in at 2019-02-24 17:15:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Test-CheckManifest (Old)
and /work/SRC/openSUSE:Factory/.perl-Test-CheckManifest.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Test-CheckManifest"
Sun Feb 24 17:15:04 2019 rev:3 rq:677224 version:1.39
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-Test-CheckManifest/perl-Test-CheckManifest.changes
2018-02-09 15:47:00.748540810 +0100
+++
/work/SRC/openSUSE:Factory/.perl-Test-CheckManifest.new.28833/perl-Test-CheckManifest.changes
2019-02-24 17:15:06.856453610 +0100
@@ -1,0 +2,57 @@
+Fri Feb 15 06:30:42 UTC 2019 - Stephan Kulow <[email protected]>
+
+- updated to 1.39
+ see /usr/share/doc/packages/perl-Test-CheckManifest/Changes
+
+ 1.39 2019-02-14 07:28:00
+
+ * release 1.39
+
+ 1.38_02 2018-12-23 11:32:00
+
+ * fix test failures (thanks to manwar and LorenzoTa)
+
+ 1.38_01 2018-12-21 14:30:00
+
+ * more tests
+ * refactor code
+
+-------------------------------------------------------------------
+Fri Dec 14 06:26:51 UTC 2018 - Stephan Kulow <[email protected]>
+
+- updated to 1.38
+ see /usr/share/doc/packages/perl-Test-CheckManifest/Changes
+
+ 1.38 2018-12-13 16:26:00
+
+ [BUGFIX]
+ * require at least Cwd 3.75
+
+-------------------------------------------------------------------
+Thu Dec 13 06:27:30 UTC 2018 - Stephan Kulow <[email protected]>
+
+- updated to 1.36
+ see /usr/share/doc/packages/perl-Test-CheckManifest/Changes
+
+ 1.35 2018-12-12 09:05:00
+
+ [BUGFIX]
+ * Tests failed
+
+-------------------------------------------------------------------
+Wed Dec 12 06:27:58 UTC 2018 - Stephan Kulow <[email protected]>
+
+- updated to 1.34
+ see /usr/share/doc/packages/perl-Test-CheckManifest/Changes
+
+ 1.34 2018-12-11
+
+ [BUGFIX]
+ * Tests failed on Windows (github #9)
+ * 'exclude' is meant to be a list of directories, but it was handled
as regular expressions
+
+ [IMPROVEMENTS]
+ * rewrite larger parts of the module
+ * add lots of tests
+
+-------------------------------------------------------------------
Old:
----
Test-CheckManifest-1.33.tar.gz
New:
----
Test-CheckManifest-1.39.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Test-CheckManifest.spec ++++++
--- /var/tmp/diff_new_pack.XIBDxX/_old 2019-02-24 17:15:07.344453523 +0100
+++ /var/tmp/diff_new_pack.XIBDxX/_new 2019-02-24 17:15:07.352453522 +0100
@@ -1,7 +1,7 @@
#
# spec file for package perl-Test-CheckManifest
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,18 +12,18 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: perl-Test-CheckManifest
-Version: 1.33
+Version: 1.39
Release: 0
%define cpan_name Test-CheckManifest
Summary: Check if your Manifest matches your distro
License: Artistic-2.0
Group: Development/Libraries/Perl
-Url: http://search.cpan.org/dist/Test-CheckManifest/
+Url: https://metacpan.org/release/%{cpan_name}
Source0:
https://cpan.metacpan.org/authors/id/R/RE/RENEEB/%{cpan_name}-%{version}.tar.gz
Source1: cpanspec.yml
BuildArch: noarch
@@ -31,6 +31,9 @@
BuildRequires: perl
BuildRequires: perl-macros
BuildRequires: perl(CPAN::Meta::YAML)
+BuildRequires: perl(Cwd) >= 3.75
+BuildRequires: perl(Pod::Coverage::TrustPod)
+Requires: perl(Cwd) >= 3.75
%{perl_requires}
%description
@@ -40,8 +43,8 @@
%setup -q -n %{cpan_name}-%{version}
%build
-%{__perl} Makefile.PL INSTALLDIRS=vendor
-%{__make} %{?_smp_mflags}
+perl Makefile.PL INSTALLDIRS=vendor
+make %{?_smp_mflags}
%check
touch dummy.list
@@ -56,7 +59,7 @@
%files -f %{name}.files
%defattr(-,root,root,755)
-%doc Changes README
+%doc Changes CONTRIBUTING.md CONTRIBUTORS README
%license LICENSE
%changelog
++++++ Test-CheckManifest-1.33.tar.gz -> Test-CheckManifest-1.39.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/CONTRIBUTING.md
new/Test-CheckManifest-1.39/CONTRIBUTING.md
--- old/Test-CheckManifest-1.33/CONTRIBUTING.md 1970-01-01 01:00:00.000000000
+0100
+++ new/Test-CheckManifest-1.39/CONTRIBUTING.md 2019-02-14 07:36:31.000000000
+0100
@@ -0,0 +1,44 @@
+
+# Development
+
+The distribution is contained in a Git repository, so simply clone the
+repository
+
+```
+$ git clone http://github.com/reneeb/Test-CheckManifest.git
+```
+
+and change into the newly-created directory.
+
+```
+$ cd Test-CheckManifest
+```
+
+The project uses [`Dist::Zilla`](https://metacpan.org/pod/Dist::Zilla) to
+build the distribution, hence this will need to be installed before
+continuing:
+
+```
+$ cpanm Dist::Zilla
+```
+
+To install the required prequisite packages, run the following set of
+commands:
+
+```
+$ dzil authordeps --missing | cpanm
+$ dzil listdeps --author --missing | cpanm
+```
+
+The distribution can be tested like so:
+
+```
+$ dzil test
+```
+
+To run the full set of tests (including author and release-process tests),
+add the `--author` and `--release` options:
+
+```
+$ dzil test --author --release
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/CONTRIBUTORS
new/Test-CheckManifest-1.39/CONTRIBUTORS
--- old/Test-CheckManifest-1.33/CONTRIBUTORS 1970-01-01 01:00:00.000000000
+0100
+++ new/Test-CheckManifest-1.39/CONTRIBUTORS 2019-02-14 07:36:31.000000000
+0100
@@ -0,0 +1,18 @@
+
+# TEST-CHECKMANIFEST CONTRIBUTORS #
+
+This is the (likely incomplete) list of people who have helped
+make this distribution what it is, either via code contributions,
+patches, bug reports, help with troubleshooting, etc. A huge
+'thank you' to all of them.
+
+ * doug
+ * LorenzoTa
+ * LorenzoTa
+ * Michael Gray
+ * Mohammad S Anwar
+ * reneeb
+ * reneeb
+ * Renee
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/Changes
new/Test-CheckManifest-1.39/Changes
--- old/Test-CheckManifest-1.33/Changes 2018-01-26 13:42:10.000000000 +0100
+++ new/Test-CheckManifest-1.39/Changes 2019-02-14 07:36:31.000000000 +0100
@@ -1,6 +1,39 @@
Revision history for Perl extension Test::CheckManifest.
========================================================
+1.39 2019-02-14 07:28:00
+
+ * release 1.39
+
+1.38_02 2018-12-23 11:32:00
+
+ * fix test failures (thanks to manwar and LorenzoTa)
+
+1.38_01 2018-12-21 14:30:00
+
+ * more tests
+ * refactor code
+
+1.38 2018-12-13 16:26:00
+
+ [BUGFIX]
+ * require at least Cwd 3.75
+
+1.35 2018-12-12 09:05:00
+
+ [BUGFIX]
+ * Tests failed
+
+1.34 2018-12-11
+
+ [BUGFIX]
+ * Tests failed on Windows (github #9)
+ * 'exclude' is meant to be a list of directories, but it was handled as
regular expressions
+
+ [IMPROVEMENTS]
+ * rewrite larger parts of the module
+ * add lots of tests
+
1.33 2018-01-26
[INTERNAL]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/MANIFEST
new/Test-CheckManifest-1.39/MANIFEST
--- old/Test-CheckManifest-1.33/MANIFEST 2018-01-26 13:42:10.000000000
+0100
+++ new/Test-CheckManifest-1.39/MANIFEST 2019-02-14 07:36:31.000000000
+0100
@@ -1,16 +1,32 @@
-# This file was automatically generated by Dist::Zilla::Plugin::Manifest
v6.010.
+# MANIFEST for Test-CheckManifest
Changes
-LICENSE
MANIFEST
-META.json
-META.yml
-Makefile.PL
-README
-lib/Test/CheckManifest.pm
+CONTRIBUTORS
+CONTRIBUTING.md
+
t/00_load.t
t/01_selftest.t
-t/extra/02_test_in_subdirectory.t
-'t/file with whitespaces.txt'
-t/testrules.yml
+t/02_validate_args.t
+t/03_find_home.t
+t/04_check_excludes.t
+t/05_is_excluded.t
+t/06_bailout.t
+t/07_is_in_dir.t
+t/08_check_manifest.t
+t/author-pod-coverage.t
+t/author-pod-syntax.t
t/xt/02_issue1.t
t/xt/03_issue7.t
+'t/file with whitespaces.txt'
+t/testrules.yml
+
+t/extra/02_test_in_subdirectory.t
+
+lib/Test/CheckManifest.pm
+
+README # selftest
+LICENSE # selftest
+META.yml # selftest
+META.json # selftest
+Makefile.PL # selftest
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/META.json
new/Test-CheckManifest-1.39/META.json
--- old/Test-CheckManifest-1.33/META.json 2018-01-26 13:42:10.000000000
+0100
+++ new/Test-CheckManifest-1.39/META.json 2019-02-14 07:36:31.000000000
+0100
@@ -4,7 +4,7 @@
"Renee Baecker <[email protected]>"
],
"dynamic_config" : 0,
- "generated_by" : "Dist::Zilla version 6.010, CPAN::Meta::Converter version
2.150005",
+ "generated_by" : "Dist::Zilla version 6.010, CPAN::Meta::Converter version
2.150010",
"license" : [
"artistic_2"
],
@@ -19,22 +19,39 @@
"ExtUtils::MakeMaker" : "0"
}
},
+ "develop" : {
+ "requires" : {
+ "Pod::Coverage::TrustPod" : "0",
+ "Test::Pod" : "1.41",
+ "Test::Pod::Coverage" : "1.08"
+ }
+ },
"runtime" : {
"requires" : {
"Carp" : "0",
- "Cwd" : "0",
+ "Cwd" : "3.75",
"File::Basename" : "0",
"File::Find" : "0",
"File::Spec" : "0",
- "Test::Builder" : "0"
+ "Scalar::Util" : "0",
+ "Test::Builder" : "0",
+ "Test::More" : "0",
+ "perl" : "5.008"
}
},
"test" : {
"requires" : {
- "CPAN::Meta::YAML" : "0"
+ "CPAN::Meta::YAML" : "0",
+ "Pod::Coverage::TrustPod" : "0"
}
}
},
+ "provides" : {
+ "Test::CheckManifest" : {
+ "file" : "lib/Test/CheckManifest.pm",
+ "version" : "1.39"
+ }
+ },
"release_status" : "stable",
"resources" : {
"bugtracker" : {
@@ -47,7 +64,17 @@
"web" : "http://github.com/reneeb/Test-CheckManifest"
}
},
- "version" : "1.33",
- "x_serialization_backend" : "JSON::XS version 3.01"
+ "version" : "1.39",
+ "x_contributors" : [
+ "doug <[email protected]>",
+ "LorenzoTa <[email protected]>",
+ "LorenzoTa <[email protected]>",
+ "Michael Gray <[email protected]>",
+ "Mohammad S Anwar <[email protected]>",
+ "reneeb <[email protected]>",
+ "reneeb <[email protected]>",
+ "Renee <[email protected]>"
+ ],
+ "x_serialization_backend" : "JSON::XS version 3.04"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/META.yml
new/Test-CheckManifest-1.39/META.yml
--- old/Test-CheckManifest-1.33/META.yml 2018-01-26 13:42:10.000000000
+0100
+++ new/Test-CheckManifest-1.39/META.yml 2019-02-14 07:36:31.000000000
+0100
@@ -4,25 +4,42 @@
- 'Renee Baecker <[email protected]>'
build_requires:
CPAN::Meta::YAML: '0'
+ Pod::Coverage::TrustPod: '0'
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 0
-generated_by: 'Dist::Zilla version 6.010, CPAN::Meta::Converter version
2.150005'
+generated_by: 'Dist::Zilla version 6.010, CPAN::Meta::Converter version
2.150010'
license: artistic_2
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: Test-CheckManifest
+provides:
+ Test::CheckManifest:
+ file: lib/Test/CheckManifest.pm
+ version: '1.39'
requires:
Carp: '0'
- Cwd: '0'
+ Cwd: '3.75'
File::Basename: '0'
File::Find: '0'
File::Spec: '0'
+ Scalar::Util: '0'
Test::Builder: '0'
+ Test::More: '0'
+ perl: '5.008'
resources:
bugtracker: http://github.com/reneeb/Test-CheckManifest/issues
homepage: http://github.com/reneeb/Test-CheckManifest
repository: http://github.com/reneeb/Test-CheckManifest.git
-version: '1.33'
-x_serialization_backend: 'YAML::Tiny version 1.69'
+version: '1.39'
+x_contributors:
+ - 'doug <[email protected]>'
+ - 'LorenzoTa <[email protected]>'
+ - 'LorenzoTa <[email protected]>'
+ - 'Michael Gray <[email protected]>'
+ - 'Mohammad S Anwar <[email protected]>'
+ - 'reneeb <[email protected]>'
+ - 'reneeb <[email protected]>'
+ - 'Renee <[email protected]>'
+x_serialization_backend: 'YAML::Tiny version 1.70'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/Makefile.PL
new/Test-CheckManifest-1.39/Makefile.PL
--- old/Test-CheckManifest-1.33/Makefile.PL 2018-01-26 13:42:10.000000000
+0100
+++ new/Test-CheckManifest-1.39/Makefile.PL 2019-02-14 07:36:31.000000000
+0100
@@ -2,7 +2,7 @@
use strict;
use warnings;
-
+use 5.008;
use ExtUtils::MakeMaker;
@@ -14,19 +14,23 @@
},
"DISTNAME" => "Test-CheckManifest",
"LICENSE" => "artistic_2",
+ "MIN_PERL_VERSION" => "5.008",
"NAME" => "Test::CheckManifest",
"PREREQ_PM" => {
"Carp" => 0,
- "Cwd" => 0,
+ "Cwd" => "3.75",
"File::Basename" => 0,
"File::Find" => 0,
"File::Spec" => 0,
- "Test::Builder" => 0
+ "Scalar::Util" => 0,
+ "Test::Builder" => 0,
+ "Test::More" => 0
},
"TEST_REQUIRES" => {
- "CPAN::Meta::YAML" => 0
+ "CPAN::Meta::YAML" => 0,
+ "Pod::Coverage::TrustPod" => 0
},
- "VERSION" => "1.33",
+ "VERSION" => "1.39",
"test" => {
"TESTS" => "t/*.t t/extra/*.t t/xt/*.t"
}
@@ -36,11 +40,14 @@
my %FallbackPrereqs = (
"CPAN::Meta::YAML" => 0,
"Carp" => 0,
- "Cwd" => 0,
+ "Cwd" => "3.75",
"File::Basename" => 0,
"File::Find" => 0,
"File::Spec" => 0,
- "Test::Builder" => 0
+ "Pod::Coverage::TrustPod" => 0,
+ "Scalar::Util" => 0,
+ "Test::Builder" => 0,
+ "Test::More" => 0
);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/README
new/Test-CheckManifest-1.39/README
--- old/Test-CheckManifest-1.33/README 2018-01-26 13:42:10.000000000 +0100
+++ new/Test-CheckManifest-1.39/README 2019-02-14 07:36:31.000000000 +0100
@@ -1,16 +1,103 @@
+NAME
+ Test::CheckManifest - Check if your Manifest matches your distro
-This archive contains the distribution Test-CheckManifest,
-version 1.33:
+VERSION
- Check if your Manifest matches your distro
+ version 1.39
-This software is Copyright (c) 2018 by Renee Baecker.
+SYNOPSIS
-This is free software, licensed under:
+ use Test::CheckManifest;
+ ok_manifest();
- The Artistic License 2.0 (GPL Compatible)
+ EXPORT
+ There is only one method exported: ok_manifest
-This README file was generated by Dist::Zilla::Plugin::Readme v6.010.
+METHODS
+
+ ok_manifest [{exclude => $arref}][$msg]
+
+ checks whether the Manifest file matches the distro or not. To match a
+ distro the Manifest has to name all files that come along with the
+ distribution.
+
+ To check the Manifest file, this module searches for a file named
+ MANIFEST.
+
+ To exclude some directories from this test, you can specify these dirs
+ in the hashref.
+
+ ok_manifest({exclude => ['/var/test/']});
+
+ is ok if the files in /path/to/your/dist/var/test/ are not named in the
+ MANIFEST file. That means that the paths in the exclude array must be
+ "pseudo-absolute" (absolute to your distribution).
+
+ To use a "filter" you can use the key "filter"
+
+ ok_manifest({filter => [qr/\.svn/]});
+
+ With that you can exclude all files with an '.svn' in the filename or
+ in the path from the test.
+
+ These files would be excluded (as examples):
+
+ * /dist/var/.svn/test
+
+ * /dist/lib/test.svn
+
+ You can also combine "filter" and "exclude" with 'and' or 'or' default
+ is 'or':
+
+ ok_manifest({exclude => ['/var/test'],
+ filter => [qr/\.svn/],
+ bool => 'and'});
+
+ These files have to be named in the MANIFEST:
+
+ * /var/foo/.svn/any.file
+
+ * /dist/t/file.svn
+
+ * /var/test/test.txt
+
+ These files not:
+
+ * /var/test/.svn/*
+
+ * /var/test/file.svn
+
+ By default, ok_manifest will look for the file MANIFEST in the current
+ working directory (which is how tests are traditionally run). If you
+ wish to specify a different directory, you may pass the file or dir
+ parameters, for example:
+
+ ok_manifest({dir => '/path/to/my/dist/'});
+
+EXCLUDING FILES
+
+ Beside filter and exclude there is another way to exclude files:
+ MANIFEST.SKIP. This is a file with filenames that should be excluded:
+
+ t/my_very_own.t
+ file_to.skip
+
+ACKNOWLEDGEMENT
+
+ Great thanks to Christopher H. Laco, who did a lot of testing stuff for
+ me and he reported some bugs to RT.
+
+AUTHOR
+
+ Renee Baecker <[email protected]>
+
+COPYRIGHT AND LICENSE
+
+ This software is Copyright (c) 2018 by Renee Baecker.
+
+ This is free software, licensed under:
+
+ The Artistic License 2.0 (GPL Compatible)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/lib/Test/CheckManifest.pm
new/Test-CheckManifest-1.39/lib/Test/CheckManifest.pm
--- old/Test-CheckManifest-1.33/lib/Test/CheckManifest.pm 2018-01-26
13:42:10.000000000 +0100
+++ new/Test-CheckManifest-1.39/lib/Test/CheckManifest.pm 2019-02-14
07:36:31.000000000 +0100
@@ -11,15 +11,22 @@
use File::Basename;
use Test::Builder;
use File::Find;
+use Scalar::Util qw(blessed);
-our $VERSION = '1.33';
+our $VERSION = 1.39;
our $VERBOSE = 1;
+our $HOME;
+our $test_bool = 1;
my $test = Test::Builder->new();
-my $test_bool = 1;
my $plan = 0;
my $counter = 0;
+my @excluded_files = qw(
+ pm_to_blib Makefile META.yml Build pod2htmd.tmp META.json
+ pod2htmi.tmp Build.bat .cvsignore MYMETA.json MYMETA.yml
+);
+
sub import {
my $self = shift;
my $caller = caller;
@@ -36,36 +43,74 @@
$plan = 1 if(exists $plan{tests});
}
-sub ok_manifest{
- my ($hashref,$msg) = @_;
-
- $test->plan(tests => 1) unless $plan;
-
- my $is_hashref = 1;
- $is_hashref = 0 unless ref($hashref);
-
- unless ( $is_hashref ) {
- $msg = $hashref;
+sub _validate_args {
+ my ($hashref, $msg) = @_;
+
+ my $ref = ref $hashref;
+ if ( !$ref || 'HASH' ne $ref ) {
+ $msg = $hashref if !$ref;
$hashref = {};
}
- my $tmp_path = dirname( File::Spec->rel2abs( $0 ) );
+ my $ref_filter = ref $hashref->{filter};
+ $hashref->{filter} = [] if !$ref_filter || 'ARRAY' ne $ref_filter;
+ $hashref->{filter} = [ grep{ blessed $_ && $_->isa('Regexp') } @{
$hashref->{filter} } ];
+
+ my $ref_exclude = ref $hashref->{exclude};
+ $hashref->{exclude} = [] if !$ref_exclude || 'ARRAY' ne $ref_exclude;
+ push @{$hashref->{exclude}}, qw!/blib /_blib! if $test_bool;
- if ( $hashref->{file} ) {
- $tmp_path = dirname $hashref->{file};
+ for my $excluded_path ( @{ $hashref->{exclude} } ) {
+ croak 'path in excluded array must be "absolute"' if $excluded_path !~
m!^/!;
}
- elsif ( $hashref->{dir} ) {
- $tmp_path = $hashref->{dir};
+
+ my $bool = lc( $hashref->{bool} || '' );
+ $hashref->{bool} = $bool && $bool eq 'and' ? 'and' : 'or';
+
+ return $hashref, $msg;
+}
+
+sub _check_excludes {
+ my ($hashref, $home) = @_;
+
+ my @excluded;
+
+ EXCLUDED_PATH:
+ for my $excluded_path ( @{ $hashref->{exclude} } ) {
+ next EXCLUDED_PATH if !defined $excluded_path;
+ next EXCLUDED_PATH if !length $excluded_path;
+
+ my $path = File::Spec->catdir($home, $excluded_path);
+
+ $path = File::Spec->rel2abs( $path ) if
!File::Spec->file_name_is_absolute( $path );
+
+ next if !-e $path;
+
+ push @excluded, $path;
}
- my $bool = 1;
- my $home = Cwd::realpath( $tmp_path );
- my $manifest;
+ return \@excluded;
+}
+
+sub _find_home {
+ my ($params) = @_;
+
+ my $tmp_path = File::Spec->rel2abs( $0 );
+ my ($home, $volume, $dirs, $file, @dirs);
+
+ if ( $params->{file} ) {
+ $tmp_path = $params->{file};
+ }
+ elsif ( $params->{dir} ) {
+ $tmp_path = File::Spec->catfile( $params->{dir}, 'test' );
+ }
+
+ ($volume,$dirs,$file) = File::Spec->splitpath($tmp_path);
+ $home = File::Spec->catdir($volume, $dirs);
my $counter = 0;
while ( 1 ) {
- my $manifest_path = File::Spec->catfile( $home . '/MANIFEST' );
- last if -f $manifest_path;
+ last if -f File::Spec->catfile( $home, 'MANIFEST' );
my $tmp_home = Cwd::realpath( File::Spec->catdir( $home, '..' ) );
@@ -73,159 +118,169 @@
$home = $tmp_home;
}
- eval { $manifest = Cwd::realpath( $home . '/MANIFEST' ); 1; };
- if ( !$manifest ) {
- $test->BAILOUT( 'Cannot find a MANIFEST. Please check!' );
- }
+ return $HOME if $HOME;
+ return $home;
+}
+
+sub ok_manifest {
+ my ($hashref,$msg) = _validate_args( @_ );
+
+ $test->plan(tests => 1) if !$plan;
- my $skip;
- my $skip_path = File::Spec->catfile( $home, 'MANIFEST.SKIP' );
- eval { $skip = Cwd::realpath( $skip_path ) if -f $skip_path; 1; };
+ my $home = _find_home( $hashref );
+ my $manifest = File::Spec->catfile( $home, 'MANIFEST' );
- my @dup_files = ();
- my @missing_files = ();
- my @files_plus = ();
- my $arref = ['/blib' , '/_build'];
- my $filter = $is_hashref &&
- $hashref->{filter} ? $hashref->{filter} : [];
- my $comb = $is_hashref &&
- $hashref->{bool} &&
- $hashref->{bool} =~ m/^and$/i ?
- 'and' :
- 'or';
-
- push @$arref, @{$hashref->{exclude}}
- if $is_hashref and exists $hashref->{exclude} and
- ref($hashref->{exclude}) eq 'ARRAY';
-
- for(@$arref){
- croak 'path in excluded array must be "absolute"' unless m!^/!;
- my $path = $home . $_;
- next unless -e $path;
- $_ = Cwd::realpath($path);
- }
-
- @$arref = grep { defined }@$arref;
-
- unless( open my $fh, '<', $manifest ){
- $bool = 0;
- $msg = "can't open $manifest";
+ if ( !-f $manifest ) {
+ $test->BAILOUT( 'Cannot find a MANIFEST. Please check!' );
}
- else{
- { # extra block to use "last"
-
- my $files_in_skip = _read_skip( $skip, \$msg, \$bool );
- last unless $files_in_skip;
- my @files = _read_file( $fh );
- close $fh;
-
- chomp @files;
-
- {
- local $/ = "\r";
- chomp @files;
- }
+ my @files = _read_file( $manifest );
+ if ( !@files ) {
+ $test->diag( "No files in MANIFEST found (is it readable?)" );
+ return;
+ }
- for my $tfile(@files){
- $tfile = (split(/\s{2,}/,$tfile,2))[0];
- next unless -e $home . '/' . $tfile;
- $tfile = File::Spec->rel2abs($home . '/' . $tfile);
+ my $skip_path = File::Spec->catfile( $home, 'MANIFEST.SKIP' );
+ my @skip_files = _read_file( $skip_path );
+ my $excluded = _check_excludes( $hashref, $home );
+
+ for my $tfile ( @files ) {
+ $tfile = ( split /\s{2,}/, $tfile, 2 )[0];
+
+ next if !-e $home . '/' . $tfile;
+
+ $tfile = File::Spec->rel2abs($home . '/' . $tfile);
+ }
+
+ my (@dir_files, %excluded);
+
+ find({
+ no_chdir => 1,
+ follow => 0,
+ wanted => sub {
+ my $file = $File::Find::name;
+ my $is_excluded = _is_excluded(
+ $file,
+ $excluded,
+ $hashref->{filter},
+ $hashref->{bool},
+ \@skip_files,
+ $home,
+ );
+
+ push @dir_files, File::Spec->rel2abs($file) if -f $file and
!$is_excluded;
+
+ $excluded{$file} = 1 if -f $file and $is_excluded
}
-
- my (@dir_files,%files_hash,%excluded);
- @files_hash{@files} = ();
-
- find({
- no_chdir => 1,
- follow => 0,
- wanted => sub {
- my $file = $File::Find::name;
- my $is_excluded = _is_excluded(
- $file,
- $arref,
- $filter,
- $comb,
- $files_in_skip,
- $home,
- );
-
- push(@dir_files,File::Spec->rel2abs($file)) if -f $file and
!$is_excluded;
-
- $excluded{$file} = 1 if -f $file and $is_excluded
- }
- },$home);
+ },$home);
+
+ my $success = _check_manifest( \@dir_files, \@files, \%excluded, $msg );
+ $test->diag( "MANIFEST: $manifest" ) if !$success;
+
+ return $success;
+}
+
+sub _check_manifest {
+ my ($existing_files, $manifest_files, $excluded, $msg) = @_;
+
+ my @existing = @{ $existing_files || [] };
+ my @manifest = @{ $manifest_files || [] };
- #use Data::Dumper;
- #print STDERR ">>",++$counter,":",Dumper(\@files,\@dir_files);
- SFILE:
- for my $file(@dir_files){
- for my $check(@files){
- if($file eq $check){
- delete $files_hash{$check};
- next SFILE;
- }
+ my $bool = 1;
+
+ my %files_hash;
+ @files_hash{@manifest} = ();
+ my %missing_files;
+
+ SFILE:
+ for my $file ( @existing ) {
+ for my $check ( @manifest ) {
+ if ( $file eq $check ) {
+ delete $files_hash{$check};
+ next SFILE;
}
- push(@missing_files,$file);
- $bool = 0;
}
-
- delete $files_hash{$_} for keys %excluded;
- @files_plus = sort keys %files_hash;
- $bool = 0 if scalar @files_plus > 0;
-
- my %seen_files = ();
- @dup_files = map { 1==$seen_files{$_}++ ? $_ : () } @files;
- $bool = 0 if scalar @dup_files > 0;
-
- } # close extra block
+
+ $missing_files{$file} = 1;
}
+
+ my @dup_files = ();
+ my @files_plus = ();
+
+ delete @files_hash{ keys %{$excluded || {}} };
+ delete @missing_files{ keys %{$excluded || {}} };
+
+ @files_plus = sort keys %files_hash;
+ $bool = 0 if scalar @files_plus > 0;
+ $bool = 0 if %missing_files;
+
+ my %seen_files = ();
+ @dup_files = map { $seen_files{$_}++ ? $_ : () } @manifest;
+ $bool = 0 if scalar @dup_files > 0;
my $diag = 'The following files are not named in the MANIFEST file: '.
- join(', ',@missing_files);
+ join(', ', sort keys %missing_files);
my $plus = 'The following files are not part of distro but named in the
MANIFEST file: '.
join(', ',@files_plus);
my $dup = 'The following files appeared more than once in the MANIFEST
file: '.
join(', ',@dup_files);
- $test->is_num($bool,$test_bool,$msg);
- $test->diag($diag) if scalar @missing_files >= 1 and $test_bool == 1 and
$VERBOSE;
- $test->diag($plus) if scalar @files_plus >= 1 and $test_bool == 1 and
$VERBOSE;
- $test->diag($dup) if scalar @dup_files >= 1 and $test_bool == 1 and
$VERBOSE;
+ my $success;
+
+ if ( !$ENV{NO_MANIFEST_CHECK} ) {
+ $success = $test->is_num($bool,$test_bool,$msg);
+ }
+ else {
+ $success = $bool == $test_bool;
+ }
+
+ $test->diag($diag) if keys %missing_files >= 1 and $test_bool == 1 and
$VERBOSE;
+ $test->diag($plus) if scalar @files_plus >= 1 and $test_bool == 1 and
$VERBOSE;
+ $test->diag($dup) if scalar @dup_files >= 1 and $test_bool == 1 and
$VERBOSE;
+
+ return $success;
}
sub _read_file {
- my ($fh) = @_;
+ my ($path) = @_;
+
+ return if !-r $path;
my @files;
- my $selftest = 0;
+ open my $fh, '<', $path;
while( my $fh_line = <$fh> ){
chomp $fh_line;
- $selftest++ if $fh_line =~ m{# MANIFEST for Test-CheckManifest};
-
next if $fh_line =~ m{ \A \s* \# }x;
- next if $selftest && $fh_line =~ m{# selftest};
my ($file);
- if ( ($file) = $fh_line =~ /^'(\\[\\']|.+)+'\s*(.*)/) {
+ if ( ($file) = $fh_line =~ /^'(\\[\\']|.+)+'\s*/) {
$file =~ s/\\([\\'])/$1/g;
}
else {
- ($file) = $fh_line =~ /^(\S+)\s*(.*)/;
+ ($file) = $fh_line =~ /^(\S+)\s*/;
}
next unless $file;
push @files, $file;
}
+
+ close $fh;
+ chomp @files;
+
+ {
+ local $/ = "\r";
+ chomp @files;
+ }
+
return @files;
}
-sub _not_ok_manifest{
+sub _not_ok_manifest {
$test_bool = 0;
ok_manifest(@_);
$test_bool = 1;
@@ -233,13 +288,13 @@
sub _is_excluded{
my ($file,$dirref,$filter,$bool,$files_in_skip,$home) = @_;
- my @excluded_files = qw(
- pm_to_blib Makefile META.yml Build pod2htmd.tmp
- pod2htmi.tmp Build.bat .cvsignore MYMETA.json MYMETA.yml
- );
- if ( $files_in_skip and 'ARRAY' eq ref $files_in_skip ) {
- (my $local_file = $file) =~ s{\Q$home\E/?}{};
+ $home = '' if !defined $home;
+
+ return 0 if $files_in_skip and 'ARRAY' ne ref $files_in_skip;
+
+ if ( $files_in_skip ) {
+ (my $local_file = $file) =~ s{\Q$home\E}{};
for my $rx ( @{$files_in_skip} ) {
my $regex = qr/$rx/;
return 1 if $local_file =~ $regex;
@@ -247,14 +302,18 @@
}
my @matches = grep{ $file =~ /$_$/ }@excluded_files;
+
+ return 1 if @matches;
+
+ my $is_in_dir = _is_in_dir( $file, $dirref );
- if($bool eq 'or'){
- push @matches, $file if grep{ref($_) and ref($_) eq 'Regexp' and $file
=~ /$_/}@$filter;
- push @matches, $file if grep{$file =~ /^\Q$_\E/}@$dirref;
+ $bool ||= 'or';
+ if ( $bool eq 'or' ) {
+ push @matches, $file if grep{ $file =~ /$_/ }@$filter;
+ push @matches, $file if $is_in_dir;
}
else{
- if(grep{$file =~ /$_/ and ref($_) and ref($_) eq 'Regexp'}@$filter and
- grep{$file =~ /^\Q$_\E/ and not ref($_)}@$dirref){
+ if( grep{ $file =~ /$_/ }@$filter and $is_in_dir ) {
push @matches, $file;
}
}
@@ -262,22 +321,41 @@
return scalar @matches;
}
-sub _read_skip {
- my ($skip, $msg, $bool) = @_;
+sub _is_in_dir {
+ my ($file, $excludes) = @_;
- return [] unless $skip and -e $skip;
-
- my @files;
- if( -e $skip and not open my $skip_fh, '<', $skip ) {
- $$bool = 0;
- $$msg = "can't open $skip";
- return;
- }
- else {
- @files = _read_file( $skip_fh );
+ return if !defined $file;
+ return if !length $file;
+
+ my (undef, $path) = File::Spec->splitpath( $file );
+ my @file_parts = File::Spec->splitdir( $path );
+ my $is_in_dir;
+
+ EXCLUDE:
+ for my $exclude ( @{ $excludes || [] } ) {
+
+ next EXCLUDE if !defined $exclude;
+ next EXCLUDE if !length $exclude;
+
+ my (undef, $exclude_dir, $efile) = File::Spec->splitpath( $exclude );
+ my @exclude_parts = File::Spec->splitdir( $exclude_dir . $efile
);
+
+ pop @exclude_parts if $exclude_parts[-1] eq '';
+
+ next EXCLUDE if @exclude_parts > @file_parts;
+
+ my @subparts = @file_parts[ 0 .. $#exclude_parts ];
+
+ my $exclude_join = join '/', @exclude_parts;
+ my $sub_join = join '/', @subparts;
+
+ next EXCLUDE if $exclude_join ne $sub_join;
+
+ $is_in_dir = 1;
+ last EXCLUDE;
}
- return \@files;
+ return $is_in_dir;
}
1;
@@ -294,7 +372,7 @@
=head1 VERSION
-version 1.33
+version 1.39
=head1 SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/00_load.t
new/Test-CheckManifest-1.39/t/00_load.t
--- old/Test-CheckManifest-1.33/t/00_load.t 2018-01-26 13:42:10.000000000
+0100
+++ new/Test-CheckManifest-1.39/t/00_load.t 2019-02-14 07:36:31.000000000
+0100
@@ -4,4 +4,4 @@
use warnings;
use Test::More tests => 1;
-use_ok('Test::CheckManifest');
\ No newline at end of file
+use_ok('Test::CheckManifest');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/01_selftest.t
new/Test-CheckManifest-1.39/t/01_selftest.t
--- old/Test-CheckManifest-1.33/t/01_selftest.t 2018-01-26 13:42:10.000000000
+0100
+++ new/Test-CheckManifest-1.39/t/01_selftest.t 2019-02-14 07:36:31.000000000
+0100
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -T
+#!/usr/bin/perl
use strict;
use warnings;
@@ -6,7 +6,7 @@
use File::Basename;
use Test::More;
-eval "use Test::CheckManifest tests => 9";
+eval "use Test::CheckManifest tests => 10";
plan skip_all => "Test::CheckManifest required" if $@;
#$Test::CheckManifest::VERBOSE = 0;
@@ -14,20 +14,13 @@
# create a directory and a file
my $home = dirname(File::Spec->rel2abs($0));
+my $dir = File::Spec->catdir($home,'.git');
+my $dir2 = File::Spec->catdir($home,'test');
+my $file1 = File::Spec->catfile($dir,'test.txt');
+my $file2 = File::Spec->catfile($home,'test.svn');
+my $file3 = File::Spec->catfile($dir2,'hallo.txt');
-# untaint
-if ($home =~ /^([-\@\w.\/\\: ~]+)$/) {
- $home = $1;
-}
-else {
- die "Bad data in $home";
-}
-
-my $dir = $home . '/.git/';
-my $dir2 = $home . '/test/';
-my ($file1,$file2,$file3) = ($dir.'test.txt', $home . '/test.svn',
$dir2.'hallo.txt');
-
mkdir $dir;
my $fh;
@@ -46,14 +39,25 @@
Test::CheckManifest::_not_ok_manifest({filter => [qr/\.git/],
bool => 'and',
exclude => ['/t/test']}, 'filter AND
exclude');
-ok_manifest({filter => [qr/\.(git|build)/],
- exclude => ['/t/test']}, 'filter OR exclude');
+
+Test::CheckManifest::_not_ok_manifest({
+ filter => [qr/\.git|blib/],
+ exclude => ['/t/test'],
+ verbose => 1,
+}, 'filter OR exclude - test.svn is missing in MANIFEST');
+
+unlink $file2;
+
+ok_manifest({
+ filter => [qr/\.(git|build)/],
+ exclude => ['/t/test'],
+}, 'filter OR exclude');
unlink $file3;
ok_manifest({filter => [qr/\.git/, qr/\.svn/, qr/\.build/ ]},'Filter \.git or
\.svn');
-unlink $file2, $file1;
+unlink $file1;
rmdir $dir;
rmdir $dir2;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/02_validate_args.t
new/Test-CheckManifest-1.39/t/02_validate_args.t
--- old/Test-CheckManifest-1.33/t/02_validate_args.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/02_validate_args.t 2019-02-14
07:36:31.000000000 +0100
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use File::Spec;
+use File::Basename;
+use Test::More;
+use Test::CheckManifest;
+
+# create a directory and a file
+my $sub = Test::CheckManifest->can('_validate_args');
+
+my $default = {
+ filter => [],
+ exclude => [ qw!/blib /_blib! ],
+ bool => 'or',
+};
+
+is_deeply [ $sub->( [], "hallo" ) ], [ $default, "hallo" ],
'Empty Arrayref';
+is_deeply [ $sub->( { exclude => {} }, "hallo" ) ], [ $default, "hallo" ],
'exclude => {}';
+is_deeply [ $sub->( { exclude => [] }, "hallo" ) ], [ $default, "hallo" ],
'exclude => []';
+is_deeply [ $sub->( { exclude => 'test' }, "hallo" ) ], [ $default, "hallo" ],
'exclude => "test"';
+
+is_deeply [ $sub->( { bool => {} }, "hallo" ) ], [ $default, "hallo" ],
'bool => {}';
+is_deeply [ $sub->( { bool => 'or' }, "hallo" )], [ $default, "hallo" ],
'bool => "or"';
+is_deeply [ $sub->( { bool => 'and' }, "hallo" )], [ { %$default, bool =>
'and' }, "hallo" ], 'bool => "and"';
+is_deeply [ $sub->( { bool => '1' }, "hallo" )], [ $default, "hallo" ],
'bool => "1"';
+
+is_deeply [ $sub->( { filter => [] }, "hallo" ) ], [ $default,
"hallo" ], 'filter -> arrayref';
+is_deeply [ $sub->( { filter => {} }, "hallo" ) ], [ $default,
"hallo" ], 'filter -> empty hashref';
+is_deeply [ $sub->( { filter => 'test' }, "hallo" ) ], [ $default,
"hallo" ], 'filter -> string';
+is_deeply [ $sub->( { filter => [ 'hallo' ] }, "hallo" ) ], [ $default,
"hallo" ], 'filter -> no regex';
+
+{
+ my $error;
+ eval {
+ $sub->( { exclude => ['testing'] } );
+ 1;
+ } or do {
+ $error = $@;
+ };
+
+ like $error, qr/path in excluded array must be "absolute"/, 'relative
paths';
+}
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/03_find_home.t
new/Test-CheckManifest-1.39/t/03_find_home.t
--- old/Test-CheckManifest-1.33/t/03_find_home.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/03_find_home.t 2019-02-14
07:36:31.000000000 +0100
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use File::Spec;
+use File::Basename;
+use Test::More;
+use Test::CheckManifest;
+use Cwd;
+
+# create a directory and a file
+my $sub = Test::CheckManifest->can('_find_home');
+
+my $dir = Cwd::realpath( File::Spec->catdir( dirname( __FILE__ ), '..' ) );
+my $file = File::Spec->catfile( $dir, 'MANIFEST' );
+
+my @dirs_one = File::Spec->splitdir( $dir );
+my @dirs_two = File::Spec->splitdir( $sub->( {} ) );
+is_deeply \@dirs_two, \@dirs_one, 'tmp_path => $0';
+
+my ($vol,$dirs,$file_one) = File::Spec->splitpath($file);
+
+my @dirs_three = File::Spec->splitdir( $sub->( {file => $file} ) );
+is_deeply \@dirs_three, \@dirs_one, 'file ' . $file;
+
+my @dirs_five = File::Spec->splitdir( $sub->( { dir => $dir } ) );
+is_deeply \@dirs_five, \@dirs_one, 'dir ' . $dir;
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/04_check_excludes.t
new/Test-CheckManifest-1.39/t/04_check_excludes.t
--- old/Test-CheckManifest-1.33/t/04_check_excludes.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/04_check_excludes.t 2019-02-14
07:36:31.000000000 +0100
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Cwd;
+use File::Spec;
+use File::Basename;
+use Test::CheckManifest;
+use Test::More;
+
+# create a directory and a file
+my $sub = Test::CheckManifest->can('_check_excludes');
+my $dir = Cwd::realpath( dirname __FILE__ );
+$dir =~ s{.t\z}{};
+
+{
+ is_deeply $sub->( { exclude => ['testing'] }, $dir ), [], 'empty excludes';
+ is_deeply $sub->( { exclude => ['/t'] }, $dir ), [ File::Spec->catdir(
$dir, 't' ) ], 't directory';
+ is_deeply $sub->( { exclude => ['/t'] }, '.' ), [ File::Spec->catdir(
$dir, 't' ) ], 't directory - home: .';
+ is_deeply $sub->( { exclude => ['/t2'] }, '.' ), [ ], 't2 directory, that
does not exist';
+ is_deeply $sub->( { exclude => [''] }, '' ), [ ], 'empty strings';
+ is_deeply $sub->( { exclude => [undef] }, '' ), [ ], 'undef excluded path';
+
+ is_deeply $sub->( { exclude => undef }, '' ), [ ], 'exclude is undef';
+}
+
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/05_is_excluded.t
new/Test-CheckManifest-1.39/t/05_is_excluded.t
--- old/Test-CheckManifest-1.33/t/05_is_excluded.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/05_is_excluded.t 2019-02-14
07:36:31.000000000 +0100
@@ -0,0 +1,136 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use File::Spec;
+use File::Basename;
+use Test::More;
+use Cwd;
+
+use Test::More;
+use Test::CheckManifest;
+
+# create a directory and a file
+my $sub = Test::CheckManifest->can('_is_excluded');
+
+my $dir = Cwd::realpath( dirname __FILE__ );
+$dir =~ s{.t\z}{};
+my $file = File::Spec->catfile( $dir, 'MANIFEST.SKIP' );
+my $t_dir = File::Spec->catdir( $dir, 't' );
+my $meta = 'META.yml';
+
+my $abs_t_file = File::Spec->rel2abs( __FILE__ );
+
+# my ($file,$dirref,$filter,$bool,$files_in_skip,$home) = @_;
+
+my @tests = (
+ [
+ [ $meta ],
+ 1,
+ $meta,
+ ],
+ [
+ [ $meta, [] ],
+ 1,
+ "meta, empty dirref",
+ ],
+ [
+ [ $meta, [$t_dir] ],
+ 1,
+ "meta, t/ directory",
+ ],
+ [
+ [ $abs_t_file ],
+ 0,
+ "this file",
+ ],
+ [
+ [ $abs_t_file, [] ],
+ 0,
+ "this file, empty dirref",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ] ],
+ 1,
+ "this file, t/ dir",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/] ],
+ 2,
+ "this file, t/ dir, filter: 'excluded'",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/], 'and' ],
+ 1,
+ "this file, t/ dir, filter: 'excluded', bool => 'and'",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/not_excluded/] ],
+ 1,
+ "this file, t/ dir, filter: 'not_excluded'",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/not_excluded/], 'and' ],
+ 0,
+ "this file, t/ dir, filter: 'not_excluded', bool => 'and'",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/], 'and', [] ],
+ 1,
+ "this file, t/ dir, filter: 'excluded', bool => 'and', empty
files_in_skip",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/], 'and', [$abs_t_file] ],
+ 1,
+ "this file, t/ dir, filter: 'excluded', bool => 'and', skip this file",
+ ],
+ [
+ [ $abs_t_file . '.bak', [ $t_dir ], [qr/excluded/], 'and',
[$abs_t_file . '.bak'] ],
+ 1,
+ "<this_file>.bak, t/ dir, filter: 'excluded', bool => 'and', skip
backup of this file",
+ ],
+ [
+ [ '/tmp/test', [ $t_dir ], [qr/excluded/], 'and', [$abs_t_file .
'.bak'] ],
+ 0,
+ "/tmp/test, t/ dir, filter: 'excluded', bool => 'and', skip backup of
this file",
+ ],
+ [
+ [ '/tmp/test', [ $t_dir ], [qr/excluded/], 'and', ['/test'], '/tmp' ],
+ 1,
+ "/tmp/test, t/ dir, filter: 'excluded', bool => 'and', skip /test in
/tmp",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/], 'and', [$abs_t_file .
'.bak'] ],
+ 1,
+ "this file, t/ dir, filter: 'excluded', bool => 'and', skip backup of
this file",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/], 'and', {} ],
+ 0,
+ "this file, t/ dir, filter: 'excluded', bool => 'and', wrong reftype
files_in_skip",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/], 'and' ],
+ 1,
+ "this file, t/ dir, filter: 'excluded', bool => 'and'",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/], 'or' ],
+ 2,
+ "this file, t/ dir, filter: 'excluded', bool => 'or'",
+ ],
+ [
+ [ $abs_t_file, [ $t_dir ], [qr/excluded/], 'and', [$abs_t_file] ],
+ 1,
+ "this file, t/ dir, filter: 'excluded', bool => 'and', excluded",
+ ],
+);
+
+for my $test ( @tests ) {
+ my ($input, $check, $desc) = @{$test};
+ my $ret = $sub->( @{$input} );
+ is $ret, $check, $desc;
+}
+
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/06_bailout.t
new/Test-CheckManifest-1.39/t/06_bailout.t
--- old/Test-CheckManifest-1.33/t/06_bailout.t 1970-01-01 01:00:00.000000000
+0100
+++ new/Test-CheckManifest-1.39/t/06_bailout.t 2019-02-14 07:36:31.000000000
+0100
@@ -0,0 +1,28 @@
+#!/usr/bin/perl
+
+use strict;
+
+use File::Spec;
+use File::Basename;
+use Test::More;
+
+eval "use Test::CheckManifest tests => 2";
+plan skip_all => "Test::CheckManifest required" if $@;
+
+$Test::CheckManifest::HOME = '/tmp/' . $$ . '/test';
+
+my $error;
+local *Test::Builder::BAILOUT = sub {
+ $error = 'BAILOUT';
+};
+
+my $success = ok_manifest({
+ filter => [qr/\.(git|build)/],
+ exclude => ['/t/test'],
+}, 'filter OR exclude');
+
+is $error, 'BAILOUT';
+is $success, undef;
+
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/07_is_in_dir.t
new/Test-CheckManifest-1.39/t/07_is_in_dir.t
--- old/Test-CheckManifest-1.33/t/07_is_in_dir.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/07_is_in_dir.t 2019-02-14
07:36:31.000000000 +0100
@@ -0,0 +1,48 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use File::Basename;
+use File::Spec;
+use Test::More;
+use Test::CheckManifest;
+
+use Cwd;
+
+my $sub = Test::CheckManifest->can('_is_in_dir');
+ok $sub;
+
+my $dir = Cwd::realpath( dirname __FILE__ );
+$dir =~ s{.t\z}{};
+my $t_dir = File::Spec->catdir( $dir, 't' );
+my $abs_t_file = File::Spec->rel2abs( __FILE__ );
+
+my @tests = (
+ [ '/t/test.txt', '/t', 1 ],
+ [ '/t/sub/test.txt', '/t', 1 ],
+ [ '/t/test.txt', '/t2', undef ],
+ [ '', '/t2', undef ],
+ [ '/t/test.txt', '', undef ],
+ [ undef, '', undef ],
+ [ undef, '/t', undef ],
+ [ undef, undef, undef ],
+ [ '/t/test.txt', undef, undef ],
+ [ '', undef, undef ],
+ [ '/t/sub/', '/t', 1 ],
+ [ '/t/sub/test', '/t/sub/', 1 ],
+ [ '/t/test', '/t/sub/', undef ],
+ [ __FILE__, dirname( __FILE__ ), 1 ],
+ [ $abs_t_file, $t_dir, 1 ],
+);
+
+for my $test ( @tests ) {
+ my ($file, $excludes, $expected) = @{$test};
+ my $result = $sub->( $file, [$excludes] );
+
+ is $result, $expected, sprintf "%s -> %s",
+ ( defined $file ? $file : '<undef>' ),
+ ( defined $excludes ? $excludes : '<undef>' );
+}
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/08_check_manifest.t
new/Test-CheckManifest-1.39/t/08_check_manifest.t
--- old/Test-CheckManifest-1.33/t/08_check_manifest.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/08_check_manifest.t 2019-02-14
07:36:31.000000000 +0100
@@ -0,0 +1,113 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use File::Basename;
+use File::Spec;
+use Test::More;
+use Test::CheckManifest;
+
+use Cwd;
+
+local $ENV{NO_MANIFEST_CHECK} = 1;
+
+my $sub = Test::CheckManifest->can('_check_manifest');
+ok $sub;
+
+my $dir = Cwd::realpath( dirname __FILE__ );
+$dir =~ s{.t\z}{};
+my $t_dir = File::Spec->catdir( $dir, 't' );
+my $abs_t_file = File::Spec->rel2abs( __FILE__ );
+
+# my ($existing_files, $manifest_files, $excluded, $msg) = @_;
+
+my $cnt = 0;
+
+{
+ my @tests = (
+ [ undef, undef, undef, 'test', 1 ],
+ [ ['/t/test'], undef, undef, 'test', '' ],
+ [ ['/t/test'], ['/t/test'], undef, 'test', 1 ],
+ [ ['/t/test'], undef, {'/t/test' => 1}, 'test', 1 ],
+ [ ['/t/test'], ['/test'], {'/t/test' => 1}, 'test', '' ],
+ [ ['/t/test'], ['/t/test', '/t/test'], undef, 'test', '' ],
+ [ ['/t/test','/t/test2'], ['/t/test'], undef, 'test', '' ],
+ );
+
+ for my $test ( @tests ) {
+ my @params = @{$test};
+ my $expected = pop @params;
+
+ my $result = $sub->( @params );
+
+ is $result, $expected, "Test $cnt";
+ $cnt++;
+ }
+}
+
+{
+ local $Test::CheckManifest::test_bool = 0;
+ my @tests = (
+ [ undef, undef, undef, 'test', 1 ],
+ [ ['/t/test'], undef, undef, 'test', '' ],
+ [ ['/t/test'], ['/t/test'], undef, 'test', 1 ],
+ [ ['/t/test'], undef, {'/t/test' => 1}, 'test', 1 ],
+ [ ['/t/test'], ['/test'], {'/t/test' => 1}, 'test', '' ],
+ [ ['/t/test'], ['/t/test', '/t/test'], undef, 'test', '' ],
+ [ ['/t/test','/t/test2'], ['/t/test'], undef, 'test', '' ],
+ );
+
+ for my $test ( @tests ) {
+ my @params = @{$test};
+ my $expected = pop @params;
+
+ my $result = $sub->( @params );
+ $cnt++;
+ }
+}
+
+{
+ local $Test::CheckManifest::test_bool = 0;
+ local $Test::CheckManifest::VERBOSE = 0;
+ my @tests = (
+ [ undef, undef, undef, 'test', 1 ],
+ [ ['/t/test'], undef, undef, 'test', '' ],
+ [ ['/t/test'], ['/t/test'], undef, 'test', 1 ],
+ [ ['/t/test'], undef, {'/t/test' => 1}, 'test', 1 ],
+ [ ['/t/test'], ['/test'], {'/t/test' => 1}, 'test', '' ],
+ [ ['/t/test'], ['/t/test', '/t/test'], undef, 'test', '' ],
+ [ ['/t/test','/t/test2'], ['/t/test'], undef, 'test', '' ],
+ );
+
+ for my $test ( @tests ) {
+ my @params = @{$test};
+ my $expected = pop @params;
+
+ my $result = $sub->( @params );
+ $cnt++;
+ }
+}
+
+{
+ local $Test::CheckManifest::VERBOSE = 0;
+ my @tests = (
+ [ undef, undef, undef, 'test', 1 ],
+ [ ['/t/test'], undef, undef, 'test', '' ],
+ [ ['/t/test'], ['/t/test'], undef, 'test', 1 ],
+ [ ['/t/test'], undef, {'/t/test' => 1}, 'test', 1 ],
+ [ ['/t/test'], ['/test'], {'/t/test' => 1}, 'test', '' ],
+ [ ['/t/test'], ['/t/test', '/t/test'], undef, 'test', '' ],
+ [ ['/t/test','/t/test2'], ['/t/test'], undef, 'test', '' ],
+ );
+
+ for my $test ( @tests ) {
+ my @params = @{$test};
+ my $expected = pop @params;
+
+ my $result = $sub->( @params );
+ $cnt++;
+ }
+}
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/author-pod-coverage.t
new/Test-CheckManifest-1.39/t/author-pod-coverage.t
--- old/Test-CheckManifest-1.33/t/author-pod-coverage.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/author-pod-coverage.t 2019-02-14
07:36:31.000000000 +0100
@@ -0,0 +1,15 @@
+#!perl
+
+BEGIN {
+ unless ($ENV{AUTHOR_TESTING}) {
+ print qq{1..0 # SKIP these tests are for testing by the author\n};
+ exit
+ }
+}
+
+# This file was automatically generated by
Dist::Zilla::Plugin::PodCoverageTests.
+
+use Test::Pod::Coverage 1.08;
+use Pod::Coverage::TrustPod;
+
+all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' });
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/author-pod-syntax.t
new/Test-CheckManifest-1.39/t/author-pod-syntax.t
--- old/Test-CheckManifest-1.33/t/author-pod-syntax.t 1970-01-01
01:00:00.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/author-pod-syntax.t 2019-02-14
07:36:31.000000000 +0100
@@ -0,0 +1,15 @@
+#!perl
+
+BEGIN {
+ unless ($ENV{AUTHOR_TESTING}) {
+ print qq{1..0 # SKIP these tests are for testing by the author\n};
+ exit
+ }
+}
+
+# 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();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/xt/02_issue1.t
new/Test-CheckManifest-1.39/t/xt/02_issue1.t
--- old/Test-CheckManifest-1.33/t/xt/02_issue1.t 2018-01-26
13:42:10.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/xt/02_issue1.t 2019-02-14
07:36:31.000000000 +0100
@@ -11,3 +11,4 @@
ok_manifest({ filter => [ qr/\.(git|build)/, qr/Test-CheckManifest-/ ],
dir => $dir });
}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Test-CheckManifest-1.33/t/xt/03_issue7.t
new/Test-CheckManifest-1.39/t/xt/03_issue7.t
--- old/Test-CheckManifest-1.33/t/xt/03_issue7.t 2018-01-26
13:42:10.000000000 +0100
+++ new/Test-CheckManifest-1.39/t/xt/03_issue7.t 2019-02-14
07:36:31.000000000 +0100
@@ -32,3 +32,4 @@
}
}
+