From 097c75857dd39ea8ab94f925dab37836afde7ead Mon Sep 17 00:00:00 2001 From: "Julie B." Date: Tue, 4 Jun 2024 22:22:06 +0200 Subject: [PATCH] fetchfromgitforge --- pkgs/build-support/fetchgitforge/default.nix | 59 +++++++++++++++++ pkgs/build-support/fetchgithub/default.nix | 67 ++------------------ pkgs/build-support/packages.nix | 2 + 3 files changed, 67 insertions(+), 61 deletions(-) create mode 100644 pkgs/build-support/fetchgitforge/default.nix diff --git a/pkgs/build-support/fetchgitforge/default.nix b/pkgs/build-support/fetchgitforge/default.nix new file mode 100644 index 0000000..7d38397 --- /dev/null +++ b/pkgs/build-support/fetchgitforge/default.nix @@ -0,0 +1,59 @@ +{ lib, fetchgit, fetchzip }: + +{ owner, repo, rev +, baseUrl, gitRepoUrl, url +, pname +, passthruAttrs +, name +, fetchSubmodules, leaveDotGit +, deepClone, forceFetchGit +, sparseCheckout +, passthru +, meta +}@args: + +let + name = if args.name or null != null then args.name + else "${pname}-${rev}"; + + position = (if args.meta.description or null != null + then builtins.unsafeGetAttrPos "description" args.meta + else builtins.unsafeGetAttrPos "rev" args + ); + newPassthru = passthru // { + inherit rev owner repo; + }; + newMeta = meta // { + homepage = meta.homepage or baseUrl; + } // lib.optionalAttrs (position != null) { + # to indicate where derivation originates, similar to make-derivation.nix's mkDerivation + position = "${position.file}:${toString position.line}"; + }; + useFetchGit = fetchSubmodules || (leaveDotGit == true) || deepClone || forceFetchGit || (sparseCheckout != []); + + + # We prefer fetchzip in cases we don't need submodules as the hash + # is more stable in that case. + fetcher = + if useFetchGit then fetchgit + # fetchzip may not be overridable when using external tools, for example nix-prefetch + else if fetchzip ? override then fetchzip.override { withUnzip = false; } + else fetchzip; + + fetcherArgs = (if useFetchGit + then { + inherit rev deepClone fetchSubmodules sparseCheckout; + url = gitRepoUrl; + passthru = newPassthru; + } // lib.optionalAttrs (leaveDotGit != null) { inherit leaveDotGit; } + else { + passthru = newPassthru // { + inherit gitRepoUrl; + }; + } + ) // passthruAttrs // { inherit name; }; +in + +(fetcher fetcherArgs).overrideAttrs (finalAttrs: previousAttrs: { + meta = newMeta; +}) diff --git a/pkgs/build-support/fetchgithub/default.nix b/pkgs/build-support/fetchgithub/default.nix index 66da4d6..ea7c398 100644 --- a/pkgs/build-support/fetchgithub/default.nix +++ b/pkgs/build-support/fetchgithub/default.nix @@ -1,4 +1,4 @@ -{ lib, fetchgit, fetchzip }: +{ lib, fetchFromGitForge }: lib.makeOverridable ( { owner, repo, rev @@ -7,73 +7,18 @@ lib.makeOverridable ( , fetchSubmodules ? false, leaveDotGit ? null , deepClone ? false, private ? false, forceFetchGit ? false , sparseCheckout ? [] -, githubBase ? "github.com", varPrefix ? null +, githubBase ? "github.com" , passthru ? { } , meta ? { } , ... # For hash agility }@args: let - name = if args.name or null != null then args.name - else "${pname}-${rev}"; - - position = (if args.meta.description or null != null - then builtins.unsafeGetAttrPos "description" args.meta - else builtins.unsafeGetAttrPos "rev" args - ); baseUrl = "https://${githubBase}/${owner}/${repo}"; - newPassthru = passthru // { - inherit rev owner repo; - }; - newMeta = meta // { - homepage = meta.homepage or baseUrl; - } // lib.optionalAttrs (position != null) { - # to indicate where derivation originates, similar to make-derivation.nix's mkDerivation - position = "${position.file}:${toString position.line}"; - }; - passthruAttrs = removeAttrs args [ "owner" "repo" "rev" "fetchSubmodules" "forceFetchGit" "private" "githubBase" "varPrefix" ]; - varBase = "NIX${lib.optionalString (varPrefix != null) "_${varPrefix}"}_GITHUB_PRIVATE_"; - useFetchGit = fetchSubmodules || (leaveDotGit == true) || deepClone || forceFetchGit || (sparseCheckout != []); - # We prefer fetchzip in cases we don't need submodules as the hash - # is more stable in that case. - fetcher = - if useFetchGit then fetchgit - # fetchzip may not be overridable when using external tools, for example nix-prefetch - else if fetchzip ? override then fetchzip.override { withUnzip = false; } - else fetchzip; - privateAttrs = lib.optionalAttrs private { - netrcPhase = '' - if [ -z "''$${varBase}USERNAME" -o -z "''$${varBase}PASSWORD" ]; then - echo "Error: Private fetchFromGitHub requires the nix building process (nix-daemon in multi user mode) to have the ${varBase}USERNAME and ${varBase}PASSWORD env vars set." >&2 - exit 1 - fi - cat > netrc <