diff options
author | Shea Levy <shea@shealevy.com> | 2017-12-27T23·50-0500 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2017-12-27T23·50-0500 |
commit | 25196d0d26cf4ebe68099ebb28d287177425d307 (patch) | |
tree | bb6f598df94445abc38d4a03a1986a5e3ef7fb2b | |
parent | 4801420893766a3845f6ce6dc8c07bab1a2f15e0 (diff) | |
parent | 2e6f06c37e26a5ac5be35fe18f283a1b26de64bf (diff) |
Merge branch 'fix/fetchGit-clean-branch' of git://github.com/dtzWill/nix
-rw-r--r-- | src/libexpr/primops/fetchGit.cc | 6 | ||||
-rw-r--r-- | tests/fetchGit.sh | 26 |
2 files changed, 31 insertions, 1 deletions
diff --git a/src/libexpr/primops/fetchGit.cc b/src/libexpr/primops/fetchGit.cc index e92e0638031f..0d0b11958a4b 100644 --- a/src/libexpr/primops/fetchGit.cc +++ b/src/libexpr/primops/fetchGit.cc @@ -23,7 +23,7 @@ struct GitInfo }; 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) { if (!ref && rev == "" && hasPrefix(uri, "/") && pathExists(uri + "/.git")) { @@ -68,6 +68,10 @@ GitInfo exportGit(ref<Store> store, const std::string & uri, 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; diff --git a/tests/fetchGit.sh b/tests/fetchGit.sh index 09e4f742668e..65d673c08854 100644 --- a/tests/fetchGit.sh +++ b/tests/fetchGit.sh @@ -93,3 +93,29 @@ git -C $repo add hello git -C $repo commit -m 'Bla4' rev3=$(git -C $repo rev-parse HEAD) 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 ]] |