fetchGit: Fix handling of local repo when not using 'master' branch
Add tests checking this behavior.
This commit is contained in:
		
							parent
							
								
									aa43cbb764
								
							
						
					
					
						commit
						2e6f06c37e
					
				
					 2 changed files with 31 additions and 1 deletions
				
			
		|  | @ -23,7 +23,7 @@ struct GitInfo | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| GitInfo exportGit(ref<Store> store, const std::string & uri, | GitInfo exportGit(ref<Store> store, const std::string & uri, | ||||||
|     std::experimental::optional<std::string> ref, const std::string & rev, |     std::experimental::optional<std::string> ref, std::string rev, | ||||||
|     const std::string & name) |     const std::string & name) | ||||||
| { | { | ||||||
|     if (!ref && rev == "" && hasPrefix(uri, "/") && pathExists(uri + "/.git")) { |     if (!ref && rev == "" && hasPrefix(uri, "/") && pathExists(uri + "/.git")) { | ||||||
|  | @ -68,6 +68,10 @@ GitInfo exportGit(ref<Store> store, const std::string & uri, | ||||||
| 
 | 
 | ||||||
|             return gitInfo; |             return gitInfo; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         // clean working tree, but no ref or rev specified.  Use 'HEAD'.
 | ||||||
|  |         rev = chomp(runProgram("git", true, { "-C", uri, "rev-parse", "HEAD" })); | ||||||
|  |         ref = "HEAD"s; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!ref) ref = "master"s; |     if (!ref) ref = "master"s; | ||||||
|  |  | ||||||
|  | @ -93,3 +93,29 @@ git -C $repo add hello | ||||||
| git -C $repo commit -m 'Bla4' | git -C $repo commit -m 'Bla4' | ||||||
| rev3=$(git -C $repo rev-parse HEAD) | rev3=$(git -C $repo rev-parse HEAD) | ||||||
| nix eval --tarball-ttl 3600 "(builtins.fetchGit { url = $repo; rev = \"$rev3\"; })" >/dev/null | nix eval --tarball-ttl 3600 "(builtins.fetchGit { url = $repo; rev = \"$rev3\"; })" >/dev/null | ||||||
|  | 
 | ||||||
|  | # Update 'path' to reflect latest master | ||||||
|  | path=$(nix eval --raw "(builtins.fetchGit file://$repo).outPath") | ||||||
|  | 
 | ||||||
|  | # Check behavior when non-master branch is used | ||||||
|  | git -C $repo checkout $rev2 -b dev | ||||||
|  | echo dev > $repo/hello | ||||||
|  | 
 | ||||||
|  | # File URI uses 'master' unless specified otherwise | ||||||
|  | path2=$(nix eval --raw "(builtins.fetchGit file://$repo).outPath") | ||||||
|  | [[ $path = $path2 ]] | ||||||
|  | 
 | ||||||
|  | # Using local path with branch other than 'master' should work when clean or dirty | ||||||
|  | path3=$(nix eval --raw "(builtins.fetchGit $repo).outPath") | ||||||
|  | # (check dirty-tree handling was used) | ||||||
|  | [[ $(nix eval --raw "(builtins.fetchGit $repo).rev") = 0000000000000000000000000000000000000000 ]] | ||||||
|  | 
 | ||||||
|  | # Committing shouldn't change store path, or switch to using 'master' | ||||||
|  | git -C $repo commit -m 'Bla5' -a | ||||||
|  | path4=$(nix eval --raw "(builtins.fetchGit $repo).outPath") | ||||||
|  | [[ $(cat $path4/hello) = dev ]] | ||||||
|  | [[ $path3 = $path4 ]] | ||||||
|  | 
 | ||||||
|  | # Confirm same as 'dev' branch | ||||||
|  | path5=$(nix eval --raw "(builtins.fetchGit { url = $repo; ref = \"dev\"; }).outPath") | ||||||
|  | [[ $path3 = $path5 ]] | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue