2013-01-19 10 views
6

मैं गिट के लिए प्री-प्रतिबद्ध हुक बनाने की कोशिश कर रहा हूं जो मेरी प्रत्येक .h और .m फ़ाइलों के शीर्ष पर टिप्पणियां संपादित करता है। मैं ऐप संस्करण और लाइसेंस जानकारी शामिल करने के लिए एक्स-कोड द्वारा जोड़े गए हेडर टिप्पणियों को बदलना चाहता हूं। एक नए संस्करण में बदलते समय यह सहायक होगा।स्रोत फ़ाइलों के शीर्ष पर टिप्पणी करने के लिए लाइसेंस और ऐप संस्करण जोड़ने के लिए गिट हुक का उपयोग

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

*/ 

मैं सोच रहा था

यह पाठ कि स्वचालित रूप से जब मैं एक्स कोड में एक फ़ाइल बनाने डाला जाता है है कि मेरे पास हेडर टेक्स्ट के साथ एक टेक्स्ट फ़ाइल होगी जिसे मैं बदलना चाहता हूं। या पता लगाएं कि ऐप संस्करण संख्या कब बदलती है। जब यह फ़ाइल किसी नए संस्करण संख्या और गिट के साथ अपडेट की जाती है तो मैं एक गिट प्रतिबद्ध करता हूं, तो यह सभी अन्य फ़ाइलों को नए संस्करण के साथ अपडेट करेगा और सही हेडर टेक्स्ट रखने के लिए किसी भी नई फाइल को बदल देगा। ऐसा लगता है कि यह उपयोगी हो सकता है।

+5

बिल्ड या कुछ अन्य स्क्रिप्ट के हिस्से के रूप में किए जाने के बजाय इसे 'गिट प्रतिबद्ध' का हिस्सा क्यों होना चाहिए? – trojanfoe

+0

अच्छा, मुझे लगता है कि बिल्ड स्क्रिप्ट के साथ किया गया यह बेहतर होगा, क्योंकि तब यह ऐप सेटिंग्स से ऐप संस्करण का उपयोग कर सकता है। मैं एक गिट हुक से बंधे नहीं हूँ। मैं सोच रहा था कि एक हुक बेहतर हो सकता है, इसलिए जब भी मैं उत्पादन शाखा में जाता हूं, तब भी यह हर बार नहीं चलता है। मैं बस स्क्रिप्ट के साथ difficutly था। –

+0

बात यह है कि संस्करण बहुत बार बदलता है, और जब इसे डेवलपर द्वारा जानबूझकर सेट करने की आवश्यकता होती है (यानी बगफिक्स तत्व वृद्धि, मामूली संस्करण वृद्धि या प्रमुख संस्करण वृद्धि)। तो शायद आप एक स्क्रिप्ट बनाना चाहते हैं और विकास के हिस्से के रूप में 'set_version.sh X.Y.Z' चलाएं। – trojanfoe

उत्तर

0

मैंने एक perl inplace-edit '-i' के बराबर उपयोग करने से पहले ऐसा किया है, लेकिन कमांड लाइन के बजाय एक पर्ल स्क्रिप्ट का उपयोग कर डेटा के रूप में बड़ा है।

मैंने निम्नलिखित कुछ किया है जो आपकी जरूरतों को पूरा करते हैं, कुछ tweaking और परीक्षण दिया: डी।

नया स्रोत शीर्षलेख perl स्क्रिप्ट के __DATA__ अनुभाग में परिभाषित किया गया है।

पर्यावरण के चर के माध्यम से आप संस्करण और COPY_YEAR को कैसे पारित कर सकते हैं इसका एक उदाहरण है।

यह थोड़ी देर के बाद से मैंने कुछ गंभीर perl किया है लेकिन यह मेरे testcases पर काम करता है, यह बैकअप बनाता है हालांकि मैं आपको पहले अपनी फाइलों का बैक अप लेने का सुझाव देता हूं।

मुझे उम्मीद है कि यह किसी भी तरह से मदद करता है।

उदाहरण उपयोग:

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

उपयोग smudge/clean filters (पूर्ण अध्याय, लिंक किए गए "कीवर्ड विस्तार" सबसे ध्यान से)?

+0

मुझे आशा थी कि किसी के पास कार्रवाई में इसका अच्छा उदाहरण होगा। – ThorSummoner

0

मैंने एक बार ऐसा कुछ किया लेकिन एक एनोटेटेड टैग से संस्करण संख्या लेना, जिसे हमने रिलीज़ संस्करण को अंतिम रूप दिया था। निर्माण प्रक्रिया होगी;

  • चेक बाहर एक निर्दिष्ट टैग
  • टैग से एक संस्करण संख्या उत्पन्न का उपयोग कर कोड (यह फार्म "foo_version_1_2" का था -> 1.2), और यह एक फाइल करने के लिए लिखें। यह इसलिए था एक टेम्पलेट एप्लिकेशन
  • निर्माण निष्पादित
  • पैकेज में प्रदर्शन के लिए इसे खींच सकता है इसे

तुम बस के रूप में आसानी संस्करण संख्या भी आप निर्माण के समय के दौरान की तरह पॉप्युलेट करने के लिए स्क्रिप्ट को चलाने सकता है । मुझे याद है कि धुंध/साफ फिल्टर देख रहे हैं, लेकिन यह एक अजीब दृष्टिकोण लग रहा था।

यदि आप फ़ाइल-विशिष्ट संख्या को पॉप्युलेट करने का प्रयास कर रहे हैं, तो उपर्युक्त कम उपयोगी होगा, लेकिन फिर भी मैं इसके मान पर सवाल उठाऊंगा क्योंकि आप गिट में संस्करण व्यक्तिगत फाइल नहीं करते हैं। आप ऐसा करने की कोशिश क्यों कर रहे हैं?

संबंधित मुद्दे

 संबंधित मुद्दे