From a80cacd3ec8582bf3236fcd5031b0715358b3c82 Mon Sep 17 00:00:00 2001 From: Alexey Shmalko Date: Fri, 18 Nov 2016 12:56:08 +0200 Subject: [PATCH] fetchFromGitHub: add fetchSubmodules option This commit extends fetchFromGitHub with ability to fetch GitHub repositories with submodules, so we can use the function consistently with all GitHub repositories. Note it doesn't change the previous behavior. --- pkgs/build-support/fetchgit/default.nix | 2 +- pkgs/top-level/all-packages.nix | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/pkgs/build-support/fetchgit/default.nix b/pkgs/build-support/fetchgit/default.nix index 59e06c95ebba3..982229cf8a5fa 100644 --- a/pkgs/build-support/fetchgit/default.nix +++ b/pkgs/build-support/fetchgit/default.nix @@ -26,7 +26,7 @@ in Cloning branches will make the hash check fail when there is an update. But not all patches we want can be accessed by tags. - The workaround is getting the last n commits so that it's likly that they + The workaround is getting the last n commits so that it's likely that they still contain the hash we want. for now : increase depth iteratively (TODO) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 135f6f850a2e4..49ea32f7085e8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -203,12 +203,25 @@ in fetchFromGitHub = { owner, repo, rev, name ? "${repo}-${rev}-src", + fetchSubmodules ? false, ... # For hash agility - }@args: fetchzip ({ - inherit name; - url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; - meta.homepage = "https://github.com/${owner}/${repo}/"; - } // removeAttrs args [ "owner" "repo" "rev" ]) // { inherit rev; }; + }@args: + let + baseUrl = "https://github.com/${owner}/${repo}"; + passthruAttrs = removeAttrs args [ "owner" "repo" "rev" "fetchSubmodules" ]; + in if fetchSubmodules then + fetchgit ({ + inherit name rev fetchSubmodules; + url = "${baseUrl}.git"; + } // passthruAttrs) + else + # We prefer fetchzip in cases we don't need submodules as the hash + # is more stable in that case. + fetchzip ({ + inherit name; + url = "${baseUrl}/archive/${rev}.tar.gz"; + meta.homepage = "${baseUrl}/"; + } // passthruAttrs) // { inherit rev; }; fetchFromBitbucket = { owner, repo, rev, name ? "${repo}-${rev}-src",