Commit Graph

33 Commits

Author SHA1 Message Date
Yueh-Shun Li
982cafd8c6 fetchgit: use __structuredAttrs = true 2025-12-09 12:35:42 +08:00
Yueh-Shun Li
83b42e34ec fetchgit: keep sparseCheckout a list and stringify as sparseCheckoutText 2025-12-04 15:25:39 +08:00
Alexander Bantyev
296399ec68 fetchgit: add a gitConfigFile argument
Passing a `gitConfigFile` argument as a string allows setting a custom
git config (as `$GIT_CONFIG_GLOBAL`). The most obvious use is to
override URLs with custom mirrors, but others are possible too.
2025-09-29 22:34:11 +02:00
Yuriy Taraday
34612851db fetchgit: Add rootDir argument
With this argument fetchgit will make a subdirectory of the Git
repository a root of the resulting store path. This is helpful for
dealing with monorepos where many projects are in separate directories
and don't need a new source hash every time the monorepo is updated.

Commit hash is removed from the name of the derivation to prevent it
from changing the store path when nothing in the subdirectory changes.
2025-08-08 16:20:05 +02:00
Tim Black
1247031689 pkgs/build-support/fetchgit: add fetchTags parameter
Added fetchTags feature to fetchgit, explicit and clear support for
fetching all tags after the source tree fetch completes. Doing this at
build-time in the fetcher is required for packages that invoke commands
like 'git describe' which require tags, and since the nix store is
read-only by design, it is not possible to git fetch --tags at
activation- or run-time. This feature may have been possible by
specifying a postFetch option including calling git fetch --tags,
however doing so obfuscates the solution to this very real problem.
Explicit support for fetching tags should be a first class citizen just
like fetching other refs.
2025-05-28 16:47:34 -07:00
Adam Dinwoodie
d95d3724d8 fetchgit: add preFetch hook
This allows running code to change the environment before the
nix-prefetch-git script is run.  In particular, it allows setting things
like NIX_PREFETCH_GIT_CHECKOUT_HOOK, which allows additional code to be
run before deleting the .git directory.

This also means there's potentially value in performing a deep clone
then removing the .git directory, so remove the assertion that prevents
doing so.
2025-05-06 14:14:26 +01:00
Valentin Gagarin
c59a777a97 nix-prefetch-git: add --name parameter
This allows tools like `npins` to avoid re-downloading pre-fetched sources at evaluation time,
by setting the same symbolic store path name as `builtins.fetchGit` does,
and would make hacks such as [0] obsolete.

Historical note: `builtins.fetchGit` was introduced in 2016 [1] and
released in 2018 [2]. Before that, there was only the Nixpkgs `fetchgit`,
and the convention for using constant store path names [3] was not established yet [4].

While arguably in retrospect store path names were a mistake, we cannot
undo it here even partially by setting them to a constant, as it would invalidate
countless fixed-output derivations and thus incur an increase in
resource consumption and potentially a large number of build failures.

[0]: f0449d090c
[1]: 38539b943a
[2]: https://github.com/NixOS/nix/releases/tag/2.0
[3]: db00265e81/source/guides/best-practices.md (L263-L264)
[4]: a8603605aa
2025-04-15 12:10:00 +02:00
Wolfgang Walther
cf127c9dc3 treewide: load structured attributes in all bash builders consistently
It's hard to put the sourcing of ./.attrs.sh into all builder
consistently - mistakes will happen. Thus, load structured attrs once in
make-derivation and then source the remaining builder on top.

This should fix quite a few builders with structured attributes in
principle. Most importantly it helps substitute / substituteAll, which
are required for bootstrap on some platforms.
2024-12-29 18:36:47 +01:00
Maximilian Bosch
8bc5104a6e treewide: refactor .attrs.sh detection
When specifying the `builder` attribute in `stdenv.mkDerivation`, this
will be effectively transformed into

    builtins.derivation {
      builder = stdenv.shell;
      args = [ "-e" builder ];
    }

This also means that `default-builder.sh` is never sourced and as a
result it's not guaranteed that `$NIX_ATTRS_SH_FILE` is set to a correct
location[1].

Also, we need to source `.attrs.sh` to source `$stdenv`. So, the
following is done now:

* If `$NIX_ATTRS_SH_FILE` points to a correct location, then use it.
  Directly using `.attrs.sh` is problematic for `nix-shell(1)` usage
  (see previous commit for more context), so prefer the environment
  variable if possible.

* Otherwise, if `.attrs.sh` exists, then use it. See [1] for when this
  can happen.

* If neither applies, it can be assumed that `__structuredAttrs` is
  turned off and thus nothing needs to be done.

[1] It's possible that it doesn't exist at all - in case of Nix 2.3 or
    it can point to a wrong location on older Nix versions with a bug in
    `__structuredAttrs`.
