diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-11-21T18·12+0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-11-21T18·34+0100 |
commit | d7da6c9ea9459a2fa17c3e409120c5cdfde6afdc (patch) | |
tree | 26676469ead12a6581c2301d395283129dd64f0d | |
parent | 6cdaa858d03b9c24f54f8157026cebaa02d9ac8a (diff) |
fetchGit/fetchMercurial: Fix directory inclusion check
E.g. the existence of .gitignore would cause .git to be included.
-rw-r--r-- | src/libexpr/primops/fetchGit.cc | 5 | ||||
-rw-r--r-- | src/libexpr/primops/fetchMercurial.cc | 5 | ||||
-rw-r--r-- | tests/fetchGit.sh | 4 | ||||
-rw-r--r-- | tests/fetchMercurial.sh | 4 |
4 files changed, 12 insertions, 6 deletions
diff --git a/src/libexpr/primops/fetchGit.cc b/src/libexpr/primops/fetchGit.cc index bca68ed72091..fd3e84c292c3 100644 --- a/src/libexpr/primops/fetchGit.cc +++ b/src/libexpr/primops/fetchGit.cc @@ -56,8 +56,9 @@ GitInfo exportGit(ref<Store> store, const std::string & uri, auto st = lstat(p); if (S_ISDIR(st.st_mode)) { - auto i = files.lower_bound(file); - return i != files.end() && hasPrefix(*i, file); + auto prefix = file + "/"; + auto i = files.lower_bound(prefix); + return i != files.end() && hasPrefix(*i, prefix); } return files.count(file); diff --git a/src/libexpr/primops/fetchMercurial.cc b/src/libexpr/primops/fetchMercurial.cc index 7def7103bf3d..a317476c5829 100644 --- a/src/libexpr/primops/fetchMercurial.cc +++ b/src/libexpr/primops/fetchMercurial.cc @@ -52,8 +52,9 @@ HgInfo exportMercurial(ref<Store> store, const std::string & uri, auto st = lstat(p); if (S_ISDIR(st.st_mode)) { - auto i = files.lower_bound(file); - return i != files.end() && hasPrefix(*i, file); + auto prefix = file + "/"; + auto i = files.lower_bound(prefix); + return i != files.end() && hasPrefix(*i, prefix); } return files.count(file); diff --git a/tests/fetchGit.sh b/tests/fetchGit.sh index f13de89f7ff4..7b13b587defb 100644 --- a/tests/fetchGit.sh +++ b/tests/fetchGit.sh @@ -16,7 +16,8 @@ git -C $repo config user.email "foobar@example.com" git -C $repo config user.name "Foobar" echo utrecht > $repo/hello -git -C $repo add hello +touch $repo/.gitignore +git -C $repo add hello .gitignore git -C $repo commit -m 'Bla1' rev1=$(git -C $repo rev-parse HEAD) @@ -68,6 +69,7 @@ path2=$(nix eval --raw "(builtins.fetchGit $repo).outPath") [ ! -e $path2/hello ] [ ! -e $path2/bar ] [ ! -e $path2/dir2/bar ] +[ ! -e $path2/.git ] [[ $(cat $path2/dir1/foo) = foo ]] [[ $(nix eval --raw "(builtins.fetchGit $repo).rev") = 0000000000000000000000000000000000000000 ]] diff --git a/tests/fetchMercurial.sh b/tests/fetchMercurial.sh index 6cfc0a708e87..271350ecd171 100644 --- a/tests/fetchMercurial.sh +++ b/tests/fetchMercurial.sh @@ -16,7 +16,8 @@ echo '[ui]' >> $repo/.hg/hgrc echo 'username = Foobar <foobar@example.org>' >> $repo/.hg/hgrc echo utrecht > $repo/hello -hg add --cwd $repo hello +touch $repo/.hgignore +hg add --cwd $repo hello .hgignore hg commit --cwd $repo -m 'Bla1' rev1=$(hg log --cwd $repo -r tip --template '{node}') @@ -69,6 +70,7 @@ path2=$(nix eval --raw "(builtins.fetchMercurial $repo).outPath") [ ! -e $path2/hello ] [ ! -e $path2/bar ] [ ! -e $path2/dir2/bar ] +[ ! -e $path2/.hg ] [[ $(cat $path2/dir1/foo) = foo ]] [[ $(nix eval --raw "(builtins.fetchMercurial $repo).rev") = 0000000000000000000000000000000000000000 ]] |