9

独自のリポジトリを作成して、いくつかの git ソースをフェッチします。

# packages.nix
with (import <nixpkgs> {});

rec {
  rustcSource = fetchgit {
    url = https://github.com/rust-lang/rust;
    rev = "3191fbae9da539442351f883bdabcad0d72efcb6";
    sha256 = "0w1l14kz9kxyj5dw3w9xxk1fzww5xqs3sf8saay0mh7nkmvrdb59";
  };
}

それから私は構築しますrustcSource

sudo nix-env -f package.nix -A rustcSource

のストア パスが表示され/nix/store/096fpy9qjbz5r14aadjnq9d2md9ql9cg-rust-3191fbaます。問題は、サブモジュールをダウンロードするのを忘れていたので、式を変更してサブモジュールを含めることです。

with (import <nixpkgs> {});

rec {
  rustcSource = fetchgit {
    url = https://github.com/rust-lang/rust;
    rev = "3191fbae9da539442351f883bdabcad0d72efcb6";
    sha256 = "0w1l14kz9kxyj5dw3w9xxk1fzww5xqs3sf8saay0mh7nkmvrdb59";
    leaveDotGit = true;
    fetchSubmodules = true;
  };
}

しかし、nix-buildハッシュが再計算されず、パスが構築されていることがわかりました。そのため、サブモジュールをダウンロードしないことになります。

Q: nix バグですか? リポジトリを「再構築」または再ダウンロードするにはどうすればよいですか?

PS実際にはfetchgitを使用して派生を作成しますが、サブモジュールがダウンロードされていないため失敗します。したがって、上記のケースは私の問題を単純化します。

4

3 に答える 3

6

バグではありません。これは仕様によるものです。

ハッシュを指定する派生は固定出力派生と呼ばれ、ハッシュがストア内の既存の派生と一致するかどうかのみをチェックし、それを使用します。したがって、fetchSubmodules の変更は無視されます。

詳細については、https://github.com/NixOS/nix/issues/969を参照してください。

于 2017-01-08T13:28:10.727 に答える