2013-01-19 20 views
6

我想創建一個git的前提交鉤子,編輯我的.h和.m文件的頂部的評論。我想更改x代碼添加的標題註釋,以包含應用程序版本和許可證信息。這在更改爲新版本時會很有幫助。使用git鉤子來添加許可證和應用程序版本來評論在源文件的頂部

這是我創建的X代碼的文件,它會自動插入的文本:

// 
// 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,然後它將使用新版本更新所有其他文件,並更改任何新文件以獲得正確的標題文本。這似乎可能是有用的。

+5

爲什麼它需要成爲'git commit'的一部分,而不是作爲構建或其他腳本的一部分來完成的? – trojanfoe

+0

好吧,我想如果使用構建腳本完成它會更好,因爲那樣它就可以使用應用程序設置中的應用程序版本。我沒有被綁在git鉤子上。我認爲一個鉤子可能會更好,所以它不會在我每次構建時都運行,只有當我承諾生產分支時纔會運行。我只是對劇本有不同的看法。 –

+0

問題是,版本很少發生變化,當它發生時,需要由開發人員有意識地設置(例如,bugfix元素增加,次要版本增加或主要版本增加)。所以你可能想創建一個腳本並運行'set_version.sh X.Y.Z'作爲開發的一部分。 – trojanfoe

回答

0

我在使用perl的等同編輯'-i'之前做過類似的事情,但是使用perl腳本而不是僅僅在命令行上,因爲數據更大。

我已經做了以下應該適合您的需求,給予一些調整和測試:D。

新源標題在perl腳本的__DATA__部分中定義。

下面介紹瞭如何通過環境變量傳遞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} 
*/ 
0

我曾經做過類似的事情,但是從發佈版本完成時創建的帶註釋的標記中獲取版本號。構建過程會;

  • 退房使用指定的標籤
  • 生成從所述標籤的版本號的代碼(這是形式「foo_version_1_2」的 - > 1.2),並將其寫入到文件中。這是這樣一個模板,可以把它在顯示在應用
  • 執行構建
  • 包起來

你可以很輕鬆地運行腳本來填充,無論你在編譯的時候喜歡的版本號。我記得看過污跡/清潔過濾器,但它似乎是一個噁心的方法。

如果你想填充一個特定於文件的數字,那麼上面的內容就不太有用,但是由於你沒有在git中對單個文件進行版本管理,所以我會質疑這個值。你爲什麼要這麼做?

相關問題