aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralois31 <alois1@gmx-topmail.de>2024-06-19 07:08:19 +0000
committerGerrit Code Review <gerrit@localhost>2024-06-19 07:08:19 +0000
commitfed34594d8d6783397a45359b509e05177efd5ab (patch)
tree2ec709aa53866f85e79573943c1b81adbc278322
parent85f282ef572577899b3d80ba8def1b920a386218 (diff)
parentaa00a5a8c9ba7b74c2102b8dc7fc4c3ed58606d8 (diff)
Merge "libfetchers: represent unfetched submodules consistently" into main
-rw-r--r--src/libfetchers/git.cc2
-rw-r--r--tests/functional/fetchGitSubmodules.sh2
2 files changed, 3 insertions, 1 deletions
diff --git a/src/libfetchers/git.cc b/src/libfetchers/git.cc
index 07cbc781c..2817fde23 100644
--- a/src/libfetchers/git.cc
+++ b/src/libfetchers/git.cc
@@ -232,7 +232,7 @@ std::pair<StorePath, Input> fetchFromWorkdir(ref<Store> store, Input & input, co
if (S_ISDIR(st.st_mode)) {
auto prefix = file + "/";
auto i = files.lower_bound(prefix);
- return i != files.end() && (*i).starts_with(prefix);
+ return (i != files.end() && (*i).starts_with(prefix)) || files.count(file);
}
return files.count(file);
diff --git a/tests/functional/fetchGitSubmodules.sh b/tests/functional/fetchGitSubmodules.sh
index df81232e5..3ff6697fd 100644
--- a/tests/functional/fetchGitSubmodules.sh
+++ b/tests/functional/fetchGitSubmodules.sh
@@ -40,6 +40,7 @@ initGitRepo $rootRepo
git -C $rootRepo submodule init
git -C $rootRepo submodule add $subRepo sub
git -C $rootRepo add sub
+r0=$(nix eval --impure --raw --expr "(builtins.fetchGit { url = file://$rootRepo; }).outPath")
git -C $rootRepo commit -m "Add submodule"
rev=$(git -C $rootRepo rev-parse HEAD)
@@ -48,6 +49,7 @@ r1=$(nix eval --raw --expr "(builtins.fetchGit { url = file://$rootRepo; rev = \
r2=$(nix eval --raw --expr "(builtins.fetchGit { url = file://$rootRepo; rev = \"$rev\"; submodules = false; }).outPath")
r3=$(nix eval --raw --expr "(builtins.fetchGit { url = file://$rootRepo; rev = \"$rev\"; submodules = true; }).outPath")
+[[ $r0 == $r1 ]] # verify that unfetched submodules result in empty directories in dirty mode too
[[ $r1 == $r2 ]]
[[ $r2 != $r3 ]]