Как узнать план сборки и сохранить путь без построения выражения Nix? - PullRequest
0 голосов
/ 27 августа 2018

nix-build ... --no-out-link дает путь в магазине Nix.

  • Можно ли найти этот путь без фактического построения выражения?

  • Можно ли выяснить зависимости и планируемые операции сборки без построения выражения?

  • Как я мог найти ответ сам?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Руководство Nix , раздел «Сборка и тестирование», относится к документации nix-build, в которой в последнем абзаце «Описание» упоминается комбинация nix-instantiate и nix-store -r.

nix-instantiate не строит. Он только рассчитывает план в виде деривации и его закрытия:

$ nix-instantiate '<nixpkgs>' -A hello
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
/nix/store/20bc2g6gfn44p9wk98s30pm346pmz0x9-hello-2.10.drv

Однако я предпочитаю использовать nix repl для изучения выражений Nix:

$ nix repl '<nixpkgs>'
Loading '<nixpkgs>'...
Added 8623 variables.
nix-repl> hello.outPath
"/nix/store/nic2bl8ry6vfyxr9717983d5b2l4sn1c-hello-2.10"

Его завершение табуляции очень полезно при изучении выражений.

0 голосов
/ 28 августа 2018

man nix-store имеет ответ, в частности раздел --query.

Чтобы узнать выходной путь:

nix-store -q --outputs $(nix-instanciate default.nix)

Чтобы узнать зависимости времени сборки:

nix-store -qR --include-outputs $(nix-instanciate default.nix)

Что касается плана сборки, то чем ближе я подхожу к использованию флага --tree.

Обратите внимание, что nix-shell также предоставляет переменную $out, поэтому еще одним возможным решением для первой точки маркера будет:

nix-shell --pure --run 'echo $out' some-file.nix
...