diff --git a/pkgs/build-support/fetchgit/default.nix b/pkgs/build-support/fetchgit/default.nix index 59e06c95ebba..982229cf8a5f 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 186fa10a6aff..8fef507efbcd 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",