gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnunet] branch master updated: for posterity: the script t


From: gnunet
Subject: [GNUnet-SVN] [gnunet] branch master updated: for posterity: the script that caught all kinds of funny license formatting
Date: Wed, 06 Jun 2018 08:25:37 +0200

This is an automated email from the git hooks/post-receive script.

lynx pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new bc2853bf5 for posterity: the script that caught all kinds of funny 
license formatting
bc2853bf5 is described below

commit bc2853bf5de404afdcb6774eb287f31977b3c76a
Author: psyc://loupsycedyglgamf.onion/~lynX 
<ircs://psyced.org/youbroketheinternet>
AuthorDate: Wed Jun 6 06:20:55 2018 +0000

    for posterity: the script that caught all kinds of funny license formatting
---
 contrib/scripts/afferify | 95 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)

diff --git a/contrib/scripts/afferify b/contrib/scripts/afferify
new file mode 100755
index 000000000..188b66c64
--- /dev/null
+++ b/contrib/scripts/afferify
@@ -0,0 +1,95 @@
+#!/usr/bin/perl
+# Catch all in-source GPL2/3 license declarations and convert
+# them to AGPL.
+#
+# You expected this to be using diff & patch? Well, the source
+# files have all sorts of different commenting and indentation
+# styles, not speaking of typos and failed uses of search and
+# replace, that an attempt in using the patch(1) tool would fail
+# miserably. This script instead is based on my rgrep from 1998.
+# Keeping it here as it may be useful to other projects under-
+# going the same pains. It is forbidden to use this script to
+# convert AGPL code back to less strict licensing. Haha, just
+# kidding.
+#
+#      -symlynX
+
+use File::Find;
+$|=1;
+# Recurse into current or given directories
+find(\&wanted, $#ARGV >= 0 ? @ARGV : '.');
+print STDERR "\n";
+exit;
+
+
+sub wanted {
+       my $name = $File::Find::name;
+       ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime)
+               = lstat;
+       return $File::Find::prune = 1 if /^(CVS|\.git|\.svn)$/;
+       # Nicer if you 'make distclean' first
+       return if /\.(o|pdf)$/i;
+       return if -d _ or -l _;
+       return if /afferify/;   # Don't apply this to itself ;)
+                               # No.. i didn't do it.. just being careful ;) ;)
+#      return unless -T _;     # We don't have binaries in the repo, do we?
+
+       # We need the default variable '$_' for more important duties.
+       my $f = $_;
+
+       if (sysopen(I, $f, O_RDONLY)) {
+               $_ = &slurp(*I);
+               close I;
+               # Debugging: What's inside the file we just read?
+#              print STDERR '> ', $_;
+
+               # Good idea to have the text start with "GNUnet" rather than 
"This program"
+               if ( s#GNUnet is free software; you can redistribute it and/or 
modify it under the#GNUnet is free software: you can redistribute it and/or 
modify it# ) {
+                   # Whoever had the idea of reformatting the GPL license 
text...
+                   print STDERR "\nTrying wide style on $name\t";
+
+                   # Most important thing to know in order to be able
+                   # to read perl code: if regexps appear without any
+                   # context, it means they are applied to the default
+                   # variable being '$_'.
+                   return unless s#terms of the GNU General Public License as 
published by the Free Software#under the terms of the GNU General Public 
License as published#;
+                   return unless s#^(\W*\s+)Foundation; either version \d, or 
\(at your option\) any later version\.#\1by the Free Software Foundation, 
either version 3 of the License,\n\1or (at your option) any later version.#m;
+                   return unless s#GNUnet is distributed in the hope that it 
will be useful, but WITHOUT ANY#GNUnet is distributed in the hope that it will 
be useful, but#;
+                   return unless s#WARRANTY; without even the implied warranty 
of MERCHANTABILITY or FITNESS FOR#WITHOUT ANY WARRANTY; without even the 
implied warranty of#;
+                   return unless s#^(\W*\s+)A PARTICULAR PURPOSE.  See the GNU 
General Public License for more details.#\1MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE.  See the GNU\n\1Affero General Public License for more 
details.#m;
+                   return unless s#^\W*\n\W*\s+You should have received a copy 
of the GNU General Public License along with\n\W*\s+GNUnet. see the file 
COPYING\.  If not, .* see\s*\W*\s+<http://www.gnu.org/licenses/>\n##m;
+               } else {
+                   # If this string is not in the file, leave it alone.
+                   return unless s#GNUnet is free software; you can 
redistribute it and/or modify#GNUnet is free software: you can redistribute it 
and/or modify it#;
+                   print STDERR "\nTrying regular style on $name\t";
+
+                   # Patterns are designed to also match some typos and 
substitutions.
+                   return unless s#it under the terms of the GNU General 
Public Lice\w+ as published#under the terms of the GNU General Public License 
as published#;
+                   return unless s#by the Free Software Foundation; either 
version \d, or \(at your#by the Free Software Foundation, either version 3 of 
the License,#;
+                   return unless s#option\) any later version\.#or (at your 
option) any later version.#;
+                   return unless s#General Public Lice\w+ for more 
details\.#Affero General Public License for more details.#;
+                   return unless s#^\W*\n\W*\s+You should have received a copy 
of the GNU General Public Lice\w+\n\W*\s+along with GNUnet. see the file 
COPYING\.  If not, write to the\n\W*\s+Free Software Foundation, Inc\., (51 
Franklin Street, Fifth Floor|59 Tem ?ple Place - Suite 330),\n\W*\s+Boston, MA 
0211\d-130\d, USA\.\n##m;
+               }
+               print STDERR "OK";
+
+               # We directly overwrite the original file in the
+               # assumption that we're in a healthy revertible git.
+               open(O, '>', $f) or die "Cannot overwrite $f";
+               # Imagine, I could have left out $_ here... ;)
+               print O $_;
+               close O;
+       } else {
+               die "Cannot access $name";
+       }
+}
+
+# Reads a file from a stream into a variable all at once:
+sub slurp {
+       # Perl sure gets clunky here
+       local(*IN) = @_;
+       local($save) = $/;
+       undef $/;
+       local($data) = <IN>;
+       $/ = $save;
+       return $data;
+}

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]