Ersetzen Sie den Copyright-Header in einer tief verschachtelten Hierarchie

Ersetzen Sie den Copyright-Header in einer tief verschachtelten Hierarchie

Unser Projekt ist Open Source und ich muss alle unsere Copyright-Header durch unsere neuen Lizenzen ersetzen. Das Projekt besteht aus etwa 1500 C++/Obj-C/Java-Dateien in einer verschachtelten Ordnerhierarchie.

Eine Kopfzeile umfasst 1 bis 5 Zeilen mit unterschiedlicher Formatierung. Daher ist nicht gewährleistet, dass ein regulärer Ausdruck in allen Zeilen gefunden wird.

Welchen Ansatz würden Sie hier verfolgen?

Beispiel:

C++-Datei:

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

Java-Datei:

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

}

Obj-C-Datei:

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

Neue Lizenz, die auf alle Dateien angewendet werden soll:

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

Antwort1

Wenn die Header so unterschiedlich sind, dass Sie nicht sicher sein können, dass Sie sie alle auch mit einem regulären Ausdruck erfassen, benötigen Sie das stärkste Tool überhaupt: Regex. Checken Sie einfach alle Dateien aus und führen Sie einen auf regulären Ausdrücken basierenden Ersetzungsvorgang für alle Dateien in Unterordnern durch. Überprüfen Sie dann, welche Dateien nicht geändert wurden, sehen Sie sich einige ihrer Header an und ersetzen Sie die Header in diesen durch einen angepassten regulären Ausdruck. Wiederholen Sie dies, bis Sie fertig sind. Wenn Sie fertig sind, führen Sie einen einmaligen Check-in durch.

Das ist der einzige Weg.

Ein einfacher, hässlicher Wegwerf-Regex, der mit zwei der drei Beispieldateien funktioniert, lautet wie folgt:

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

Hier könnt ihr es testen:https://regex101.com/

Es stimmt nicht mit der zweiten Datei überein, da diese schlecht formatiert ist und der Copyright-Kommentar nicht endet, sondern versehentlich auch die Importanweisung enthält.

Es gibt zahlreiche Tools, die Regex-Ersetzungen in mehreren Dateien durchführen. Verwenden Sie einfach eines davon.

Antwort2

Ich habe einmal diehttp://code.mycila.com/license-maven-plugin/um meinen Quelldateien einen Lizenzheader hinzuzufügen. (Ich musste keine vorhandene Lizenz entfernen, aber in der Plugin-Dokumentation steht, dass es auch Header entfernen kann.)

verwandte Informationen