fetchgit: Add support for specifying branch name

This is useful when `leaveDotGit = true` and some other derivation
expects some branch name to exist.

Previously, `nix-prefetch-git` always created a branch with a
hard-coded name (`fetchgit`).
This commit is contained in:
Ricardo M. Correia 2015-04-20 14:25:14 +02:00
parent b1b4092ad5
commit c55c7e1c1e
3 changed files with 13 additions and 5 deletions

View File

@ -9,6 +9,7 @@ header "exporting $url (rev $rev) into $out"
$fetcher --builder --url "$url" --out "$out" --rev "$rev" \
${leaveDotGit:+--leave-dotGit} \
${deepClone:+--deepClone} \
${fetchSubmodules:+--fetch-submodules}
${fetchSubmodules:+--fetch-submodules} \
${branchName:+--branch-name "$branchName"}
stopNest

View File

@ -13,6 +13,7 @@
in
{ url, rev ? "HEAD", md5 ? "", sha256 ? "", leaveDotGit ? deepClone
, fetchSubmodules ? true, deepClone ? false
, branchName ? null
, name ? urlToName url rev
}:
@ -51,7 +52,7 @@ stdenv.mkDerivation {
outputHashMode = "recursive";
outputHash = if sha256 == "" then md5 else sha256;
inherit url rev leaveDotGit fetchSubmodules deepClone;
inherit url rev leaveDotGit fetchSubmodules deepClone branchName;
GIT_SSL_CAINFO = "${cacert}/etc/ca-bundle.crt";

View File

@ -8,6 +8,7 @@ deepClone=$NIX_PREFETCH_GIT_DEEP_CLONE
leaveDotGit=$NIX_PREFETCH_GIT_LEAVE_DOT_GIT
fetchSubmodules=
builder=
branchName=$NIX_PREFETCH_GIT_BRANCH_NAME
if test -n "$deepClone"; then
deepClone=true
@ -31,6 +32,7 @@ for arg; do
--url) argfun=set_url;;
--rev) argfun=set_rev;;
--hash) argfun=set_hashType;;
--branch-name) argfun=set_branchName;;
--deepClone) deepClone=true;;
--no-deepClone) deepClone=false;;
--leave-dotGit) leaveDotGit=true;;
@ -108,7 +110,7 @@ checkout_hash(){
fi
git fetch ${builder:+--progress} origin || return 1
git checkout -b fetchgit $hash || return 1
git checkout -b $branchName $hash || return 1
}
# Fetch only a branch/tag and checkout it.
@ -131,7 +133,7 @@ checkout_ref(){
if test -n "$ref"; then
# --depth option is ignored on http repository.
git fetch ${builder:+--progress} --depth 1 origin +"$ref" || return 1
git checkout -b fetchgit FETCH_HEAD || return 1
git checkout -b $branchName FETCH_HEAD || return 1
else
return 1
fi
@ -251,7 +253,7 @@ clone_user_rev() {
fi;;
esac
local full_revision=$(cd $dir && (git rev-parse $rev 2> /dev/null || git rev-parse refs/heads/fetchgit) | tail -n1)
local full_revision=$(cd $dir && (git rev-parse $rev 2> /dev/null || git rev-parse refs/heads/$branchName) | tail -n1)
echo "git revision is $full_revision"
echo "git human-readable version is $(cd $dir && (git describe $full_revision 2> /dev/null || git describe --tags $full_revision 2> /dev/null || echo -- none --))" >&2
echo "Commit date is $(cd $dir && git show --no-patch --pretty=%ci $full_revision)"
@ -268,6 +270,10 @@ clone_user_rev() {
fi
}
if test -z "$branchName"; then
branchName=fetchgit
fi
if test -n "$builder"; then
test -n "$out" -a -n "$url" -a -n "$rev" || usage
mkdir $out