निक्स: हास्केल पैकेज स्थापित करते समय इकाई परीक्षण को छोड़ देना


9

मैं सीमित संसाधनों के साथ एक साझा होस्ट पर अपने घर (इसलिए कोई बाइनरी पैकेज) के तहत पैकेज स्थापित करने के लिए निक्स का उपयोग कर रहा हूं। मैं git-annex स्थापित करने का प्रयास कर रहा हूँ। अपनी निर्भरता, हैस्केल-लेंस का निर्माण करते समय, यूनिट परीक्षण इतनी मेमोरी का उपभोग करते हैं कि वे मारे जाते हैं और स्थापना विफल हो जाती है।

क्या पैकेज स्थापित करने के लिए यूनिट परीक्षणों को छोड़ने का एक तरीका है? मैंने कैबल बिल्डर को देखा haskell-packages.nixऔर यह मुझे लगता है कि आप enableCheckPhaseझूठी सेटिंग करके परीक्षणों को अक्षम कर सकते हैं । मैंने निम्नलिखित में कोशिश की ~/.nixpkgs/config.nix, लेकिन परीक्षण अभी भी चलाए जा रहे हैं:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                self.lens = self.disableTest self.lens;
            };
        };
    };
}

जवाबों:


2

मैं आपको लेंस पैकेज से परीक्षण को हटाने के लिए disableTestपाया गया उपयोग करने की कोशिश कर रहा हूं haskell-package.nix। मुझे आपको यह बताने के लिए कुछ परीक्षण करना होगा कि यह आपकी आवश्यकताओं को पूरा क्यों नहीं कर रहा है।

मैंने cabalपैकेज में सामान्य ओवरराइडिंग में परीक्षण को अक्षम कर config.nixदिया है cabalNoTest। यह cabalपरीक्षण बंद कर रहे हैसेल पैकेज के बाकी द्वारा उपयोग किए गए पैकेज को ओवरराइड करता है ।

इस तरह से मैं इसे सामान्य रूप से लिखता हूं:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                cabal = pkgs.haskellPackages.cabalNoTest;
            };
        };
    };
}

12

nixpkgsस्वीकृत उत्तर पोस्ट किए जाने के बाद से पुनर्गठित चीजें और परीक्षणों को अक्षम करने के लिए एक नया कार्य है। अब आप pkgs.haskell.lib.dontCheckपरीक्षण को अक्षम करने के लिए फ़ंक्शन के साथ किसी भी हास्केल पैकेज को लपेटते हैं । यहाँ मेरी Haskell परियोजनाओं में से एक से एक उदाहरण निक्स अभिव्यक्ति है, जहां मुझे shared-memoryOS X पर निर्माण करते समय निर्भरता के लिए परीक्षणों को अक्षम करना पड़ा :

{ pkgs ? import <nixpkgs> {}, compiler ? "ghc7103" }:
pkgs.haskell.packages.${compiler}.callPackage ./my-project.nix
    {   shared-memory =
            let shared-memory = pkgs.haskell.packages.${compiler}.shared-memory;
            in  if pkgs.stdenv.isDarwin
                then pkgs.haskell.lib.dontCheck shared-memory
                else shared-memory;
    }

क्या nix-build --disable-check-phaseव्युत्पत्ति / आउटपुट हैश को बदलने के बिना परीक्षण (जैसे इंटरैक्टिव उपयोग के दृष्टिकोण से ) को चुनिंदा रूप से अक्षम करने का एक तरीका है ?
CMCDragonkai

@CMCDragonkai: आप हैश को बदले बिना परीक्षण को अक्षम नहीं कर सकते हैं (नियत बाइनरी आउटपुट के लिए निश्चित आउटपुट व्युत्पन्न को छोड़कर)। यहां तक ​​कि अगर आप हैश को बदलने के साथ ठीक हैं, तो कमांड लाइन से ऐसा करने के लिए एर्गोनोमिक तरीका नहीं है जो मुझे पता है
गेब्रियल गोंजालेज

3

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

यह अच्छी तरह से काम करता है यदि आप एक ही आर्किटेक्चर पर हैं और विचाराधीन सॉफ़्टवेयर किसी भी हार्डवेयर के साथ कसकर युग्मित नहीं है जो दो मशीनों पर अलग है।

निक्स मैनुअल में मशीनों के बीच पैकेज साझा करने के तरीके के बारे में पढ़ें ।

यह अच्छी सुविधा है जो पैकेज प्रबंधन के लिए निक्स के दृष्टिकोण को सक्षम करती है। मैंने अक्सर इस सुविधा का उल्टा इस्तेमाल किया है, अपने स्थानीय मशीन के लिए प्रचुर मात्रा में सॉफ्टवेयर बनाने के लिए अधिक शक्तिशाली रिमोट मशीनों का उपयोग किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.