2008-10-02 12 views
7

पर्सफोर्स लोगों को अपरिवर्तित फ़ाइलों में जांचने की अनुमति देता है। क्यों कोई संस्करण नियंत्रण प्रणाली यह मेरे बाहर है, लेकिन यह एक और सवाल के लिए एक विषय है। मैं एक ट्रिगर बनाना चाहता हूं जो अपरिवर्तित फ़ाइलों को जमा करने से इनकार कर देगा। हालांकि, मुझे पर्सफोर्स ट्रिगर्स के साथ कोई अनुभव नहीं है। मैंने जो पढ़ा है, उससे मैं अनुमान लगा रहा हूं कि यह "चेंज-कंटेंट" ट्रिगर होगा क्योंकि फाइलों को सबमिट किए जाने वाले संबंधित प्रमुख संशोधनों के खिलाफ अलग-अलग होना चाहिए। मुझे आने वाली फाइलों पर फिर से प्रयास करना होगा और सुनिश्चित करना होगा कि वे वास्तव में बदल गए हैं। समस्या यह है कि, मुझे नहीं पता कि इसके बारे में कैसे जाना है।अपरिवर्तित फ़ाइलों को जमा करने से इनकार करने के लिए लागू करें?

क्या पर्सफोर्स ट्रिगर अनुभव वाला कोई भी व्यक्ति उदाहरण दे सकता है या कम से कम मुझे सही दिशा में इंगित कर सकता है?

+2

हाय, मैं पिछले साल से आपके प्रश्न में ठोकर खाई। बस एक टिप्पणी: ऐसा लगता है कि यह एक फ़ाइल के "खाली डेल्टा" (यानी फाइल का अपरिवर्तित संस्करण) बनाने के लिए उपयोगी हो सकता है ताकि पी 4 को यह माना जा सके कि शाखा पर एक विलय integ कमांड के माध्यम से हुआ है (भले ही आपने कुछ भी विलय नहीं किया और अपनी शाखा संस्करण को जिस तरह से रखा था), ताकि शाखा से शाखा में विलय करने के लिए इंटीग्र कमांड के बाद के उपयोग को फ़ाइल पर एक संघर्ष का पता नहीं लगेगा - क्योंकि पी 4 विश्वास करेगा कि यह था अतीत में विलय अगर मैं गलत हूं तो मुझे सही करें लेकिन बुनियादी प्रशिक्षण पाठ्यक्रम से मैं यही समझता हूं। –

उत्तर

1

यदि आप पर्सफोर्स में ट्रिगर्स टेबल देखते हैं, तो आप देखेंगे कि ट्रिगर कुछ भी नहीं हैं, लेकिन कुछ प्रकार की घटना होने पर स्क्रिप्ट्स आती हैं। आपके मामले में, परिवर्तन-सामग्री ईवेंट ट्रिगर किया गया है।

आपके पास पर्सफोर्स के साथ बातचीत करने वाली स्क्रिप्ट लिखने के कई विकल्प हैं। Perforce downloads page में व्यापक रूप से उपयोग की जाने वाली भाषाओं के लिए पुस्तकालय और मॉड्यूल हैं। इनमें से कोई भी आपकी मदद करेगा और आपको जो करना है उसे बहुत सरल बना देगा। इसके अलावा, Perforce Documentation page देखें और व्यवस्थापक की मार्गदर्शिका डाउनलोड करें। यह ट्रिगर, आदि को कैसे समझाएगा,

असल में, आपको एक स्क्रिप्ट लिखनी होगी जो सबमिट की जा रही परिवर्तन सूची से जानकारी प्राप्त करेगी और इसमें प्रत्येक फ़ाइल के लिए "diff" कमांड चलाएगा सर्वर। अगर आपको कोई फ़ाइल नहीं मिली है जो बदली नहीं है, तो आपको सबमिशन को अमान्य करने की आवश्यकता है।

आपके पसंदीदा भाषा और प्रशासक मार्गदर्शिका पर पर्सफोर्स मॉड्यूल आपको आवश्यक सभी उत्तर देगा। यदि उपयोगकर्ता सिर्फ उदासीनता की वजह से अपरिवर्तित फ़ाइलों जाँच कर रहा है जांच करने के लिए

