Notre projet est open source et je dois substituer tous nos en-têtes de droits d'auteur à ceux de notre nouvelle licence. Le projet comprend environ 1 500 fichiers C ++ / Obj-C / Java dans une hiérarchie de dossiers imbriquée.
Un en-tête s'étend sur une à cinq lignes avec une mise en forme différente. Par conséquent, une expression rationnelle n'est pas assurée de la trouver dans chacune d'elles.
Quelle approche prendriez-vous ici?
Exemple:
Fichier C ++:
/*******************************************************************************
* Copyright 1996: Börk Börk Inc. All Rights
* Reserved. Proprietary and Confidential information of BOBO. Disclosure,
* Use, or Reproduction without written authorization of BOBO is prohibited.
*******************************************************************************/
#ifndef Things_cpp
#define Things_cpp
#include <LibOne.hpp>
#include <LibTwo.hpp>
Namespacington::ClassName::HereBeMethod(void)
{
}
#endif
Fichier Java:
package com.bork.bork.boooork;
/*******************************************************
* Copyright 1996: Börk Börk Inc. All Rights Reserved.
* Proprietary and Confidential information of BOBO.
* Disclosure, Use, or Reproduction without written
* authorization of BOBO is prohibited.
*******************************************************
import java.util.List;
/**
* <p>
* Callback interface/protocol for a proxy factory.
* </p>
*/
@SuppressWarnings("all")
public interface ProxyFactorize
{
/**
* <p>
* Do the thing
* </p>
* @param bork Spices
* @param borkbork Condiments
*/
void apply(double bork, double borkbork);
}
Fichier Obj-C:
/*******************************************************
* Copyright 1996: Börk Börk Inc.
* All Rights Reserved.
* Proprietary and Confidential information of BOBO.
* Disclosure, Use, or Reproduction without written
* authorization of BOBO is prohibited.
********************************************************/
#import <Bork/Booork.h>
@class Biorjk;
/**
* Bork bork bork booooork
*
* @warning Bork?
*
* @warning Bork
*
*/
@interface Biorjk : Borkburk
@end
Nouvelle licence à appliquer à tous les fichiers:
/* Copyright 2015 Bork Bork
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
macos
find-and-replace
MLProgrammer-CiM
la source
la source
Réponses:
Si les en-têtes sont si différents, vous ne pouvez pas être sûr que, même avec une regex, vous les attraperez tous, alors vous avez besoin de l'outil le plus puissant qui existe: Regex. Il suffit de récupérer tous les fichiers et de faire une expression régulière en remplaçant tous les fichiers des sous-dossiers. Puis, vérifiez quels fichiers n’ont pas été modifiés, examinez certains de leurs en-têtes, remplacez-les par un regex ajusté. Répétez jusqu'à ce que vous avez terminé. Une fois cela fait, effectuez un seul enregistrement.
C'est la seule façon.
Une simple regex jetable qui fonctionne avec 2 des 3 fichiers d'exemple est la suivante:
Vous pouvez le tester ici: https://regex101.com/
Il ne correspondra pas au second fichier car ce fichier est mal formaté et le commentaire du copyright ne se termine pas mais inclut accidentellement la déclaration d'importation.
Il existe de nombreux outils qui permettent à une expression rationnelle de remplacer plusieurs fichiers, il suffit d'utiliser l'un d'entre eux.
la source
git ls-files | egrep '.*\.EXTENSION$' | xargs sublime
et modifiez tout sur sublime; puis en utilisantgit ls-files | egrep '.*\.EXTENSION$' | wc -l
compter les entrées et comparer avec les changements.git whatchanged -1 --format=oneline | wc -l
git diff --name-only | wc -l
J'ai déjà utilisé le http://code.mycila.com/license-maven-plugin/ ajouter un en-tête de licence à mes fichiers source. (Je n'ai pas eu besoin de supprimer une licence existante, mais la documentation du plug-in indique qu'il peut également supprimer les en-têtes.)
la source