Archives par mot-clé : Python

A4A : Changement de licence

Bonjour,

« Ada for Automation » était jusqu’à présent distribué sous la licence « GMGPL : GNAT Modified General Public License « .

Les bibliothèques mises en œuvre dans « Ada for Automation », GtkAda et Gnoga, étant passées à la GPL V3 + GCC RUNTIME LIBRARY EXCEPTION, j’ai également procédé au changement de licence dans les mêmes termes car cela me semble cohérent.

Bien sûr, il vous appartient de juger si cette licence convient à votre utilisation.

Pour le côté pratique, d’habitude, quand je veux modifier une ligne dans une série de fichiers, j’invoque ce bon vieux « sed » comme ceci par exemple :

cd Ada/A4A
find . -name "*.ad*" -exec sed -i 's/Copyright (C) 2012-2014/Copyright (C) 2012-2015/g' {} \;

Cela fonctionne bien avec une ligne à remplacer mais c’est plus laborieux avec plusieurs…

Comme je suis un peu fainéant et que « sed » n’avait pas l’air d’être conçu pour le cas, j’ai préféré apprendre un peu de Python que de me taper tous les fichiers un par un et ça a donné le script « ChangeLicense.py » :

#!/usr/bin/env python
# ChangeLicense.py
# cd Ada/A4A
# find . -name "*.ad*" -exec sed -i 's/Copyright (C) 2012-2014/Copyright (C) 2012-2015/g' {} \;
# find . -name "*.ad*" -execdir python ~/Ada/ChangeLicense.py {} \;
<code lang="python">

import argparse

<code lang="python">

parser = argparse.ArgumentParser()
parser.add_argument(« file », help= »the file to operate on »)
args = parser.parse_args()
print(args.file)

<code lang="python">

old = «  » »
———————————————————————–
— Ada for Automation —
— —
— Copyright (C) 2012-2015, Stephane LOS —
— —
— This library 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 library 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 library; if not, write to the —
— Free Software Foundation, Inc., 59 Temple Place – Suite 330, —
— Boston, MA 02111-1307, USA. —
— —
— As a special exception, if other files instantiate generics from —
— this unit, or you link this unit with other files to produce an —
— executable, this unit does not by itself cause the resulting —
— executable to be covered by the GNU General Public License. This —
— exception does not however invalidate any other reasons why the —
— executable file might be covered by the GNU Public License. —
———————————————————————–
«  » »

<code lang="python">

new = «  » »
——————————————————————————
— Ada for Automation —
— —
— Copyright (C) 2012-2016, Stephane LOS —
— —
— This library is free software; you can redistribute it and/or modify it —
— under terms of the GNU General Public License as published by the Free —
— Software Foundation; either version 3, or (at your option) any later —
— version. This library is distributed in the hope that it will be useful, —
— but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- —
— TABILITY or FITNESS FOR A PARTICULAR PURPOSE. —
— —
— As a special exception under Section 7 of GPL version 3, you are granted —
— additional permissions described in the GCC Runtime Library Exception, —
— version 3.1, as published by the Free Software Foundation. —
— —
— You should have received a copy of the GNU General Public License and —
— a copy of the GCC Runtime Library Exception along with this program; —
— see the files COPYING3 and COPYING.RUNTIME respectively. If not, see —
— . —
— —
——————————————————————————
«  » »

<code lang="python">

file_content =  »
with open(args.file) as infile:
for line in infile:
file_content = file_content + line

<code lang="python">

file_content = file_content.replace(old, new)

 
with open(args.file, 'w') as outfile:
outfile.write(file_content)

Et ça s’utilise presque pareil :

find . -name "*.ad*" -execdir python ~/Ada/ChangeLicense.py {} \;

Bon, je ne suis pas devenu un pro de Python avec ceci mais j’ai bien aimé l’expérience.

Ce script peut sans doute être utilisé pour d’autres cas en adaptant les chaînes.
Si ça peut vous servir je vous l’offre.

Cordialement,
Stéphane