SubmitOptions: Flags to change submit behaviour. 

      submitunchanged   All open files are submitted 
      submitunchanged+reopen (default). 

      revertunchanged   Files that have content or type 
      revertunchanged+reopen changes are submitted. Unchanged 
             files are reverted. 

      leaveunchanged   Files that have content or type 
      leaveunchanged+reopen  changes are submitted. Unchanged 
             files are moved to the default 
             changelist. 

          +reopen  appended to the submit option flag 
             will cause submitted files to be 
             reopened on the default changelist. 

यह हो सकता है एक अवसर:

5

जबरदस्ती की हाल ही में संस्करण में एक ग्राहक की स्थापना जो अपरिवर्तित फ़ाइलें सबमिट रोकता अनुमति देते हैं।

संपादित करें:

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

विवरणों को पूरा करने के लिए आपको Perforce's documentation पर देखने की आवश्यकता होगी, लेकिन आपको एक परिवर्तन-सामग्री ट्रिगर की आवश्यकता होगी।

आप शायद% उपयोगकर्ता% में%% के साथ-साथ% परिवर्तन% और संभवतः अन्य चरों में भी गुजरना चाहते हैं, ताकि आप महंगी परिचालन को केवल समस्या उपयोगकर्ता को प्रतिबंधित कर सकें।

1

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

p4 diff //depot/path/[email protected]=<change> 

परिवर्तन सामग्री ट्रिगर में करने के लिए इसी @ = (जहां परिवर्तन परिवर्तन सूची ट्रिगर करने के लिए भेजा संख्या है) आप की सामग्री मिल जाएगा उपयोग कर सकते हैं फाइलें जो जमा की गई थीं।आप देख रहे हैं सर्वर संस्करण के खिलाफ जांच करने के लिए एक तरह से करने के लिए, आप की तरह

p4 diff -sr //[email protected]=<change> 

-sr आदेश कुछ करने के लिए है कि खोलने के लिए और वर्तमान डिपो सामग्री के रूप में ही कर रहे हैं फ़ाइलों पर रिपोर्ट करेंगे सक्षम हो सकता है। चूंकि फाइलें अभी तक प्रतिबद्ध नहीं हुई हैं, इसलिए मुझे लगता है कि आपको वास्तव में उन फ़ाइलों की एक सूची मिल जाएगी जिनकी सामग्री सर्वर पर स्थानांतरित की गई है, वे डिपो में वर्तमान शीर्ष संशोधन के समान हैं। यदि पी 4 diff -sr एक जैसी फाइलें लौटाता है, तो एक गैर-शून्य निकास कोड लौटाएं और सबमिट रोक दिया जाएगा और उपयोगकर्ता को अपनी अपरिवर्तित फ़ाइलों को मैन्युअल रूप से वापस करना होगा।

मुझे नहीं लगता कि आप वास्तव में चेंजलिस्ट की सामग्री को संशोधित करके संशोधित करना चाहते हैं। यह बहुत खतरनाक लगता है।

ध्यान दें कि आप किसी भी भाषा में अपना ट्रिगर लिख सकते हैं जो समझ में आता है (पिछले पोस्टर के अनुसार)। मुझे लगता है कि इस तरह का ट्रिगर हालांकि भारी हेवीवेट होने जा रहा है। एक डेवलपर चरण में लाइन बनाने के लिए आप सभी उपयोगकर्ताओं के लिए सबमिट की गई सभी सामग्रियों पर अनिवार्य रूप से एक अंतर लागू करेंगे। शायद यह भुगतान करने के लिए एक उचित कीमत है, लेकिन उपयोगकर्ताओं की संख्या और उनके परिवर्तनीय (और फाइलों) के आकार के आधार पर, इस प्रकार के ट्रिगर को चलाने में लंबा समय लग सकता है।

+0

मैं लागत को कम करने का आदेश देता हूं, आप% उपयोगकर्ता% को ट्रिगर स्क्रिप्ट में पास कर सकते हैं, और फिर% उपयोगकर्ता% समस्या उपयोगकर्ता से मेल खाता है तो केवल महंगा परिवर्तन मूल्यांकन करें। –

+0

यह "क्रम में" होना चाहिए था "मैं आदेश नहीं"। –

+0

हाँ, अच्छा बिंदु। इससे मदद मिलेगी यदि आप इसे किसी उपयोगकर्ता या उपयोगकर्ताओं के विशेष सेट तक सीमित करना चाहते हैं। – Mark

1

