From c55c7e1c1e09dfa57e1a44d08c777f995493d2c9 Mon Sep 17 00:00:00 2001 From: "Ricardo M. Correia" Date: Mon, 20 Apr 2015 14:25:14 +0200 Subject: 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`). --- pkgs/build-support/fetchgit/builder.sh | 3 ++- pkgs/build-support/fetchgit/default.nix | 3 ++- pkgs/build-support/fetchgit/nix-prefetch-git | 12 +++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) (limited to 'pkgs/build-support/fetchgit') diff --git a/pkgs/build-support/fetchgit/builder.sh b/pkgs/build-support/fetchgit/builder.sh index 71374d1f2383..64eea4ae1000 100644 --- a/pkgs/build-support/fetchgit/builder.sh +++ b/pkgs/build-support/fetchgit/builder.sh @@ -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 diff --git a/pkgs/build-support/fetchgit/default.nix b/pkgs/build-support/fetchgit/default.nix index bb89a8f55329..e5ad7200cecf 100644 --- a/pkgs/build-support/fetchgit/default.nix +++ b/pkgs/build-support/fetchgit/default.nix @@ -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"; diff --git a/pkgs/build-support/fetchgit/nix-prefetch-git b/pkgs/build-support/fetchgit/nix-prefetch-git index 486fd3acafb7..b45ce81f8801 100755 --- a/pkgs/build-support/fetchgit/nix-prefetch-git +++ b/pkgs/build-support/fetchgit/nix-prefetch-git @@ -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 -- cgit 1.4.1