ห้าม: ทดสอบการข้ามหน่วยเมื่อติดตั้งแพ็คเกจ Haskell


9

ฉันใช้ Nix เพื่อติดตั้งแพ็คเกจใต้บ้านของฉัน (ดังนั้นจึงไม่มีแพ็คเกจไบนารี) บนโฮสต์ที่ใช้ร่วมกันที่มีทรัพยากร จำกัด ฉันพยายามติดตั้ง git-annex เมื่อสร้างหนึ่งในการพึ่งพาของมัน haskell-lens การทดสอบยูนิตจะใช้หน่วยความจำมากจนถูกฆ่าและการติดตั้งล้มเหลว

มีวิธีข้ามการทดสอบหน่วยเพื่อรับแพคเกจติดตั้งหรือไม่ ฉันดูผู้สร้างพันธมิตรและ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แพ็คเกจที่ใช้โดยแพคเกจอื่น ๆ ของ haskell ที่ปิดการทดสอบ

นี่คือวิธีที่ฉันเขียนตามปกติ:

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

12

nixpkgsจัดโครงสร้างใหม่ตั้งแต่คำตอบที่ยอมรับถูกโพสต์และมีฟังก์ชั่นใหม่สำหรับการปิดการใช้งานการทดสอบ ตอนนี้คุณห่อแพ็คเกจ Haskell ด้วยpkgs.haskell.lib.dontCheckฟังก์ชันเพื่อปิดการทดสอบ นี่คือตัวอย่างนิพจน์ห้ามจากหนึ่งในโครงการ Haskell ของฉันที่ฉันต้องปิดการทดสอบสำหรับการshared-memoryพึ่งพาเมื่อสร้างบน OS 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: คุณไม่สามารถปิดใช้งานการทดสอบโดยไม่เปลี่ยนแฮช (ยกเว้นการส่งออกคงที่ซึ่งมีการกำหนดเอาต์พุตไบนารีที่กำหนดไว้) แม้ว่าคุณจะโอเคกับการเปลี่ยนแฮ็ก แต่ก็ไม่มีวิธีที่เหมาะกับการใช้งานจากบรรทัดคำสั่งที่ฉันรู้
Gabriel Gonzalez

3

อีกทางเลือกหนึ่งคือการจัดการกับข้อกังวลของคุณจากมุมมองที่แตกต่างกันคือการสร้างแพ็คเกจของคุณด้วยการทดสอบกับเครื่องจักรที่ทรงพลังกว่า จากนั้นเมื่อต้องการคัดลอกการปิดไปยังโฮสต์ระยะไกล

วิธีนี้ใช้งานได้ดีหากคุณใช้สถาปัตยกรรมเดียวกันและซอฟต์แวร์ที่มีปัญหานั้นไม่ได้เชื่อมต่ออย่างแน่นหนากับฮาร์ดแวร์ใด ๆ ที่แตกต่างกันในทั้งสองเครื่อง

อ่านข้อมูลเกี่ยวกับวิธีการที่จะใช้ร่วมกันระหว่างเครื่องแพคเกจในคู่มือการห้าม

นี่คือคุณสมบัติที่ดีซึ่งเปิดใช้งานแนวทางของการจัดการบรรจุภัณฑ์ ฉันมักจะใช้คุณสมบัตินี้ในทางกลับกันโดยใช้เครื่องระยะไกลที่มีประสิทธิภาพมากขึ้นเพื่อสร้างซอฟต์แวร์จำนวนมากสำหรับเครื่องท้องถิ่นของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.