Remplacer l'en-tête de copyright dans la hiérarchie profondément imbriquée

1

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. */
MLProgrammer-CiM
la source
Pour info cette question a 3 votes proches comme étant trop large. Veuillez fournir quelques détails supplémentaires ou des exemples de ce que vous avez ou de ce que vous voulez.
Raystafarian
Un peu plus de détails vous aideront à vous donner les bonnes étapes et outils à utiliser.
Alex S
[EditPlus] [1] présente une recherche et un remplacement multilignes intéressants. Il prend également en charge les expressions régulières. Peut-être que cela peut aider. stackoverflow.com/questions/268045/…
Alex S
Voir l'outil en-tête de copyright (utilise le rubis).
harrymc
@harrymc Merci! Ce n’est que la partie la plus facile du travail que: P
MLProgrammer-CiM

Réponses:

1

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:

[^\{\}\(\)\/]{0,200}(\/\*[*\s]*[Cc]opyright[^\n\r]*Börk Börk[a-zA-Z0-9\s\*,.]*\*\/)

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.

Peter
la source
1
Travaillé comme un charme, à titre de référence, je suis passé en revue chaque type de fichier en utilisant la racine du projet git ls-files | egrep '.*\.EXTENSION$' | xargs sublime et modifiez tout sur sublime; puis en utilisant git ls-files | egrep '.*\.EXTENSION$' | wc -l compter les entrées et comparer avec les changements.
MLProgrammer-CiM
1
Pour compter les changements en ligne de commande, git whatchanged -1 --format=oneline | wc -l
MLProgrammer-CiM
C'est pour être juste contre le dernier commit. Avant cela, vous pouvez utiliser git diff --name-only | wc -l
MLProgrammer-CiM
0

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.)

holgero
la source