2009-06-25 11 views
8

एक स्क्रिप्ट के लिए मैं सीवीएस का उपयोग करके बायसेक्शन लागू करने के लिए काम कर रहा हूं, मैं यह जानना चाहता हूं कि 'टाइमस्टैम्प' वर्तमान चेकआउट का क्या है। दूसरे शब्दों में, अगर मैं एक शाखा/टैग पर हूं, तो मैं उस शाखा/टैग में आने वाले अंतिम टाइमस्टैम्प को जानना चाहता हूं। अगर मैं सिर पर हूं, तो मैं सिर पर आखिरी टाइमस्टैम्प जानना चाहता हूं।सीवीएस चेकआउट पर नवीनतम प्रतिबद्धता दिनांक कैसे प्राप्त करें

मुझे पता है कि यह 100% गारंटी नहीं है, क्योंकि सीवीएस चेकआउट में अलग-अलग टाइमस्टैम्प/संशोधन/... पर अलग-अलग फाइलें हो सकती हैं, लेकिन मेरे द्वारा सही-सही मामलों में समाधान ठीक है।

भोलेपन से, मैंने सोचा था कि

cvs log -N | grep ^date: | sort | tail -n 1 | cut -d\; -f1 

यह करने के लिए जा रहा था, लेकिन यह यह इतिहास के लिए प्रतिबद्ध, सभी शाखाओं/टैग के लिए पूरे माध्यम से चला जाता पता चला है।

उत्तर

2

अलग-अलग टाइमस्टैम्प पर एक शाखा पर सीवीएस फाइलें, पिछली बार प्राप्त करने के लिए किसी भी फ़ाइल को चुनने की सटीकता - शाखा के लिए जानकारी शायद ही लायक है।

लेकिन, अगर कुछ फ़ाइल है तो अक्सर बेहतर हो सकता है जो अक्सर बदला जाएगा। उदाहरण के लिए, मेरे अड्डों में से एक में, version.h फ़ाइल है जो प्रत्येक संस्करण शिफ्ट (मामूली या प्रमुख) पर अपडेट की जाती है। इसका उपयोग वर्तमान संस्करण पर समय-जानकारी के लिए किया जा सकता है (फिर शाखा में सभी फाइलों के लिए सटीक नहीं है, लेकिन यह नीचे की रेखा देता है)।

इसलिए, यदि आप एक फ़ाइल है कि आप एक लब्बोलुआब यह मूल्य दे सकते हैं, पता

cvs log path/to/version.h -r branch/tag | grep ^date | sort | tail -1 

आप उस फ़ाइल के लिए पिछले टाइमस्टैम्प दे देंगे।


आप इस तरह के आधार के पूरी फ़ाइल सेट की गणना कर सकते हैं,

find /base/dir -type f | grep -v CVS > files.txt 

तो, आप कर सकते हैं पाश सीवीएस प्रत्येक फ़ाइल के लिए ऊपर कमान,

rm -f allFiles.txt 
for f in $(<files.txt); do cvs log $f ...etc... tail -1 >> allFiles.txt 
sort allFiles.txt | tail -1 

अंतिम पंक्ति इस प्रकार की सबसे हालिया प्रतिबद्धता के लिए आपको सही तिथि मिल जाएगी।
हां, आपको फ़ाइल नाम नहीं मिलेगा (जिसे कुछ और fu के साथ भी किया जा सकता है)

+0

यही एकमात्र चीज थी जो मैं भी साथ आ सकता था। अंत में, मैंने एक सीवी लॉग किया हालांकि, और सभी फाइलों के लिए पार्स किया। प्रत्येक फाइल पर इसे करने से धीमा हो जाएगा। –

+0

मुझे लगता है कि यह चिपचिपा तिथियों का समर्थन नहीं करता है, यानी यह अभी भी चुने गए व्यक्ति की बजाय सबसे हाल की तारीख देगा। – Penz

0

नवीनतम समय प्राप्त करने का एक तेज़ तरीका फ़ाइल बदल गया था (जो निक द्वारा दिए गए उत्तर पर बनाता है) है:

cvs log -bd `date +%Y-%m-%d` ChangeLog | grep ^date 

आप केवल तारीख प्राप्त करना चाहते हैं, का उपयोग करें:

cvs log -bd `date +%Y-%m-%d` ChangeLog | grep ^date | sed 's/date: \([^ ]*\).*/\1/' 

यह बी ध्वज जो डिफ़ॉल्ट शाखा और -d जो आप सीवीएस बताने के लिए आप केवल के बारे में परवाह की अनुमति देता है का उपयोग करता है का उपयोग करता है किसी दिए गए समय तक नवीनतम संस्करण। `अभिव्यक्ति तब वर्तमान तिथि को सीमा के रूप में पास करती है, जिससे आपको सबसे हालिया प्रतिबद्धता मिलती है।

gnuplot सीवीएस भंडार पर, -d ध्वज का उपयोग करके ~ 4s से ~ 1.5s तक निष्पादन समय कम हो जाता है।

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