summary refs log tree commit diff
path: root/lib/sources.nix
Commit message (Collapse)AuthorAge
* lib.sources: Improve docsJan Tojnar2022-01-30
| | | | | Change comment type so than nixdoc picks them up into Nixpkgs manual. Also improve phrasing a bit and move stuff around so that it is formatted better.
* lib.cleanSource: ignore socketsAlyssa Ross2021-09-17
| | | | | | | | I'm working on a project that involves running a virtual machine monitor program, which creates a control socket in the project directory (because it doesn't make sense to put it anywhere else). This obviously isn't part of the source of my program, so I think cleanSource should filter it out.
* lib.sources.trace: initRobert Hensing2021-05-29
|
* lib.sources.sourceFilesBySuffices: Improve docRobert Hensing2021-05-29
|
* lib/tests/sources.sh: initRobert Hensing2021-05-29
|
* lib/sources: Internal representation for cleanSourceWithRobert Hensing2021-05-29
|
* lib: fix commitIdFromGitRepo (#117752)Léo Gaspard2021-03-27
| | | | | | | | | | | | | | | When in the presence of worktrees, it happens that /commondir has a trailing slash. In these circumstances, it can lead to `lib.pathType` being passed paths like `/foo/bar/.git/`, which in turn lead to `error: attribute '.git' missing`. With this change, we now make sure send properly-formatted paths to all other functions. This, in particular, fixes running NixOS tests on worktrees created by libgit2 on my machine. (Worktrees created by git itself appear to not hit the issue.)
* lib/sources.nix: fix incorrect inheritV2020-10-30
| | | | | | | split comes from builtins, not lib. error: attribute 'split' missing, at /nix/path/nixpkgs/lib/sources.nix:4:4 (use '--show-trace' to show detailed location information)
* lib/sources.nix: Prefer lib for readFile inheritRobert Hensing2020-10-22
|
* lib: Use Nix's static scope checking, fix error message, optimizeRobert Hensing2020-10-22
| | | | | | | | | | | | | | | | | | | Nix can perform static scope checking, but whenever code is inside a `with` expression, the analysis breaks down, because it can't know statically what's in the attribute set whose attributes were brought into scope. In those cases, Nix has to assume that everything works out. Except it doesnt. Removing `with` from lib/ revealed an undefined variable in an error message. If that doesn't convince you that we're better off without `with`, I can tell you that this PR results in a 3% evaluation performance improvement because Nix can look up local variables by index. This adds up with applications like the module system. Furthermore, removing `with` makes the binding site of each variable obvious, which helps with comprehension.
* commitIdFromGitRepo: fix stackoverflow if many branches are used.Jörg Thalheim2020-07-17
| | | | | If many branches are created than builtins.match stack overflows because of a bug in libstdc++: see https://github.com/NixOS/nix/issues/2147
* cleanSourceWith: don't use baseNameOfMichael Peyton Jones2020-03-23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, not providing `name` to `cleanSourceWith` will use the name of the imported directory. However, a common case is for this to be the top level of some repository. In that case, the name will be the name of the checkout on the current machine, which is not necessarily reproducible across different settings, and can lead to e.g. cache misses in CI. This is documented in the comment on `cleanSourceWith`, but this does not stop it being a subtle trap for users. There are different tradeoffs in each case: 1. If `cleanSourceWith` defaults to `"source"`, then we may end up with a user not knowing what directory a source store path corresponds to. However, it being called "unnamed" may give them a clue that there is a way for them to name it, and lead them to the definition of the function, which has a clear `name` parameter. 2. If `cleanSoureWith` defaults to the directory name, then a user may face occasional loss of caching, which is hard to notice, and hard to track down. Tracking it down likely requires use of more advanced tools like `nix-diff`, and reading the source of a lot of nix code. I think the downside of the status quo is worse. This is really another iteration of https://github.com/NixOS/nix/issues/1305: that led to adding the `name` argument in the first place, this just makes us use a better default `name`.
* nixos/version: fix case where .git is a symlinkFranz Pletz2020-01-20
| | | | | | | | | | | Before c9214c394b248e1f26e45dbe1be2bd82363af3a6 and 9d396d2e426b9a765de0b8999aa214f1259633e6 if .git is symlink the version would gracefully default to no git revision. With those changes an exception is thrown instead. This introduces a new function `pathIsGitRepo` that checks if `commitIdFromGitRepo` fails without error so we don't have to reimplement this logic again and can fail gracefully.
* lib.commitIdFromGitRepo: fix support for git-submoduleelseym2020-01-14
| | | | Adds handling for relative references from .git-files, fixing a bug introduced by c9214c394b248e1f26e45dbe1be2bd82363af3a6.
* lib.commitIdFromGitRepo: support git-worktreeelseym2020-01-10
| | | | | | | | | | | | | | lib.commitIdFromGitRepo now resolves the refs from the parent repository in case the supplied path is a file containing the path to said repository. this adds support for git-worktree and things alike. see gitrepository-layout(5). this also: - adds a new boolean function lib.pathIsRegularFile to check whether a path is a regular file - patches lib.revisionWithDefault and the revision and versionSuffix attributes in config.system.nixos in order to support git-worktrees
* lib.cleanSourceWith: Allow name to be set, optional filter, docRobert Hensing2019-09-03
| | | | | | | | | | | | | | This change is API-compatible and hash-compatible with the previous version. At first I considered to write a rename function too, but adding it name to cleanSourceWith was a no-brainer for ease of use. It turns out that a rename function isn't any more useful than cleanSourceWith. To avoid having to write the identity predicate when renaming, the filter is now optional. builtins.path is supported since Nix 2.0 which is required by nixpkgs
* lib: allow sourceByRegex to be composed after cleanSourceWithBas van Dijk2019-07-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `sourceByRegex src regexes` should include a source file if one of the regular expressions `regexes` matches the path of that file relative to `src`. However to compute this relative path `sourceByRegex` uses: ``` relPath = lib.removePrefix (toString src + "/") (toString path); ``` Note that `toString path` evaluates to an absolute file somewhere under `src` and not under `/nix/store`. The problem is that this doesn't work if `src` is a `cleanSourceWith` invocation as well because `toString src` will then evaluate to `src.outPath` which will evaluate to `builtins.filterSource ...` which evaluates to a path in `/nix/store` which is not a prefix of `path`. The solution is to replace `src` with `origSrc` where ``` origSrc = if isFiltered then src.origSrc else src; isFiltered = src ? _isLibCleanSourceWith; ``` Test this by executing the following from the nixpkgs repo: ``` (cat << 'EOI' let pkgs = import ./. {}; in pkgs.runCommand "test-sourceByRegex" { test_sourceByRegex = let src1 = pkgs.lib.sourceByRegex ./. [ "^test-sourceByRegex.nix$" ]; src2 = pkgs.lib.sourceByRegex src1 [ "^test-sourceByRegex.nix$" ]; in src2 + "/test-sourceByRegex.nix"; } '' cp $test_sourceByRegex $out '' EOI ) > test-sourceByRegex.nix nix-build test-sourceByRegex.nix ```
* treewide: Remove usage of isNullDaniel Schaefer2019-04-29
| | | | isNull "is deprecated; just write e == null instead" says the Nix manual
* lib.cleanSourceFilter: Filter all .git, not just directoriesSilvan Mosberger2019-04-08
| | | | | In the case of a worktree created with `git worktree add`, .git is actually a file with contents pointing to the original repository.
* lib: commitIdFromGitRepo: simplify a tiny bitJan Malakhovski2018-11-08
|
* docs: documentation for `cleanSource`Tobias Pflug2018-10-02
|
* callCabal2nix: Fix calling with a path in the store.Shea Levy2018-01-11
|
* Added `lib.cleanSourceWith` as composable version of `filterSource`Will Fancher2018-01-09
|
* Convert libs to a fixed-pointGraham Christensen2017-09-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This does break the API of being able to import any lib file and get its libs, however I'm not sure people did this. I made this while exploring being able to swap out docFn with a stub in #2305, to avoid functor performance problems. I don't know if that is going to move forward (or if it is a problem or not,) but after doing all this work figured I'd put it up anyway :) Two notable advantages to this approach: 1. when a lib inherits another lib's functions, it doesn't automatically get put in to the scope of lib 2. when a lib implements a new obscure functions, it doesn't automatically get put in to the scope of lib Using the test script (later in this commit) I got the following diff on the API: + diff master fixed-lib 11764a11765,11766 > .types.defaultFunctor > .types.defaultTypeMerge 11774a11777,11778 > .types.isOptionType > .types.isType 11781a11786 > .types.mkOptionType 11788a11794 > .types.setType 11795a11802 > .types.types This means that this commit _adds_ to the API, however I can't find a way to fix these last remaining discrepancies. At least none are _removed_. Test script (run with nix-repl in the PATH): #!/bin/sh set -eux repl() { suff=${1:-} echo "(import ./lib)$suff" \ | nix-repl 2>&1 } attrs_to_check() { repl "${1:-}" \ | tr ';' $'\n' \ | grep "\.\.\." \ | cut -d' ' -f2 \ | sed -e "s/^/${1:-}./" \ | sort } summ() { repl "${1:-}" \ | tr ' ' $'\n' \ | sort \ | uniq } deep_summ() { suff="${1:-}" depth="${2:-4}" depth=$((depth - 1)) summ "$suff" for attr in $(attrs_to_check "$suff" | grep -v "types.types"); do if [ $depth -eq 0 ]; then summ "$attr" | sed -e "s/^/$attr./" else deep_summ "$attr" "$depth" | sed -e "s/^/$attr./" fi done } ( cd nixpkgs #git add . #git commit -m "Auto-commit, sorry" || true git checkout fixed-lib deep_summ > ../fixed-lib git checkout master deep_summ > ../master ) if diff master fixed-lib; then echo "SHALLOW MATCH!" fi ( cd nixpkgs git checkout fixed-lib repl .types )
* lib.cleanSourceFilter: Fix VIM swap file filteringTuomas Tynkkynen2017-09-12
| | | | | | | | | | | | | | The backslash wasn't properly escaped, and "\." is apparently equal to ".". So it's accidentally filtering out these valid file names (in Nixpkgs): trace: excluding clfswm trace: excluding larswm trace: excluding mkpasswd While at it, turn the file filter stricter to what it was before e2589b3ca22c93029051efcde62aa773fe3085b4. That is, the file name must start with a dot: '.swp', '.foo.swo' are filtered but 'bar.swf' is not.
* Deduplicate some filterSource invocationsDan Peebles2017-08-29
| | | | | | | | | This version should have more conventional regexes that work across many platforms and regex engines. This is an issue because up until Nix 1.11, Nix called out to the libc regex matcher, which behaved differently on Darwin and Linux. And in Nix 1.12, we're moving to std::regex which will also behave differently here. And yes, I do actually evaluate make-disk-image.nix on Darwin ;)
* lib: Add a function to filter sources by regular expressions.Tom Hunger2017-02-17
|
* Expose guts of `cleanSource`Elliot Cameron2016-11-17
| | | Ref #20511
* lib/sources.nix@commitIdFromGitRepo: parenthesize what should always have beenobadz2016-08-08
| | | | | | Fixes error: cannot coerce a partially applied built-in function to a string, at lib/sources.nix:59:32 I don't understand how this used to work, but doesn't work anymore?
* cleanSource: filter out also nix result symlinks (#16120)Domen Kožar2016-08-06
|
* lib: refactor commitIdFromGitRepo with fileContentsEric Sagnes2016-08-01
|
* lib/sources.nix@commitIdFromGitRepo: remove use of lib.splitStringobadz2016-07-27
| | | | | | | | lib.splitString was blowing up the stack in instances where the .git/packed-refs file was too large. We now use a regexp over the whole file instead. Closes #16570
* nixos/modules/misc/version.nix: check that .git is a directoryobadz2016-06-03
| | | | | That's not the case for git submodules Fixes #15928
* modules/misc/version.nix: populate nixosRevision based on <nixpkgs/.git> ↵obadz2016-05-24
| | | | | | | | | when possible (#15624) Example: $ nixos-option system.nixosLabel Value: "16.09.git.4643ca1"
* Manual: Handle XML files in subdirectoriesEelco Dolstra2014-08-25
|
* cleanSources: Filter *.o and *.soEelco Dolstra2014-02-06
|
* cleanSource: Support MercurialEelco Dolstra2014-02-03
|
* Move pkgs/lib/ to lib/Eelco Dolstra2013-10-10