forked from lix-project/lix
fetchGit: Add a test
This commit is contained in:
parent
0e77aa3982
commit
4dee01da7c
|
@ -76,6 +76,9 @@ let
|
||||||
[ curl
|
[ curl
|
||||||
bzip2 xz brotli
|
bzip2 xz brotli
|
||||||
openssl pkgconfig sqlite boehmgc
|
openssl pkgconfig sqlite boehmgc
|
||||||
|
|
||||||
|
# Tests
|
||||||
|
git
|
||||||
mercurial
|
mercurial
|
||||||
]
|
]
|
||||||
++ lib.optional stdenv.isLinux libseccomp
|
++ lib.optional stdenv.isLinux libseccomp
|
||||||
|
|
|
@ -25,6 +25,7 @@ with import ./release-common.nix { inherit pkgs; };
|
||||||
perlPackages.DBDSQLite
|
perlPackages.DBDSQLite
|
||||||
|
|
||||||
# Tests
|
# Tests
|
||||||
|
git
|
||||||
mercurial
|
mercurial
|
||||||
]
|
]
|
||||||
++ lib.optional stdenv.isLinux libseccomp;
|
++ lib.optional stdenv.isLinux libseccomp;
|
||||||
|
|
|
@ -72,7 +72,7 @@ HgInfo exportMercurial(ref<Store> store, const std::string & uri,
|
||||||
time_t now = time(0);
|
time_t now = time(0);
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(stampFile.c_str(), &st) != 0 ||
|
if (stat(stampFile.c_str(), &st) != 0 ||
|
||||||
st.st_mtime < now - settings.tarballTtl)
|
st.st_mtime <= now - settings.tarballTtl)
|
||||||
{
|
{
|
||||||
/* Except that if this is a commit hash that we already have,
|
/* Except that if this is a commit hash that we already have,
|
||||||
we don't have to pull again. */
|
we don't have to pull again. */
|
||||||
|
|
83
tests/fetchGit.sh
Normal file
83
tests/fetchGit.sh
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
source common.sh
|
||||||
|
|
||||||
|
if [[ -z $(type -p git) ]]; then
|
||||||
|
echo "Git not installed; skipping Git tests"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
clearStore
|
||||||
|
|
||||||
|
repo=$TEST_ROOT/git
|
||||||
|
|
||||||
|
rm -rf $repo ${repo}-tmp $TEST_HOME/.cache/nix/git
|
||||||
|
|
||||||
|
git init $repo
|
||||||
|
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
|
||||||
|
git -C $repo commit -m 'Bla1'
|
||||||
|
rev1=$(git -C $repo rev-parse HEAD)
|
||||||
|
|
||||||
|
echo world > $repo/hello
|
||||||
|
git -C $repo commit -m 'Bla2' -a
|
||||||
|
rev2=$(git -C $repo rev-parse HEAD)
|
||||||
|
|
||||||
|
# Fetch the default branch.
|
||||||
|
path=$(nix eval --raw "(builtins.fetchGit file://$repo).outPath")
|
||||||
|
[[ $(cat $path/hello) = world ]]
|
||||||
|
|
||||||
|
# Fetch using an explicit revision hash.
|
||||||
|
path2=$(nix eval --raw "(builtins.fetchGit { url = file://$repo; rev = \"$rev2\"; }).outPath")
|
||||||
|
[[ $path = $path2 ]]
|
||||||
|
|
||||||
|
# Fetch again. This should be cached.
|
||||||
|
mv $repo ${repo}-tmp
|
||||||
|
path2=$(nix eval --raw "(builtins.fetchGit file://$repo).outPath")
|
||||||
|
[[ $path = $path2 ]]
|
||||||
|
|
||||||
|
[[ $(nix eval "(builtins.fetchGit file://$repo).revCount") = 2 ]]
|
||||||
|
[[ $(nix eval --raw "(builtins.fetchGit file://$repo).rev") = $rev2 ]]
|
||||||
|
|
||||||
|
# But with TTL 0, it should fail.
|
||||||
|
(! nix eval --tarball-ttl 0 "(builtins.fetchGit file://$repo)" -vvvvv)
|
||||||
|
|
||||||
|
# Fetching with a explicit hash should succeed.
|
||||||
|
path2=$(nix eval --tarball-ttl 0 --raw "(builtins.fetchGit { url = file://$repo; rev = \"$rev2\"; }).outPath")
|
||||||
|
[[ $path = $path2 ]]
|
||||||
|
|
||||||
|
path2=$(nix eval --tarball-ttl 0 --raw "(builtins.fetchGit { url = file://$repo; rev = \"$rev1\"; }).outPath")
|
||||||
|
[[ $(cat $path2/hello) = utrecht ]]
|
||||||
|
|
||||||
|
mv ${repo}-tmp $repo
|
||||||
|
|
||||||
|
# Using a clean working tree should produce the same result.
|
||||||
|
path2=$(nix eval --raw "(builtins.fetchGit $repo).outPath")
|
||||||
|
[[ $path = $path2 ]]
|
||||||
|
|
||||||
|
# Using an unclean tree should yield the tracked but uncommitted changes.
|
||||||
|
echo foo > $repo/foo
|
||||||
|
echo bar > $repo/bar
|
||||||
|
git -C $repo add foo
|
||||||
|
git -C $repo rm hello
|
||||||
|
|
||||||
|
path2=$(nix eval --raw "(builtins.fetchGit $repo).outPath")
|
||||||
|
[ ! -e $path2/hello ]
|
||||||
|
[ ! -e $path2/bar ]
|
||||||
|
[[ $(cat $path2/foo) = foo ]]
|
||||||
|
|
||||||
|
[[ $(nix eval --raw "(builtins.fetchGit $repo).rev") = 0000000000000000000000000000000000000000 ]]
|
||||||
|
|
||||||
|
# ... unless we're using an explicit ref or rev.
|
||||||
|
path3=$(nix eval --raw "(builtins.fetchGit { url = $repo; ref = \"master\"; }).outPath")
|
||||||
|
[[ $path = $path3 ]]
|
||||||
|
|
||||||
|
path3=$(nix eval --raw "(builtins.fetchGit { url = $repo; rev = \"$rev2\"; }).outPath")
|
||||||
|
[[ $path = $path3 ]]
|
||||||
|
|
||||||
|
# Committing should not affect the store path.
|
||||||
|
git -C $repo commit -m 'Bla3' -a
|
||||||
|
|
||||||
|
path4=$(nix eval --tarball-ttl 0 --raw "(builtins.fetchGit file://$repo).outPath")
|
||||||
|
[[ $path2 = $path4 ]]
|
|
@ -42,7 +42,7 @@ path2=$(nix eval --raw "(builtins.fetchMercurial file://$repo).outPath")
|
||||||
[[ $(nix eval --raw "(builtins.fetchMercurial file://$repo).rev") = $rev2 ]]
|
[[ $(nix eval --raw "(builtins.fetchMercurial file://$repo).rev") = $rev2 ]]
|
||||||
|
|
||||||
# But with TTL 0, it should fail.
|
# But with TTL 0, it should fail.
|
||||||
(! nix eval --tarball-ttl 0 --raw "(builtins.fetchMercurial file://$repo)")
|
(! nix eval --tarball-ttl 0 "(builtins.fetchMercurial file://$repo)")
|
||||||
|
|
||||||
# Fetching with a explicit hash should succeed.
|
# Fetching with a explicit hash should succeed.
|
||||||
path2=$(nix eval --tarball-ttl 0 --raw "(builtins.fetchMercurial { url = file://$repo; rev = \"$rev2\"; }).outPath")
|
path2=$(nix eval --tarball-ttl 0 --raw "(builtins.fetchMercurial { url = file://$repo; rev = \"$rev2\"; }).outPath")
|
||||||
|
|
|
@ -16,6 +16,7 @@ nix_tests = \
|
||||||
build-remote.sh \
|
build-remote.sh \
|
||||||
nar-index.sh \
|
nar-index.sh \
|
||||||
structured-attrs.sh \
|
structured-attrs.sh \
|
||||||
|
fetchGit.sh \
|
||||||
fetchMercurial.sh
|
fetchMercurial.sh
|
||||||
# parallel.sh
|
# parallel.sh
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue