Bug 24545: Fix find-license-problems.t to catch future wrong license statements
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 31 Jan 2020 13:43:39 +0000 (14:43 +0100)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 24 Feb 2020 13:31:26 +0000 (13:31 +0000)
File adjust to run tests and be executed on all our codebase.

Test plan:
- Apply this patch without the other one
- run the tests
=> Several failures
- apply the other patch
- run the tests
=> Should pass now

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

xt/find-license-problems [deleted file]
xt/find-license-problems.t [new file with mode: 0755]

diff --git a/xt/find-license-problems b/xt/find-license-problems
deleted file mode 100755 (executable)
index c18f2c1..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/perl
-#
-# Find copyright and license problems in Koha source files. At this
-# time it only looks for references to the old FSF address in GPLv2
-# license notices, but it might in the future be extended to look for
-# other things, too.
-#
-# Copyright 2010 Catalyst IT Ltd
-#
-# This file is part of Koha.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-use Modern::Perl;
-
-use File::Find;
-
-
-my @files;
-sub wanted {
-    my $name = $File::Find::name;
-    push @files, $name
-        unless $name =~ /\/(\.git|koha-tmpl)(\/.*)?$/ ||
-               $name =~ /\.(gif|jpg|odt|ogg|pdf|png|po|psd|svg|swf|zip)$/ ||
-               ! -f $name;
-}
-
-
-sub has_gpl2plus_and_current_fsf_address {
-    my ($name) = @_;
-    my $hascopyright;
-    my $hasgpl;
-    my $hasv2;
-    my $hasorlater;
-    my $hasfranklinst;
-    open(FILE, $name) || return 0;
-    while (my $line = <FILE>) {
-        $hascopyright = 1 if ($line =~ /Copyright.*\d\d/);
-        $hasgpl = 1 if ($line =~ /GNU General Public License/);
-        $hasv2 = 1 if ($line =~ /either version 2/);
-        $hasorlater = 1 if ($line =~ /any later version/ ||
-                            $line =~ /at your option/);
-        $hasfranklinst = 1 if ($line =~ /51 Franklin Street/);
-    }
-    return ! $hascopyright ||
-           ($hasgpl && $hasv2 && $hasorlater && $hasfranklinst);
-}
-
-
-find({ wanted => \&wanted, no_chdir => 1 }, @ARGV);
-foreach my $name (@files) {
-    if (! has_gpl2plus_and_current_fsf_address($name)) {
-        print "$name\n";
-    }
-}
diff --git a/xt/find-license-problems.t b/xt/find-license-problems.t
new file mode 100755 (executable)
index 0000000..b8817a9
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+#
+# Find copyright and license problems in Koha source files. At this
+# time it only looks for references to the old FSF address in GPLv2
+# license notices, but it might in the future be extended to look for
+# other things, too.
+#
+# Copyright 2010 Catalyst IT Ltd
+# Copyright 2020 Koha Development Team
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+use Test::More;
+
+use File::Spec;
+use File::Find;
+
+my @files;
+sub wanted {
+    my $name = $File::Find::name;
+    push @files, $name
+        unless $name =~ /\/(\.git|koha-tmpl|node_modules|swagger-ui)(\/.*)?$/ ||
+               $name =~ /\.(gif|jpg|odt|ogg|pdf|png|po|psd|svg|swf|zip|patch)$/ ||
+               $name =~ m[(xt/find-license-problems|xt/fix-old-fsf-address)] ||
+               ! -f $name;
+}
+
+find({ wanted => \&wanted, no_chdir => 1 }, File::Spec->curdir());
+
+foreach my $name (@files) {
+    open( FILE, $name ) || return 0;
+    my ( $hascopyright, $hasgpl, $hasv3, $hasorlater, $haslinktolicense,
+        $hasfranklinst, $is_not_us ) = (0)x7;
+    while ( my $line = <FILE> ) {
+        $hascopyright = 1 if ( $line =~ /^(#|--)?\s*Copyright.*\d\d/ );
+        $hasgpl       = 1 if ( $line =~ /GNU General Public License/ );
+        $hasv3        = 1 if ( $line =~ /either version 3/ );
+        $hasorlater   = 1
+          if ( $line =~ /any later version/
+            || $line =~ /at your option/ );
+        $haslinktolicense = 1 if $line =~ m|http://www\.gnu\.org/licenses|;
+        $hasfranklinst    = 1 if ( $line =~ /51 Franklin Street/ );
+        $is_not_us        = 1 if $line =~ m|This file is part of the Zebra server|;
+    }
+    next unless $hascopyright;
+    next if $is_not_us;
+    is(    $hasgpl
+        && $hasv3
+        && $hasorlater
+        && $haslinktolicense
+        && !$hasfranklinst,  1 ) or diag(sprintf "File %s has wrong copyright: hasgpl=%s, hasv3=%s, hasorlater=%s, haslinktolicense=%s, hasfranklinst=%s", $name, $hasgpl, $hasv3, $hasorlater, $haslinktolicense, $hasfranklinst);
+}
+done_testing;