2013-01-19 11 views
6

Próbuję utworzyć wstępny commit dla gita, który edytuje komentarze u góry każdego z moich plików .h i .m. Chciałbym zmienić komentarze nagłówka dodane przez kod X, aby uwzględnić wersję aplikacji i informacje o licencji. Byłoby to pomocne przy zmianie na nową wersję.Używanie git hook do dodawania licencji i wersji aplikacji do komentowania u góry plików źródłowych

To jest tekst, który zostanie automatycznie wstawiony kiedy utworzyć plik w X-Code:

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

chciałbym hak zmienić go na to:

/* 

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. 

*/ 

byłem myślenia że będę miał plik tekstowy z tekstem nagłówka, który chcę zmienić. Lub sprawdź, kiedy zmienia się numer wersji aplikacji. Kiedy ten plik zostanie zaktualizowany o nowy numer wersji i git, wykonam zatwierdzenie git, a następnie zaktualizuje wszystkie inne pliki nową wersją i zmieni wszystkie nowe pliki tak, aby miały poprawny tekst nagłówka. Wygląda na to, że może się przydać.

+5

Dlaczego musi być częścią 'git commit' zamiast być zrobionym jako część kompilacji lub jakiegoś innego skryptu? – trojanfoe

+0

Cóż, sądzę, że byłoby lepiej, gdyby zostało zrobione ze skryptem kompilacji, ponieważ wtedy mógł po prostu użyć wersji aplikacji z ustawień aplikacji. Nie jestem przywiązany do haka git. Myślałem, że haczyk może być lepszy, więc nie działa za każdym razem, gdy buduję, tylko wtedy, gdy zobowiązuję się do produkcji. Po prostu miałem trudny scenariusz. –

+0

Chodzi o to, że wersja zmienia się bardzo rzadko, a kiedy to robi, musi być świadomie ustawiona przez programistę (np. Zwiększenie elementu bugfix, niewielki wzrost wersji lub zwiększenie wersji głównej). Prawdopodobnie chcesz utworzyć skrypt i uruchomić 'set_version.sh X.Y.Z' w ramach programowania. – trojanfoe

Odpowiedz

0

Zrobiłem podobny przed użyciem odpowiednik perl inplace-edit "-i", ale przy użyciu skryptu perl zamiast tylko w wierszu polecenia, ponieważ dane są większe.

Zrobiłem następujące rzeczy, które powinny zaspokoić twoje potrzeby, biorąc pod uwagę pewne poprawki i testy: D.

Nowy nagłówek źródłowy jest zdefiniowany w sekcji __DATA__ skryptu perl.

Oto ilustracja przedstawiająca sposób przekazywania zmiennej VERSION i COPY_YEAR za pomocą zmiennych środowiskowych.

Minęło trochę czasu, odkąd zrobiłem poważny perl, ale działa on na moich testach, tworzy kopie zapasowe, chociaż proponuję najpierw wykonać kopię zapasową plików.

Mam nadzieję, że to pomoże w pewien sposób.

Przykład użycia:

$ perl add_header *.h *.m 

scenariusz:

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

Zastosowanie smudge/clean filters (pełne rozdział związane słowo "Expansion" najdokładniej)?

+0

Miałem nadzieję, że ktoś miał dobry przykład tego działania. – ThorSummoner

0

Kiedyś zrobiłem coś podobnego, ale biorąc numer wersji z opatrzonego adnotacjami tagu, który stworzyliśmy po sfinalizowaniu wersji. Proces budowania byłby;

  • Zapoznaj się z kodu przy użyciu określonego znacznika
  • wygenerować numer wersji ze znacznika (to było w postaci „foo_version_1_2” -> 1.2) i zapisać go do pliku. Był to więc szablon mógłby pociągnąć go do wyświetlania w aplikacji
  • Execute Build
  • Package to się

Mogłeś równie łatwo uruchomić skrypt, aby wypełnić numer wersji gdziekolwiek chcesz w czasie kompilacji . Pamiętam, że patrzyłem na smużenie/czyste filtry, ale wydawało się to podejrzane.

Powyższe może być mniej przydatne, jeśli próbujesz wypełnić konkretny numer pliku, ale wtedy i tak kwestionowałbym jego wartość, ponieważ nie zmieniasz pojedynczych plików w git. Dlaczego próbujesz to zrobić?

Powiązane problemy