2023-10-04 18:36:57 +02:00
Artturin
fe1c7a1945 treewide: remove usages of header and stopNest
they're obsolete
2023-01-16 00:08:12 +02:00
Artturin
c01f509e44 treewide: source .attrs in builders
if theres a source $stdenv then this is needed

for structuredAttrs
2022-12-08 21:09:02 +02:00
Winter
dbd18a63a7 fetchgit: allow disabling cone mode for sparse checkouts, fix test 2022-08-14 23:03:07 +02:00
Zhong Jianxin
d03a07d5a7 fetchgit: Support sparse checkout
This allow git checkout small parts of a large repo, and avoid fetching
unnecessary blobs from server.
2022-01-24 11:23:56 +08:00
Jonathan Ringer
741285611f fetchgit: add lfs support 2021-01-11 09:41:06 -08:00
Daiderd Jordan
7567c5c1ee fetchgit: add postFetch argument 2017-06-03 20:51:01 +02:00
Danny Wilson
d50d14d55f Use the nix provided shell.
This is guaranteed to be bash, SmartOS has ksh by
 default and doesn't work.
2015-11-16 17:20:11 +01:00
Ricardo M. Correia
c55c7e1c1e fetchgit: Add support for specifying branch name
This is useful when `leaveDotGit = true` and some other derivation
expects some branch name to exist.

Previously, `nix-prefetch-git` always created a branch with a
hard-coded name (`fetchgit`).
2015-04-21 19:46:29 +02:00
Peter Simons
5d02f0e854 fetchgit: add 'deepClone' argument to disable shallow fetching
This patch resolves https://github.com/NixOS/nixpkgs/issues/6395. Deep
cloning is useful in combination with 'leaveDotGit' for builds that want
to run "git describe" to obtain a proper version string, etc., like the
'haskellngPackages.cabal2nix' package does.
2015-03-10 13:14:00 +01:00
ambrop7@gmail.com
3a765a7309 fetchgit: Implement option to not check out submodules. 2014-03-25 20:03:55 +01:00
Nicolas Pierron
9e53a20f50 Replace fetchgit default builder by a wrapper around nix-prefect-git.
svn path=/nixpkgs/trunk/; revision=28709
2011-08-20 14:29:57 +00:00
Peter Simons
c78c1288c3 fetchgit: strip trailing whitespace
svn path=/nixpkgs/trunk/; revision=27862
2011-07-20 22:56:44 +00:00
Peter Simons
0b1bf668cd fetchgit: added support for fetching sub-modules
svn path=/nixpkgs/trunk/; revision=27860
2011-07-20 22:56:35 +00:00
Florian Friesdorf
8e606466b3 fetchgit builder - correctly quote "$rev"
svn path=/nixpkgs/trunk/; revision=27531
2011-06-22 23:33:41 +00:00
Florian Friesdorf
c8f12bd8be fetchgit builder comment: can handle remotes without HEAD
thx civodul for bringing it up and testing

svn path=/nixpkgs/trunk/; revision=27523
2011-06-22 21:01:36 +00:00
Florian Friesdorf
e50e84daa1 fetchgit report fetch progress
svn path=/nixpkgs/trunk/; revision=27522
2011-06-22 19:34:32 +00:00
Florian Friesdorf
ee731974e9 fetchgit builder to handle broken remotes without a HEAD
svn path=/nixpkgs/trunk/; revision=27521
2011-06-22 19:34:27 +00:00
Florian Friesdorf
a8c3649dd4 fetchgit builder rewrite to handle more cases
The old builder failed for:
- remote HEAD != master
- local repositories

svn path=/nixpkgs/trunk/; revision=26984
2011-04-27 03:00:47 +00:00
Ludovic Courtès
8ccb0fda33 fetchgit: Track all remote branches when `$rev' is non-empty.
svn path=/nixpkgs/trunk/; revision=21892
2010-05-19 21:27:01 +00:00
Rob Vermaas
13417770a3 applying patches provided by griswold
svn path=/nixpkgs/trunk/; revision=19707
2010-01-27 12:12:35 +00:00
Lluís Batlle i Rossell
f1ee14bfaf Removing fetchgit --depth and its usage. It does not provide much advantages...
I think it takes the recent N commits into the repository, which says very little,
even for wanting master/HEAD.

svn path=/nixpkgs/trunk/; revision=18277
2009-11-08 01:51:20 +00:00
Michael Raskin
cd04c58fe2 Allow not-that-shallow git fetches; enable it for uzbl
svn path=/nixpkgs/trunk/; revision=17980
2009-10-27 19:52:01 +00:00
Marc Weber
c59fb90f62 make fetchgit and nix-prefetch-git use --depth 1 to receive only a shallow clone cutting history
svn path=/nixpkgs/trunk/; revision=16047
2009-06-26 00:56:54 +00:00
Rob Vermaas
205fb0c87e * fetchgit and nix-prefetch-git
svn path=/nixpkgs/trunk/; revision=16035
2009-06-24 12:48:01 +00:00