1

Наш проект с открытым исходным кодом, и мне нужно заменить все наши заголовки авторских прав на наши новые лицензии. Проект состоит из около 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. */

2 ответа2

1

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

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

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

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

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .