summaryrefslogtreecommitdiff
path: root/pkgs/build-support/fetchgit
diff options
context:
space:
mode:
authorYueh-Shun Li <shamrocklee@posteo.net>2025-10-26 21:58:45 +0800
committerYueh-Shun Li <shamrocklee@posteo.net>2025-10-28 06:41:42 +0800
commitaeddd850c6d3485fc1af2edfb111e58141d18dc1 (patch)
tree3b7afbfff860e93b0569e7289b5d2a7eed13a832 /pkgs/build-support/fetchgit
parentfetchgit: restructure with lib.extendMkDerivation (not formatted) (diff)
downloadnixpkgs-aeddd850c6d3485fc1af2edfb111e58141d18dc1.tar.gz
fetchurl, fetchzip, fetchgit: format Nix expression after lib.extendMkDerivation
Diffstat (limited to 'pkgs/build-support/fetchgit')
-rw-r--r--pkgs/build-support/fetchgit/default.nix316
1 files changed, 158 insertions, 158 deletions
diff --git a/pkgs/build-support/fetchgit/default.nix b/pkgs/build-support/fetchgit/default.nix
index 0efeed065589..4ffb998ee205 100644
--- a/pkgs/build-support/fetchgit/default.nix
+++ b/pkgs/build-support/fetchgit/default.nix
@@ -38,183 +38,183 @@ lib.makeOverridable (
extendDrvArgs =
finalAttrs:
- lib.fetchers.withNormalizedHash { } (
- # NOTE Please document parameter additions or changes in
- # ../../../doc/build-helpers/fetchers.chapter.md
- {
- url,
- tag ? null,
- rev ? null,
- name ? urlToName {
- inherit url;
- rev = lib.revOrTag rev tag;
- # when rootDir is specified, avoid invalidating the result when rev changes
- append = if rootDir != "" then "-${lib.strings.sanitizeDerivationName rootDir}" else "";
- },
- leaveDotGit ? deepClone || fetchTags,
- outputHash ? lib.fakeHash,
- outputHashAlgo ? null,
- fetchSubmodules ? true,
- deepClone ? false,
- branchName ? null,
- sparseCheckout ? lib.optional (rootDir != "") rootDir,
- nonConeMode ? rootDir != "",
- nativeBuildInputs ? [ ],
- # Shell code executed before the file has been fetched. This, in
- # particular, can do things like set NIX_PREFETCH_GIT_CHECKOUT_HOOK to
- # run operations between the checkout completing and deleting the .git
- # directory.
- preFetch ? "",
- # Shell code executed after the file has been fetched
- # successfully. This can do things like check or transform the file.
- postFetch ? "",
- preferLocalBuild ? true,
- fetchLFS ? false,
- # Shell code to build a netrc file for BASIC auth
- netrcPhase ? null,
- # Impure env vars (https://nixos.org/nix/manual/#sec-advanced-attributes)
- # needed for netrcPhase
- netrcImpureEnvVars ? [ ],
- passthru ? { },
- meta ? { },
- allowedRequisites ? null,
- # fetch all tags after tree (useful for git describe)
- fetchTags ? false,
- # make this subdirectory the root of the result
- rootDir ? "",
- # GIT_CONFIG_GLOBAL (as a file)
- gitConfigFile ? config.gitConfigFile,
- }:
+ lib.fetchers.withNormalizedHash { } (
+ # NOTE Please document parameter additions or changes in
+ # ../../../doc/build-helpers/fetchers.chapter.md
+ {
+ url,
+ tag ? null,
+ rev ? null,
+ name ? urlToName {
+ inherit url;
+ rev = lib.revOrTag rev tag;
+ # when rootDir is specified, avoid invalidating the result when rev changes
+ append = if rootDir != "" then "-${lib.strings.sanitizeDerivationName rootDir}" else "";
+ },
+ leaveDotGit ? deepClone || fetchTags,
+ outputHash ? lib.fakeHash,
+ outputHashAlgo ? null,
+ fetchSubmodules ? true,
+ deepClone ? false,
+ branchName ? null,
+ sparseCheckout ? lib.optional (rootDir != "") rootDir,
+ nonConeMode ? rootDir != "",
+ nativeBuildInputs ? [ ],
+ # Shell code executed before the file has been fetched. This, in
+ # particular, can do things like set NIX_PREFETCH_GIT_CHECKOUT_HOOK to
+ # run operations between the checkout completing and deleting the .git
+ # directory.
+ preFetch ? "",
+ # Shell code executed after the file has been fetched
+ # successfully. This can do things like check or transform the file.
+ postFetch ? "",
+ preferLocalBuild ? true,
+ fetchLFS ? false,
+ # Shell code to build a netrc file for BASIC auth
+ netrcPhase ? null,
+ # Impure env vars (https://nixos.org/nix/manual/#sec-advanced-attributes)
+ # needed for netrcPhase
+ netrcImpureEnvVars ? [ ],
+ passthru ? { },
+ meta ? { },
+ allowedRequisites ? null,
+ # fetch all tags after tree (useful for git describe)
+ fetchTags ? false,
+ # make this subdirectory the root of the result
+ rootDir ? "",
+ # GIT_CONFIG_GLOBAL (as a file)
+ gitConfigFile ? config.gitConfigFile,
+ }:
- /*
- NOTE:
- fetchgit has one problem: git fetch only works for refs.
- This is because fetching arbitrary (maybe dangling) commits creates garbage collection risks
- and checking whether a commit belongs to a ref is expensive. This may
- change in the future when some caching is added to git (?)
- Usually refs are either tags (refs/tags/*) or branches (refs/heads/*)
- Cloning branches will make the hash check fail when there is an update.
- But not all patches we want can be accessed by tags.
+ /*
+ NOTE:
+ fetchgit has one problem: git fetch only works for refs.
+ This is because fetching arbitrary (maybe dangling) commits creates garbage collection risks
+ and checking whether a commit belongs to a ref is expensive. This may
+ change in the future when some caching is added to git (?)
+ Usually refs are either tags (refs/tags/*) or branches (refs/heads/*)
+ 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 likely that they
- still contain the hash we want.
+ 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)
+ for now : increase depth iteratively (TODO)
- real fix: ask git folks to add a
- git fetch $HASH contained in $BRANCH
- facility because checking that $HASH is contained in $BRANCH is less
- expensive than fetching --depth $N.
- Even if git folks implemented this feature soon it may take years until
- server admins start using the new version?
- */
+ real fix: ask git folks to add a
+ git fetch $HASH contained in $BRANCH
+ facility because checking that $HASH is contained in $BRANCH is less
+ expensive than fetching --depth $N.
+ Even if git folks implemented this feature soon it may take years until
+ server admins start using the new version?
+ */
- assert nonConeMode -> (sparseCheckout != [ ]);
- assert fetchTags -> leaveDotGit;
- assert rootDir != "" -> !leaveDotGit;
+ assert nonConeMode -> (sparseCheckout != [ ]);
+ assert fetchTags -> leaveDotGit;
+ assert rootDir != "" -> !leaveDotGit;
- let
- revWithTag =
let
- warningMsg = "fetchgit requires one of either `rev` or `tag` to be provided (not both).";
- otherIsNull = other: lib.assertMsg (other == null) warningMsg;
+ revWithTag =
+ let
+ warningMsg = "fetchgit requires one of either `rev` or `tag` to be provided (not both).";
+ otherIsNull = other: lib.assertMsg (other == null) warningMsg;
+ in
+ if tag != null then
+ assert (otherIsNull rev);
+ "refs/tags/${tag}"
+ else if rev != null then
+ assert (otherIsNull tag);
+ rev
+ else
+ # FIXME fetching HEAD if no rev or tag is provided is problematic at best
+ "HEAD";
in
- if tag != null then
- assert (otherIsNull rev);
- "refs/tags/${tag}"
- else if rev != null then
- assert (otherIsNull tag);
- rev
- else
- # FIXME fetching HEAD if no rev or tag is provided is problematic at best
- "HEAD";
- in
- if builtins.isString sparseCheckout then
- # Changed to throw on 2023-06-04
- throw
- "Please provide directories/patterns for sparse checkout as a list of strings. Passing a (multi-line) string is not supported any more."
- else
- {
- inherit name;
+ if builtins.isString sparseCheckout then
+ # Changed to throw on 2023-06-04
+ throw
+ "Please provide directories/patterns for sparse checkout as a list of strings. Passing a (multi-line) string is not supported any more."
+ else
+ {
+ inherit name;
- builder = ./builder.sh;
- fetcher = ./nix-prefetch-git;
+ builder = ./builder.sh;
+ fetcher = ./nix-prefetch-git;
- nativeBuildInputs = [
- git
- cacert
- ]
- ++ lib.optionals fetchLFS [ git-lfs ]
- ++ nativeBuildInputs;
+ nativeBuildInputs = [
+ git
+ cacert
+ ]
+ ++ lib.optionals fetchLFS [ git-lfs ]
+ ++ nativeBuildInputs;
- inherit outputHash outputHashAlgo;
- outputHashMode = "recursive";
+ inherit outputHash outputHashAlgo;
+ outputHashMode = "recursive";
- # git-sparse-checkout(1) says:
- # > When the --stdin option is provided, the directories or patterns are read
- # > from standard in as a newline-delimited list instead of from the arguments.
- sparseCheckout = builtins.concatStringsSep "\n" sparseCheckout;
+ # git-sparse-checkout(1) says:
+ # > When the --stdin option is provided, the directories or patterns are read
+ # > from standard in as a newline-delimited list instead of from the arguments.
+ sparseCheckout = builtins.concatStringsSep "\n" sparseCheckout;
- inherit
- url
- leaveDotGit
- fetchLFS
- fetchSubmodules
- deepClone
- branchName
- nonConeMode
- preFetch
- postFetch
- fetchTags
- rootDir
- gitConfigFile
- ;
- rev = revWithTag;
+ inherit
+ url
+ leaveDotGit
+ fetchLFS
+ fetchSubmodules
+ deepClone
+ branchName
+ nonConeMode
+ preFetch
+ postFetch
+ fetchTags
+ rootDir
+ gitConfigFile
+ ;
+ rev = revWithTag;
- postHook =
- if netrcPhase == null then
- null
- else
- ''
- ${netrcPhase}
- # required that git uses the netrc file
- mv {,.}netrc
- export NETRC=$PWD/.netrc
- export HOME=$PWD
- '';
+ postHook =
+ if netrcPhase == null then
+ null
+ else
+ ''
+ ${netrcPhase}
+ # required that git uses the netrc file
+ mv {,.}netrc
+ export NETRC=$PWD/.netrc
+ export HOME=$PWD
+ '';
- impureEnvVars =
- lib.fetchers.proxyImpureEnvVars
- ++ netrcImpureEnvVars
- ++ [
- "GIT_PROXY_COMMAND"
- "NIX_GIT_SSL_CAINFO"
- "SOCKS_SERVER"
+ impureEnvVars =
+ lib.fetchers.proxyImpureEnvVars
+ ++ netrcImpureEnvVars
+ ++ [
+ "GIT_PROXY_COMMAND"
+ "NIX_GIT_SSL_CAINFO"
+ "SOCKS_SERVER"
- # This is a parameter intended to be set by setup hooks or preFetch
- # scripts that want per-URL control over HTTP proxies used by Git
- # (if per-URL control isn't needed, `http_proxy` etc. will
- # suffice). It must be a whitespace-separated (with backslash as an
- # escape character) list of pairs like this:
- #
- # http://domain1/path1 proxy1 https://domain2/path2 proxy2
- #
- # where the URLs are as documented in the `git-config` manual page
- # under `http.<url>.*`, and the proxies are as documented on the
- # same page under `http.proxy`.
- "FETCHGIT_HTTP_PROXIES"
- ];
+ # This is a parameter intended to be set by setup hooks or preFetch
+ # scripts that want per-URL control over HTTP proxies used by Git
+ # (if per-URL control isn't needed, `http_proxy` etc. will
+ # suffice). It must be a whitespace-separated (with backslash as an
+ # escape character) list of pairs like this:
+ #
+ # http://domain1/path1 proxy1 https://domain2/path2 proxy2
+ #
+ # where the URLs are as documented in the `git-config` manual page
+ # under `http.<url>.*`, and the proxies are as documented on the
+ # same page under `http.proxy`.
+ "FETCHGIT_HTTP_PROXIES"
+ ];
- inherit preferLocalBuild meta allowedRequisites;
+ inherit preferLocalBuild meta allowedRequisites;
- passthru = {
- gitRepoUrl = url;
- inherit tag;
- }
- // passthru;
- }
- );
+ passthru = {
+ gitRepoUrl = url;
+ inherit tag;
+ }
+ // passthru;
+ }
+ );
# No ellipsis.
inheritFunctionArgs = false;