2009-05-15 16 views
38

मैं एक स्क्रिप्ट लिख रहा हूं जो उपयोगकर्ता द्वारा प्रदान किए गए नाम के आधार पर भंडार में एक नई परियोजना को जोड़ देगा। इसमें से एक हिस्सा यह जांचता है कि उसी नाम वाला यूआरएल पहले से ही भंडार पर मौजूद नहीं है।जांचें कि एक svn रिपॉजिटरी यूआरएल मौजूद नहीं है

भंडार, हमारी टीम के सभी परियोजनाओं

https://developernetwork.repo.net/svn/Projects/

मान लीजिए कि उपयोगकर्ता परियोजना "कैलक्यूलेटर" कॉल करना चाहता है और स्क्रिप्ट चलाता है कि चलो में संग्रहीत हैं। इस मामले में, हम यह सुनिश्चित करें कि निम्नलिखित पहले से ही भंडार

https://developernetwork.repo.net/svn/Projects/Calculator/

वहाँ एक SVN आदेश जो मुझे लगता है कि पूरा करने के लिए उपयोग कर सकते हैं है में मौजूद नहीं है की जरूरत है? दुर्भाग्य से मैं एक उपयुक्त कमांड नहीं देख सकता जिसे मैं svn प्रलेखन (http://svnbook.red-bean.com/en/1.0/svn-book.html) में उपयोग कर सकता हूं।

+3

प्रलेखन आप लिंक SVN 1.0 के लिए, जिस तरह से बाहर की तारीख से है:

संभावित भविष्य के पाठकों के लिए, मैं इस समाधान का उपयोग करें। नवीनतम दस्तावेज़ों के लिए http://svnbook.red-bean.com/nightly/en/index.html पढ़ें। –

उत्तर

37

तुम बस का उपयोग कर सकते

svn ls https://developernetwork.repo.net/svn/Projects/Calculator/ 

यह आपको पता चलेगा कि भंडार (निर्देशिका) मौजूद हैं या नहीं।

अद्यतन

कई फाइलों के साथ निर्देशिकाओं के लिए उपयोग करें:

svn ls http://server/svn/foo --depth empty 
+0

यह काम करता है। कि संशोधन में 'https://developernetwork.repo.net/svn/Projects/Calculator/ ' न के बराबर यूआरएल: यदि निर्देशिका मौजूद नहीं है मैं निम्नलिखित त्रुटि मिलती है: SVN। यह एक अच्छी पर्याप्त खोज स्ट्रिंग होना चाहिए। बस ब्याज से बाहर, क्या स्क्रिप्ट के लिए "उस संशोधन में मौजूद नहीं" के लिए टेक्स्ट आउटपुट खोजने से परिणामों का विश्लेषण करने का एक बेहतर तरीका है? – Andy

+0

जैसा कि अन्य टिप्पणी में सुझाया गया है, 'अस्तित्वहीन' की तलाश करना आदर्श नहीं हो सकता है क्योंकि त्रुटि संदेश संस्करण से संस्करण में बदलता है, उदा। svn 1.6.1 ने त्रुटि संदेश को 'svn' में बदल दिया है: 'svn + ssh: //' में कोई रिपॉजिटरी नहीं मिली है। हालांकि, xml पार्सिंग svn 1.6.1 के रूप में विश्वसनीय नहीं है, अगर भंडार exsit नहीं है, तो यह एक अपूर्ण xml वापस करेगा जो पारदर्शी नहीं है। इससे इससे भी बदतर हो जाएगा। संभवतः मैं सोच सकता हूं कि सबसे अच्छा तरीका यह जांचना है कि आपके द्वारा भेजा गया मूल भंडार यूआरएल वापसी संदेश में है या नहीं। ऐसा लगता है कि कुछ गलत होने पर यह वापस आ जाएगा। – Liwen

+0

धन्यवाद। आदेशों के पाठ आउटपुट का विश्लेषण करने के लिए स्क्रिप्टिंग के कम से कम सुखद पहलुओं में से एक है, लेकिन इसे किया जाना है। मैं फिर रिटर्न संदेश में रिपोजिटरी यूआरएल की जांच करूंगा। – Andy

8

किसी भी मौजूदा भंडार (संभवतः एक त्रुटि संदेश को समृद्ध के लिए उदाहरण के लिए) के बारे में जानकारी प्राप्त करने के लिए आप भी इस्तेमाल कर सकते हैं

svn info https://developernetwork.repo.net/svn/Projects/Calculator/ 

एक गैर-मौजूदा परियोजना के लिए यह केवल

लौटाएगा अगर सब ठीक चला गया

दोनों

svn ls REPOSITORY/PATH 

और

svn info REPOSITORY/PATH 

वापसी 0, और 1:

svn: Could not open the requested SVN filesystem 
+0

वास्तव में, Slik SVN के अपने संस्करण लौटे: https://developernetwork.repo.net/svn/Projects/Calculator/ : (नहीं एक मान्य URL) SVN: कोई समस्या उत्पन्न हुई; विवरण के लिए अन्य त्रुटियां देखें हालांकि, "वैध URL नहीं" पर्याप्त खोज स्ट्रिंग अच्छी होनी चाहिए। बस ब्याज से बाहर, स्क्रिप्ट के लिए "वैध URL नहीं" स्ट्रिंग के लिए टेक्स्ट आउटपुट खोजने से परिणामों का विश्लेषण करने का एक बेहतर तरीका है? – Andy

+0

विभिन्न संभावित त्रुटि संदेशों को देखते हुए svn का अलग-अलग निर्माण हो सकता है, आपको नकारात्मक स्ट्रिंग के बजाय आउटपुट स्ट्रिंग को सकारात्मक पैटर्न के लिए पार्स करना चाहिए। यही है, रेपो मौजूद नहीं होने पर आपको प्राप्त होने वाली किसी चीज की घटना के लिए परीक्षण करें। यहां, कोलाबनेट एसवीएन 1.6.1 (विंडोज) '--xml' पैरामीटर के माध्यम से एक्सएमएल आउटपुट चालू करने की क्षमता प्रदान करता है। व्यक्तिगत रूप से मैं केवल यूयूआईडी तत्व के अस्तित्व की जांच करता हूं, जिसे किसी भी 'जानकारी' डेटा में शामिल किया जाना चाहिए (यदि सही नहीं है तो मुझे सही करें)। – amain

+0

धन्यवाद। हमारे पास अभी तक सर्वर 1.5.0 चल रहा है, इसलिए मैं आपकी टिप्पणी को नोट कर दूंगा और इसे टू-डू सूची में रखूंगा। – Andy

40

इसके बजाय वापसी तार के लिए जाँच की मैं सिर्फ वापसी कोड के लिए जाँच करेगा अगर चीजें गलत हो गईं; एक bash स्क्रिप्ट में इतना

echo $? 

जैसे कुछ करना: आप जल्दी से बाहर यह जाँच कर सकते हैं इलाज की तरह

error=$? 
if [ $error -ne 0 ]; then 
     YOUR ERROR HANDLING 
fi 

काम करता है!

+0

आपकी टिप्पणी के लिए धन्यवाद। क्या पर्ल स्क्रिप्ट के बीच में ऐसा करना भी संभव है। किसी भी मामले में, यह एक अकादमिक सवाल बन गया है क्योंकि जिस परियोजना पर मैं काम कर रहा था, उसे हटा दिया गया है! – Andy

+1

आपकी परियोजना के लिए खेद है! उम्मीद है कि यह उत्तर किसी और के लिए उपयोगी होगा .. – Stefano

+3

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए – MatteoSp

2

मुझे उपरोक्त समस्या का सामना करना पड़ता है और मैंने सभी तरह से प्रयास किया। मेरे लिए काम नहीं करें .. अगर हम svn में नहीं हैं, तो पथ के साथ svn तक पहुंचें, यह त्रुटि के साथ विफल रहा है और खोल स्क्रिप्ट टूट जाएगी।

अज्ञात पथ तक पहुंचने के बजाय, मैंने जो किया वह मूल फ़ोल्डर की निर्देशिका सूची प्राप्त करता है और जांचता है कि मिलान करने वाला कोई है या नहीं।

सभी परियोजनाओं अपने जनक निर्देशिका के रूप में (यदि आप एक विशिष्ट टैग लगाना चाहते हैं तो अपने मूल निर्देशिका पथ https://developernetwork.repo.net/svn/Projects/Calculator/tags होना चाहिए)

projects=$(svn ls https://developernetwork.repo.net/svn/Projects/) 

तो जाँच अपनी परियोजना फ़ोल्डर मौजूद प्राप्त करें। अपने प्रोजेक्ट नाम के बाद / को याद रखें।

projectName="Calculator/" 
for i in $projects; do 
    if [ "$i" == "$projectName/" ]; 
     then 
     echo Project Exist 
     else 
     echo Project does not exist 
    fi 
done 

सरल।

1

मैंने एक मौजूदा उत्तर पर टिप्पणी की होगी लेकिन मेरे पास पर्याप्त प्रतिष्ठा नहीं है।

मैं अगर एक फ़ाइल आयात किया गया था सफलतापूर्वक या नहीं तो मैं "SVN की जानकारी" और के साथ "SVN ls" "गूंज $?" करने की कोशिश की खोजने के लिए करना चाहता था। जब मैं "svn ls" का उपयोग करता था तो मुझे केवल शून्य/गैर-शून्य रिटर्न कोड मिल सकता था: "svn info" हमेशा शून्य लौटा।

यह Redhat RHEL6 पर विवर्तन 1.5.5 के साथ था।

0

@ ए स्कॉट की तरह, echo $? का उपयोग नहीं किया जा सकता है ताकि यूआरएल सही हो (मैं मैक ओएस 10.11 और एसवीएन क्लाइंट 1.9.5 पर हूं)।

content=$(svn info $SVN_TAG_URL) 

if [[ -z $content ]]; then 
    echo "The SVN URL doesn't exist"; exit 
fi 
संबंधित मुद्दे