एक ट्रिगर का उपयोग करने के बजाय, आप अपनी कार्यक्षेत्रों को संपादित कर सकते हैं (माना जाता है कि आपके पास सही अनुमतियां हैं) जो इसे प्रस्तुत करने वाली एक सबमिशन रणनीति के लिए डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से संपादित कर सकती हैं। डिफ़ॉल्ट रूप से (फिर से मुझे नहीं पता क्यों) peforce अपरिवर्तित होने पर भी सभी चयनित फ़ाइलों को सबमिट करेगा, लेकिन इस व्यवहार को बदलना संभव है। अपने वर्कस्पेस खोलें, और सबमिट ऑप्शन ड्रॉप डाउन 'रीवर्टंचंग' पर सेट करें जो चेंजलिस्ट में किसी भी फाइल को वापस लाएगा जो बदले नहीं गए हैं, या 'छोड़ने वाले' हैं जो उन्हें चेक आउट रखेंगे लेकिन उन्हें सबमिट नहीं करेंगे।

यह एक व्यक्तिगत चेंजलिस्ट सबमिट पर भी करना संभव है यदि वह सिर्फ ऑन सबमिट ड्रॉपडाउन को देखना चाहता है।

हमें हमारे पर्यावरण में यह समस्या थी, लेकिन एक बार जब मैंने अपराधियों को बताया कि क्या हो रहा था और बिना किसी समस्या के डिफ़ॉल्ट व्यवहार को बदलना कितना आसान था।

0

नीचे लिपि लिपि लिनक्स में एक पर्ल स्क्रिप्ट का उपयोग करके किया जाता है। मुझे यकीन है कि आप इसे विंडोज़ में जरूरी और पर्ल के अलावा एक स्क्रिप्टिंग भाषा का उपयोग कर अनुकूलित कर सकते हैं।

व्यवस्थापक उपयोगकर्ता के रूप में, p4 triggers टाइप करें।

अपनी लिपि की Triggers: लाइन के तहत इसे जोड़ें।

Trigger_name change-content //... "/<path_to_trigger_script>/<script_name> %changelist% %serverhost% %serverport% %user%"

Trigger_name मनमाना है। //... का अर्थ है आपकी सभी संस्करण वाली फाइलें, लेकिन आप इसे आवश्यकतानुसार संशोधित कर सकते हैं। % से घिरा कुछ भी एक विशेष चर नाम है जो कि पर्सफोर्स के लिए अद्वितीय है, और ये आपकी स्क्रिप्ट के लिए तर्क होंगे। ये सब आपको चाहिए चाहिए। ध्यान दें कि <> से घिरा कुछ भी परिवर्तनीय है और आपके पर्यावरण पर निर्भर करता है।

अब, स्क्रिप्ट के लिए ही। मैंने यही लिखा है।

#!/usr/bin/perl 

# ----- CHECK 1 : Make sure files NOT identical 

# get variables passed in through triggers call 'p4 triggers' 
$ChangeNum = $ARGV[0]; #change number 
$Server = $ARGV[1]; 
$Port = $ARGV[2]; 
$User = $ARGV[3]; 
$p4 = "<path_to_p4_exec>/p4 -p $Port "; 
# get list of files opened under the submitted changelist 
@files = `$p4 opened -a -c $ChangeNum | cut -f1 -d"#"`; 

# go through each file and compare to predecessor 
# although workspace should be configured to not submit unchanged files 
# this is an additional check 
foreach $file (@files) 
{ 
    chomp($file); 
    # get sum of depot file, the #head version 
    $depotSum = `$p4 print -q $file\#head | sum`; 
    # get sum of the recently submitted file, use @=$ChangeNum to do this 
    $clientSum = `$p4 print -q $file\@=$ChangeNum | sum`; 

    chomp $depotSum; 
    chomp $clientSum; 
    # if 2 sums are same, issue error 
    if ($depotSum eq $clientSum) 
    { 
     # make sure this file is opened for edit and not for add/delete 
     if (`$p4 describe $ChangeNum | grep "edit"`) 
     { 
     printf "\nFile $file identical to predecessor!"; 
     exit(1); 
     } 
    } 

} 
0

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

0

अपने triggers तालिका को यह करें:

Triggers: 
    myTrigger form-in client "sed -i -e s/submitunchanged/leaveunchanged/ %formfile%" 

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

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