Reemplazar el encabezado de derechos de autor en una jerarquía profundamente anidada

Reemplazar el encabezado de derechos de autor en una jerarquía profundamente anidada

Nuestro proyecto es de código abierto y necesito sustituir todos nuestros encabezados de derechos de autor por los de nuestra nueva licencia. El proyecto consta de aproximadamente 1500 archivos C++/Obj-C/Java en una jerarquía de carpetas anidadas.

Un encabezado abarca de 1 a 5 líneas con diferentes formatos, por lo que no es seguro que una expresión regular lo encuentre en todas ellas.

¿Qué enfoque adoptaría aquí?

Ejemplo:

Archivo 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

Archivo 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);

}

Archivo 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

Nueva licencia que se aplicará a todos los archivos:

/* 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. */

Respuesta1

Si los encabezados son tan diferentes que no puedes estar seguro de que incluso con una expresión regular podrás capturarlos todos, entonces necesitas la herramienta más potente que existe: Regex. Simplemente revise todos los archivos, realice un reemplazo basado en expresiones regulares en todos los archivos en las subcarpetas. Luego verifique qué archivos no se han modificado, eche un vistazo a algunos de sus encabezados, reemplácelos con una expresión regular ajustada. Repita hasta que haya terminado. Una vez hecho esto, haz un único check-in.

Esta es la única manera.

Una expresión regular simple y fea que funciona con 2 de los 3 archivos de ejemplo es la siguiente:

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

Puedes probarlo aquí:https://regex101.com/

No coincidirá con el segundo archivo porque ese archivo está mal formateado y el comentario de derechos de autor no termina y en su lugar incluye accidentalmente también la declaración de importación.

Hay muchas herramientas que reemplazan expresiones regulares en varios archivos, simplemente use cualquiera de ellas.

Respuesta2

Una vez usé elhttp://code.mycila.com/license-maven-plugin/para agregar un encabezado de licencia a mis archivos fuente. (No necesitaba eliminar una licencia existente, pero la documentación del complemento dice que también puede eliminar encabezados).

información relacionada