From 6779902b32a208f39ab5d073714a12a7ac72bcf1 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 23 Nov 2020 11:08:07 -0700 Subject: [PATCH] fetchgit: support passing tree hashes as "rev" --- pkgs/build-support/fetchgit/nix-prefetch-git | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pkgs/build-support/fetchgit/nix-prefetch-git b/pkgs/build-support/fetchgit/nix-prefetch-git index 3cb115c5e6e6..fc633506fbe7 100755 --- a/pkgs/build-support/fetchgit/nix-prefetch-git +++ b/pkgs/build-support/fetchgit/nix-prefetch-git @@ -149,7 +149,19 @@ checkout_hash(){ fi clean_git fetch -t ${builder:+--progress} origin || return 1 - clean_git checkout -b "$branchName" "$hash" || return 1 + + local object_type=$(git cat-file -t "$hash") + if [[ "$object_type" == "commit" ]]; then + clean_git checkout -b "$branchName" "$hash" || return 1 + elif [[ "$object_type" == "tree" ]]; then + clean_git config user.email "nix-prefetch-git@localhost" + clean_git config user.name "nix-prefetch-git" + local commit_id=$(git commit-tree "$hash" -m "Commit created from tree hash $hash") + clean_git checkout -b "$branchName" "$commit_id" || return 1 + else + echo "Unrecognized git object type: $object_type" + return 1 + fi } # Fetch only a branch/tag and checkout it.