2016-10-16 4 views
5

A few days ago, ईएमएसस्क्रिप्ट के माध्यम से जावास्क्रिप्ट को क्रॉस-कंपाइलिंग अंततः रात में मारा गया है। मैं इस तरह से glium का उपयोग कर एक परियोजना संकलित करना चाहता था। हालांकि, कई crates में अभी भी कई Emscripten- संबंधित बग हैं। जबकि रखरखाव आमतौर पर उन बग को तुरंत ठीक करते हैं, वे जरूरी नहीं कि उन बग फिक्स को crates.io पर तुरंत रिलीज़ न करें।crgo.io के बजाय अप्रत्यक्ष निर्भरता के स्रोत के रूप में एक गिट भंडार का उपयोग करने के लिए कार्गो को कैसे बताना है?

मेरे मामले में, gliumglutin पर निर्भर करता है। glutin में एक बग था जो अभी तय किया गया है, लेकिन केवल गिट रिपोजिटरी में, crates.io पर नहीं। नोट: glutin मेरी परियोजना की प्रत्यक्ष निर्भरता नहीं है; glium के माध्यम से केवल एक अप्रत्यक्ष एक!

मैं कार्गो कैसे बताऊँ crates.io के बजाय glutin के लिए स्रोत के रूप में the glutin repository उपयोग कैसे करें?

उत्तर

5

आप अपनी परियोजना में [replace] अनुभाग उपयोग कर सकते हैं के Cargo.toml। आप उस सुविधा के बारे में दस्तावेज here in the Cargo documentation प्राप्त कर सकते हैं।

आपके मामले में, gliumglutin 0.6.1 पर निर्भर करता है। Crates.io पर संस्करण 0.6.1 संस्करण अभी भी बग है। तो बस अपने Cargo.toml से जोड़ें:

[replace] 
"glutin:0.6.1" = { git = 'https://github.com/tomaka/glutin' } 

नोट तथापि,

[...] कि प्रतिस्थापित टोकरा केवल एक ही नाम, लेकिन यह भी एक ही संस्करण नहीं होना चाहिए।

लेकिन फिर भी एक संस्करण-बेमेल (भंडार पहले से ही एक नए संस्करण में शामिल है) के मामले में, आप अब भी भाग्य में हो सकता है अगर टोकरा के मेंटेनर हर संस्करण के लिए Git टैग बनाता है (जंग समुदाय में कई करते हैं) । क्योंकि मेंटेनर हर संस्करण के लिए टैग का निर्माण नहीं किया,

[replace] 
"glutin:0.6.1" = { 
    git = 'https://github.com/tomaka/glutin' 
    tag = 'v0.6.1' 
} 

दुख की बात है, इस glutin साथ काम नहीं करेंगे: उस मामले में आप सिर्फ टैग निर्दिष्ट कर सकते हैं। उस स्थिति में आप संस्करण को बंप करने से पहले अंतिम प्रतिबद्धता पा सकते हैं और rev = 'b4a3d0...' के साथ निर्दिष्ट करें या branch = '...' कुंजी के साथ एक विशिष्ट शाखा निर्दिष्ट करें।

+1

क्या "x: version.number" = ... 'और' x = {version = "version.number", ...} '? – LinearZoetrope

+0

@Jsor हां के बीच एक अंतर है, बाद वाला नहीं है ' टी काम करता है। एलएचएस परिभाषित करता है * क्या * प्रतिस्थापित करने के लिए और आप केवल क्रेट के विशिष्ट संस्करणों को प्रतिस्थापित कर सकते हैं, सामान्य रूप से कुछ क्रेट्स नहीं (ऐसा हो सकता है कि आपके डिप्टी पेड़ में एक क्रेट के दो अलग-अलग संस्करण हैं)। आरएचएस कहता है कि इसे * के साथ * के साथ प्रतिस्थापित करने के लिए, और संस्करण को एलएचएस-संस्करण से मेल खाना है, इसलिए दाईं तरफ इसे लिखने में कोई बात नहीं है। –

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

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