Заменить заголовок об авторских правах в глубоко вложенной иерархии

Заменить заголовок об авторских правах в глубоко вложенной иерархии

Наш проект с открытым исходным кодом, и мне нужно заменить все наши заголовки авторских прав на наши новые лицензии. Проект состоит из около 1500 файлов C++/Obj-C/Java во вложенной иерархии папок.

Заголовок занимает от 1 до 5 строк с различным форматированием, поэтому регулярное выражение не гарантирует, что найдет его во всех из них.

Какой подход вы бы здесь выбрали?

Пример:

Файл 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

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

}

Файл 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

Новая лицензия будет применена ко всем файлам:

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

решение1

Если заголовки настолько различаются, что вы не можете быть уверены, что даже с регулярным выражением вы поймаете их все, то вам нужен самый мощный инструмент из всех: Regex. Просто извлеките все файлы, выполните замену на основе регулярного выражения во всех файлах в подпапках. Затем проверьте, какие файлы не были изменены, посмотрите на некоторые из их заголовков, замените заголовки в них скорректированным регулярным выражением. Повторяйте, пока не закончите. После этого сделайте одну проверку.

Это единственный путь.

Простое уродливое одноразовое регулярное выражение, которое работает с 2 из 3 файлов-примеров, выглядит следующим образом:

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

Вы можете протестировать это здесь:https://regex101.com/

Он не будет соответствовать второму файлу, поскольку тот плохо отформатирован, а комментарий об авторских правах не заканчивается и вместо этого случайно включает в себя также оператор импорта.

Существует множество инструментов, которые выполняют замену регулярных выражений в нескольких файлах, просто используйте любой из них.

решение2

Я когда-то использовалhttp://code.mycila.com/license-maven-plugin/для добавления заголовка лицензии в мои исходные файлы. (Мне не нужно было удалять существующую лицензию, но в документации плагина говорится, что он также может удалять заголовки.)

Связанный контент