fetchGit: fix submodule output attribute

Before this change it would be false for all evaluations but the first.
Now it follows the input argument (as it should).
This commit is contained in:
Bjørn Forsman 2020-03-17 14:27:14 +01:00 committed by Julian Stecklina
parent 587e259bfd
commit 6864ad7cf5
2 changed files with 12 additions and 4 deletions

View file

@ -32,6 +32,9 @@ GitInfo exportGit(ref<Store> store, const std::string & uri,
std::optional<std::string> ref, std::string rev, std::optional<std::string> ref, std::string rev,
const std::string & name, bool fetchSubmodules) const std::string & name, bool fetchSubmodules)
{ {
GitInfo gitInfo;
gitInfo.submodules = fetchSubmodules;
if (evalSettings.pureEval && rev == "") if (evalSettings.pureEval && rev == "")
throw Error("in pure evaluation mode, 'fetchGit' requires a Git revision"); throw Error("in pure evaluation mode, 'fetchGit' requires a Git revision");
@ -49,7 +52,6 @@ GitInfo exportGit(ref<Store> store, const std::string & uri,
if (!clean) { if (!clean) {
/* This is an unclean working tree. So copy all tracked files. */ /* This is an unclean working tree. So copy all tracked files. */
GitInfo gitInfo;
gitInfo.rev = "0000000000000000000000000000000000000000"; gitInfo.rev = "0000000000000000000000000000000000000000";
gitInfo.shortRev = std::string(gitInfo.rev, 0, 7); gitInfo.shortRev = std::string(gitInfo.rev, 0, 7);
@ -141,7 +143,6 @@ GitInfo exportGit(ref<Store> store, const std::string & uri,
} }
// FIXME: check whether rev is an ancestor of ref. // FIXME: check whether rev is an ancestor of ref.
GitInfo gitInfo;
gitInfo.rev = rev != "" ? rev : chomp(readFile(localRefFile)); gitInfo.rev = rev != "" ? rev : chomp(readFile(localRefFile));
gitInfo.shortRev = std::string(gitInfo.rev, 0, 7); gitInfo.shortRev = std::string(gitInfo.rev, 0, 7);
@ -190,8 +191,6 @@ GitInfo exportGit(ref<Store> store, const std::string & uri,
std::filesystem::remove_all(p.path()); std::filesystem::remove_all(p.path());
} }
} }
gitInfo.submodules = true;
} else { } else {
auto source = sinkToSource([&](Sink & sink) { auto source = sinkToSource([&](Sink & sink) {
RunOptions gitOptions("git", { "-C", cacheDir, "archive", gitInfo.rev }); RunOptions gitOptions("git", { "-C", cacheDir, "archive", gitInfo.rev });

View file

@ -61,6 +61,15 @@ r8=$(nix eval --raw "(builtins.fetchGit { url = $rootRepo; rev = \"$rev\"; submo
[[ $r6 == $r7 ]] [[ $r6 == $r7 ]]
[[ $r7 == $r8 ]] [[ $r7 == $r8 ]]
have_submodules=$(nix eval "(builtins.fetchGit { url = $rootRepo; rev = \"$rev\"; }).submodules")
[[ $have_submodules == false ]]
have_submodules=$(nix eval "(builtins.fetchGit { url = $rootRepo; rev = \"$rev\"; submodules = false; }).submodules")
[[ $have_submodules == false ]]
have_submodules=$(nix eval "(builtins.fetchGit { url = $rootRepo; rev = \"$rev\"; submodules = true; }).submodules")
[[ $have_submodules == true ]]
# The resulting store path cannot be the same. # The resulting store path cannot be the same.
[[ $pathWithoutSubmodules != $pathWithSubmodules ]] [[ $pathWithoutSubmodules != $pathWithSubmodules ]]