about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/build-support/fetchgit/builder.sh11
1 files changed, 10 insertions, 1 deletions
diff --git a/pkgs/build-support/fetchgit/builder.sh b/pkgs/build-support/fetchgit/builder.sh
index ba06aed90e18..794b690341e3 100644
--- a/pkgs/build-support/fetchgit/builder.sh
+++ b/pkgs/build-support/fetchgit/builder.sh
@@ -5,7 +5,16 @@ header "exporting $url (rev $rev) into $out"
 git clone "$url" $out
 if test -n "$rev"; then
   cd $out
-  git checkout $rev
+
+  # Track all remote branches so that revisions like
+  # `t/foo@{2010-05-12}' are correctly resolved.  Failing to do that,
+  # Git bails out with an "invalid reference" error.
+  for branch in $(git branch -rl | grep -v ' origin/master$')
+  do
+    git branch --track "$(echo $branch | sed -es,origin/,,g)" "$branch"
+  done
+
+  git checkout "$rev" --
 fi
 
 if test -z "$leaveDotGit"; then