2010-03-08 7 views
5

कहें कि मेरे पास https://www.mysvn.com/svn/ पर एक svn भंडार है। मैं सर्वर पर मौजूद दूरस्थ फ़ोल्डर https://www.mysvn.com/svn/a/b/c मौजूद है या नहीं, यह जानने के लिए मैं SharpSVN का उपयोग कैसे कर सकता हूं?SharpSVN का उपयोग कैसे करें (जल्दी) जांचें कि सर्वर पर एक दूरस्थ फ़ोल्डर/फ़ाइल मौजूद है

मुझे ऐसा करने की ज़रूरत है जो मुझे एक असफल कनेक्शन (यानी सर्वर डाउन) और फ़ोल्डर को अभी तक नहीं बनाया गया है, के बीच अंतर बताने की अनुमति देता है।

पूर्ण https://www.mysvn.com/svn/a/b/c पथ पर कॉलिंग जानकारी एक अपवाद नहीं प्रतीत होता है जो मुझे किसी भी भंडार के बीच अंतर और केवल एक अनुपलब्ध फ़ोल्डर के बीच अंतर बताने में सक्षम बनाता है।

मैं https://www.mysvn.com/svn/ के लिए सभी फाइलों को सूचीबद्ध कर सकता हूं लेकिन भंडार आसानी से इतना बड़ा हो सकता है कि इसमें बहुत अधिक समय लग सकता है।

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

उत्तर

2

svn list https://www.mysvn.com/svn/a/b/c (या बल्कि, इसके समकक्ष बंधन) नहीं चाहेंगे कि यह? यदि पथ नहीं मिला है तो इसे कुछ अलग करना चाहिए। उदाहरण के लिए, कमांड लाइन ग्राहक रिटर्न

svn: URL 'https://www.mysvn.com/svn/a/b/c' non-existent in that revision 
+0

इम वर्तमान स्थानीय फाइल सिस्टम खजाने के साथ परीक्षण (यानी यूआरएल "file: /// " है), और इस मामले में SharpSvn.SvnClient.List मुझे एक "SharpSvn.SvnRepositoryIOException देता है: यूआरएल में एक ra_local सत्र खोलने में असमर्थ" जब मैं इसे एक फर्जी सापेक्ष पथ के साथ जुड़े भंडार के यूआरएल को खिलाता हूं। पूरी तरह से फर्जी यूआरएल देते समय बिल्कुल वही अपवाद फेंक दिया जाता है। – Ziphnor

11

है GetInfo का उपयोग करें और गलत पर SvnInfoArgs.ThrowOnError स्थापित करने के लिए संभव है।

SharpSVN वाक्य रचना का उपयोग करना:

using (SvnClient sc = new SvnClient()) 
    { 
     Uri targetUri = new Uri(RemoteUriTrunk, relPath); 
     var target = SvnTarget.FromUri(targetUri); 
     Collection<SvnInfoEventArgs> info; 
     bool result = sc.GetInfo(target, new SvnInfoArgs {ThrowOnError = false}, out info); 
     Assert.That(result, Is.False); 
     Assert.That(info, Is.Empty); 
    } 

इसका मतलब यह है कि हालांकि सभी अपवादों कि फेंक दिया जाता है इसका मतलब है कि दूरदराज के फ़ाइल मौजूद नहीं है।

शायद SvnRemoteSession.GetStat इसे हल करने का एक बेहतर तरीका है। जैसा कि ऐसा लगता है, मैं एक बिल्कुल नई सुविधा है। मेरे पास पुस्तकालय के मेरे संस्करण में नहीं है। http://sharpsvn.open.collab.net/source/browse/sharpsvn/trunk/src/SharpSvn/SvnRemoteSession.h?view=log

यह बहुत परेशान है कि पुस्तकालय किस तरह के भंडार के आधार पर विभिन्न अपवादों को फेंकता है।

1

नए पाठकों के लिए स्टीफन के जवाब के साथ के बाद, SvnRemoteSession.GetStat चाल करने के लिए लगता है:

using (var session = new SharpSvn.Remote.SvnRemoteSession()) 
{ 
    SvnUI.Bind(session, new SvnUIBindArgs()); 

    // Throws 'SharpSvn.SvnRepositoryIOForbiddenException' if the server 
    // exists but the repo does not, or the user does not have read access. 
    // (SVN_ERR_RA_DAV_FORBIDDEN) 
    // 
    // Throws 'SharpSvn.SvnSystemException' if the server does not exist 
    // or could not be reached. (WSAHOST_NOT_FOUND) 
    session.Open(remoteUriTrunk); 

    SharpSvn.Remote.SvnRemoteStatEventArgs result; 

    // True if the file or folder exists, false if it does not exist. 
    bool exists = session.GetStat(relPath, out result); 
} 
संबंधित मुद्दे