8

我正在尝试为 git 创建一个预提交挂钩,用于编辑每个 .h 和 .m 文件顶部的注释。我想更改 x-code 添加的标题注释以包含应用程序版本和许可证信息。这在更改为新版本时会很有帮助。

这是我在 x-code 中创建文件时自动插入的文本:

//
//  myFile.h
//  myApp 
//
//  Created by Developer on 11/13/12.
//  Copyright (c) 2012 myCompany LLC. All rights reserved.
//

我想把钩子改成这样:

/*

myFile.h
myApp
Version: 1.0

myApp is free software: you can redistribute it and/or modify it under the terms 
of the GNU General Public License as published by the Free Software Foundation,
either version 2 of the License, or (at your option) any later version.

myApp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with myApp.
If not, see <http://www.gnu.org/licenses/>

Copyright 2012 myCompany. All rights reserved.


This notice may not be removed from this file.

*/

我在想我会有一个文本文件,其中包含我想要更改的标题文本。或者检测应用程序版本号何时更改。当使用新版本号和 git 更新此文件时,我会执行 git commit,然后它将使用新版本更新所有其他文件并更改任何新文件以具有正确的标题文本。这似乎很有用。

4

3 回答 3

2

使用涂抹/清洁过滤器(整章,最仔细地链接“关键字扩展”)?

于 2013-01-20T01:16:53.510 回答
0

在使用 perl inplace-edit '-i' 的等价物之前,我已经做过类似的事情,但是使用 perl 脚本而不是仅仅在命令行上,因为数据更大。

考虑到一些调整和测试,我已经完成了以下应该满足您需求的操作:D。

新的源头文件在__DATA__perl 脚本的部分中定义。

有一个说明如何通过环境变量传递 VERSION 和 COPY_YEAR。

自从我做了一些严肃的 perl 以来已经有一段时间了,但它适用于我的测试用例,它会创建备份,尽管我建议你先备份你的文件。

我希望它在某种程度上有所帮助。

示例用法:

$ perl add_header *.h *.m 

脚本:

use strict;
my $extension = '.orig';
local $/ = undef; # slurp
my $oldargv = undef;

my $replacement = <DATA>;
$replacement =~ s/{VERSION}/$ENV{VERSION} or '1.0.alpha'/e;
$replacement =~ s/{COPY_YEAR}/$ENV{COPY_YEAR} or '2013'/e;

LINE: while (<>) {
    if ( $ARGV ne $oldargv) {
        my $backup = undef;
        if ($extension !~ /\*/) {
            $backup = $ARGV . $extension;
        }
        else {
             ($backup = $extension) =~ s/\*/$ARGV/;
        }
        rename($ARGV, $backup);
        open(ARGVOUT, ">$ARGV");
        select(ARGVOUT);
        my $oldargv = $ARGV;
    }
    s!^//.*Copy.*?//$!$replacement!sm; # THE BUSINESS END.
}
continue {
    print;
}
select(STDOUT);
__DATA__
/**
 *  My New Header...
 *  Version info {VERSION} ]}
 *  made {COPY_YEAR}
 */
于 2013-01-20T01:05:30.333 回答
0

我曾经做过类似的事情,但从一个带注释的标签中获取版本号,这是我们在发布版本最终确定时创建的。构建过程将;

  • 使用指定标签签出代码
  • 从标签生成版本号(格式为“foo_version_1_2”-> 1.2),并将其写入文件。这是这样一个模板可以将其拉入以在应用程序中显示
  • 执行构建
  • 把它打包

您可以在构建期间轻松地运行脚本来填充版本号。我记得看过涂抹/清洁过滤器,但这似乎是一种令人讨厌的方法。

如果您尝试填充特定于文件的数字,上述内容将不太有用,但无论如何我都会质疑它的价值,因为您没有在 git 中对单个文件进行版本控制。你为什么要这么做?

于 2013-05-10T17:43:04.203 回答