Nix: Ignorando testes de unidade ao instalar um pacote Haskell

8

Estou usando o Nix para instalar pacotes em minha casa (portanto, nenhum pacote binário) em um host compartilhado com recursos limitados. Estou tentando instalar o git-annex. Ao criar uma de suas dependências, a haskell-lens, os testes de unidade consomem muita memória que são danificados e a instalação falha.

Existe uma maneira de pular os testes de unidade para obter o pacote instalado? Eu olhei para o construtor Cabal e haskell-packages.nix e parece-me que você poderia desativar os testes definindo enableCheckPhase para false. Eu tentei o seguinte em ~/.nixpkgs/config.nix , mas os testes ainda são executados:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                self.lens = self.disableTest self.lens;
            };
        };
    };
}
    
por Miikka 08.11.2014 / 14:24

3 respostas

3

Vejo você tentando usar disableTest encontrado em haskell-package.nix para remover o teste dos pacotes de lentes. Eu teria que fazer alguns testes para dizer exatamente por que não está atendendo às suas necessidades.

Desativei o teste em geral, substituindo o pacote cabal em config.nix to cabalNoTest . Isso substitui o pacote cabal usado pelo restante dos pacotes haskell para desativar o teste.

É assim que eu normalmente escrevo:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                cabal = pkgs.haskellPackages.cabalNoTest;
            };
        };
    };
}
    
por 14.12.2014 / 08:38
8

nixpkgs reorganizou as coisas desde que a resposta aceita foi postada e há uma nova função para desabilitar os testes. Agora você encapsula qualquer pacote Haskell com a função pkgs.haskell.lib.dontCheck para desabilitar os testes. Aqui está uma expressão Nix de exemplo de um dos meus projetos Haskell, onde tive que desabilitar os testes para a dependência shared-memory ao criar no 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;
    }
    
por 03.06.2016 / 18:32
2

Uma resposta alternativa, abordando sua preocupação de um ângulo diferente, é construir seus pacotes com testes em uma máquina mais potente. Então, quando necessário, copie o fechamento para o host remoto.

Isso funciona bem se você estiver na mesma arquitetura e o software em questão não estiver bem acoplado a nenhum hardware diferente nas duas máquinas.

Leia sobre como compartilhar pacotes entre máquinas no manual nix.

Este é um bom recurso que permite a abordagem do nix ao gerenciamento de pacotes. Eu usei esse recurso muitas vezes ao contrário, usando máquinas remotas mais poderosas para criar quantidades copiosas de software para minha máquina local.

    
por 14.12.2014 / 08:46