fetchGit: Add a test
This commit is contained in:
		
							parent
							
								
									0e77aa3982
								
							
						
					
					
						commit
						4dee01da7c
					
				
					 6 changed files with 90 additions and 2 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue