Impedindo que o Nix atualize o git para o git-full

8

Estou usando o Nix no Ubuntu para ter versões mais modernas de alguns pacotes, sendo um deles o git. Quando eu corro nix-env -u, é isso que acontece:

% nix-env -u --dry-run '*'
(dry run; not doing anything)
upgrading `git-1.8.5.4' to `git-1.9.0-full'

Não é isso que eu quero - prefiro a versão simples git-1.9.0à -fullversão. Eu sei que posso atualizar manualmente para a versão simples com nix-env -i git-1.9.0, mas existe uma maneira nix-env -ude fazer o que eu quero?

Miikka
fonte

Respostas:

4

Antes de responder e responder, gostaria de explicar como a nomeação de pacotes funciona no Nix.

O nome ao qual você está se referindo é o nome da derivação, que não é exclusivo (vários pacotes compilados de maneiras diferentes podem ser git-1.9.0).

Se você deseja fazer referência a um pacote de maneira exclusiva, o nome do conjunto de atributos é o caminho.

Para imprimir o nome do conjunto de atributos durante a consulta (observação -P:

nix-env -qaP | grep git

Para atualizar um pacote por nome exclusivo:

nix-env -uA git

No seu caso, isso é resultado do fato de os dois pacotes serem chamados git-version. O Nix resolve qual é escolhido por prioridade. Para diminuir a prioridade da atual, defina:

nix-env --set-flag priority 10 git
nix-env -u
iElectric
fonte
1
Com base na discussão IRC: --set-flag prioritynão realmente ajudar aqui, e isso pode fazer a mudança sentido, a convenção de nomenclatura do pacote de variantes em Nixpkgs: github.com/NixOS/nixpkgs/issues/1756
Miikka
3
Consulte github.com/NixOS/nixpkgs/issues/1756#issuecomment-37316142 , isso foi corrigido.
IElectric