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…
Reference in a new issue