Substitua o cabeçalho de direitos autorais em uma hierarquia profundamente aninhada

Substitua o cabeçalho de direitos autorais em uma hierarquia profundamente aninhada

Nosso projeto é de código aberto e preciso substituir todos os nossos cabeçalhos de direitos autorais pelas nossas novas licenças. O projeto consiste em cerca de 1.500 arquivos C++/Obj-C/Java em uma hierarquia de pastas aninhadas.

Um cabeçalho abrange de 1 a 5 linhas com formatação diferente, portanto, não é garantido que uma regex o encontre em todas elas.

Que abordagem você adotaria aqui?

Exemplo:

Arquivo 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

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

}

Arquivo 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

Nova licença a ser aplicada a todos os arquivos:

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

Responder1

Se os cabeçalhos são tão diferentes que você não pode ter certeza de que mesmo com um regex você capturará todos eles, então você precisa da ferramenta mais forte que existe: Regex. Basta verificar todos os arquivos e fazer uma substituição baseada em expressão regular em todos os arquivos nas subpastas. Em seguida, verifique quais arquivos não foram modificados, dê uma olhada em alguns de seus cabeçalhos e substitua os cabeçalhos por um regex ajustado. Repita até terminar. Feito isso, faça um único check-in.

Este é o único caminho.

Um regex descartável simples e feio que funciona com 2 dos 3 arquivos de exemplo é o seguinte:

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

Você pode testar aqui:https://regex101.com/

Ele não corresponderá ao segundo arquivo porque esse arquivo está mal formatado e o comentário dos direitos autorais não termina e, em vez disso, inclui acidentalmente a instrução de importação também.

Existem muitas ferramentas que substituem regex em vários arquivos, basta usar qualquer uma delas.

Responder2

Uma vez usei ohttp://code.mycila.com/license-maven-plugin/para adicionar um cabeçalho de licença aos meus arquivos de origem. (Não precisei remover uma licença existente, mas a documentação do plugin diz que ele também pode remover cabeçalhos.)

informação relacionada