Merge branch 'fix/fetchGit-clean-branch' of git://github.com/dtzWill/nix

This commit is contained in:
Shea Levy 2017-12-27 18:50:08 -05:00
commit 25196d0d26
No known key found for this signature in database
GPG key ID: 5C0BD6957D86FE27
2 changed files with 31 additions and 1 deletions

View file

@ -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;

View file

@ -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 ]]