blob: 8d568791ae89113a19e344708f93d597cf777eec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#############################################################################
##
## Copyright (C) 2017 The Qt Company Ltd.
## Contact: https://www.qt.io/licensing/
##
## This file is part of the Quality Assurance module of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:GPL-EXCEPT$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https://www.qt.io/terms-conditions. For further
## information use the contact form at https://www.qt.io/contact-us.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 3 as published by the Free Software
## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
## included in the packaging of this file. Please review the following
## information to ensure the GNU General Public License requirements will
## be met: https://www.gnu.org/licenses/gpl-3.0.html.
##
## $QT_END_LICENSE$
##
#############################################################################
package QtQA::PerlChecks;
use strict;
use warnings;
use Exporter;
our @ISA = qw( Exporter );
our @EXPORT_OK = qw( all_files_in_git all_perl_files_in_git );
use File::chdir;
use File::Spec::Functions;
use File::Find;
use List::MoreUtils qw( apply );
use Perl::Critic::Utils qw( all_perl_files );
use Test::More;
# Helper for tests in this directory to find perl files for testing.
# Returns a list of all files known to git under the given $path (or '.' if unset)
# It is considered a failure if there are no files known to git.
sub all_files_in_git
{
my ($path) = @_;
if (!$path) {
$path = '.';
}
# Do everything from $path, so we get filenames relative to that
local $CWD = $path;
my $QT_MODULE_TO_TEST=$ENV{QT_MODULE_TO_TEST};
# Find all the files known to git
my @out;
if (-d $QT_MODULE_TO_TEST . '/.git') {
@out =
apply { $_ = canonpath($_) } # make paths canonical ...
apply { chomp } # strip all newlines ...
qx( git ls-files );
} else {
find(sub{ push @out, canonpath($File::Find::name); }, ".");
}
foreach (@out) {
print "$_\n";
}
# Get files in a reliable order
@out = sort @out;
is( $?, 0, 'git ls-files ran ok' );
ok( @out, 'git ls-files found some files' );
return @out;
}
# Returns a list of all perl files known to git under the given $path.
# See Perl::Critic::Utils all_perl_files for documentation on what
# "perl files" means.
# May return an empty list if there are no perl files.
sub all_perl_files_in_git
{
my ($path) = @_;
if (!$path) {
$path = '.';
}
# Do everything from $path, so we get filenames relative to that
local $CWD = $path;
# Find all the git files ...
my %all_git_files = map { $_ => 1 } all_files_in_git( '.' );
# Then return only those perl files which are also in git
my @out = grep { $all_git_files{ $_ } } all_perl_files( '.' );
# Get files in a reliable order
@out = sort @out;
return @out;
}
1;
|