fetchfromgitforge
This commit is contained in:
parent
afb8fbbbb6
commit
097c75857d
59
pkgs/build-support/fetchgitforge/default.nix
Normal file
59
pkgs/build-support/fetchgitforge/default.nix
Normal file
|
@ -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;
|
||||||
|
})
|
|
@ -1,4 +1,4 @@
|
||||||
{ lib, fetchgit, fetchzip }:
|
{ lib, fetchFromGitForge }:
|
||||||
|
|
||||||
lib.makeOverridable (
|
lib.makeOverridable (
|
||||||
{ owner, repo, rev
|
{ owner, repo, rev
|
||||||
|
@ -7,73 +7,18 @@ lib.makeOverridable (
|
||||||
, fetchSubmodules ? false, leaveDotGit ? null
|
, fetchSubmodules ? false, leaveDotGit ? null
|
||||||
, deepClone ? false, private ? false, forceFetchGit ? false
|
, deepClone ? false, private ? false, forceFetchGit ? false
|
||||||
, sparseCheckout ? []
|
, sparseCheckout ? []
|
||||||
, githubBase ? "github.com", varPrefix ? null
|
, githubBase ? "github.com"
|
||||||
, passthru ? { }
|
, passthru ? { }
|
||||||
, meta ? { }
|
, meta ? { }
|
||||||
, ... # For hash agility
|
, ... # For hash agility
|
||||||
}@args:
|
}@args:
|
||||||
|
|
||||||
let
|
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}";
|
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 <<EOF
|
|
||||||
machine ${githubBase}
|
|
||||||
login ''$${varBase}USERNAME
|
|
||||||
password ''$${varBase}PASSWORD
|
|
||||||
EOF
|
|
||||||
'';
|
|
||||||
netrcImpureEnvVars = [ "${varBase}USERNAME" "${varBase}PASSWORD" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
gitRepoUrl = "${baseUrl}.git";
|
gitRepoUrl = "${baseUrl}.git";
|
||||||
|
url = "${baseUrl}/archive/${rev}.tar.gz";
|
||||||
fetcherArgs = (if useFetchGit
|
passthruAttrs = removeAttrs args [ "owner" "repo" "rev" "fetchSubmodules" "forceFetchGit" "githubBase" "varPrefix" ];
|
||||||
then {
|
|
||||||
inherit rev deepClone fetchSubmodules sparseCheckout; url = gitRepoUrl;
|
|
||||||
passthru = newPassthru;
|
|
||||||
} // lib.optionalAttrs (leaveDotGit != null) { inherit leaveDotGit; }
|
|
||||||
else {
|
|
||||||
url = "${baseUrl}/archive/${rev}.tar.gz";
|
|
||||||
|
|
||||||
passthru = newPassthru // {
|
|
||||||
inherit gitRepoUrl;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
) // privateAttrs // passthruAttrs // { inherit name; };
|
|
||||||
in
|
in
|
||||||
|
fetchFromGitForge {
|
||||||
(fetcher fetcherArgs).overrideAttrs (finalAttrs: previousAttrs: {
|
inherit owner repo rev name pname baseUrl gitRepoUrl url fetchSubmodules leaveDotGit deepClone forceFetchGit sparseCheckout passthruAttrs passthru meta;
|
||||||
meta = newMeta;
|
|
||||||
})
|
})
|
||||||
)
|
|
||||||
|
|
|
@ -310,6 +310,8 @@ with pkgs;
|
||||||
|
|
||||||
# fetchFromGitea = callPackage ./fetchgitea { };
|
# fetchFromGitea = callPackage ./fetchgitea { };
|
||||||
|
|
||||||
|
fetchFromGitForge = callPackage ./fetchgitforge { };
|
||||||
|
|
||||||
fetchFromGitHub = callPackage ./fetchgithub { };
|
fetchFromGitHub = callPackage ./fetchgithub { };
|
||||||
|
|
||||||
# fetchFromBitbucket = callPackage ./fetchbitbucket { };
|
# fetchFromBitbucket = callPackage ./fetchbitbucket { };
|
||||||
|
|
Loading…
Reference in a new issue