aboutsummaryrefslogtreecommitdiff
path: root/src/libutil
AgeCommit message (Collapse)Author
2020-05-14fix compile errorsBen Burdette
2020-05-13formatting and a few minor changesBen Burdette
2020-05-13change status messages to info levelBen Burdette
2020-05-12no blank line if no LOCBen Burdette
2020-05-12remove unused extra json fieldsBen Burdette
2020-05-11fixes to merged codeBen Burdette
2020-05-11Merge branch 'master' into errors-phase-2Ben Burdette
2020-05-11switch from printError warnings to logWarningsBen Burdette
2020-05-08add pos to errorinfo, remove from hintsBen Burdette
2020-05-08Enable toLower umlauts testTobias Pflug
Update comment and enable the test
2020-05-08Enable `baseNameOf` testTobias Pflug
Add note about removal of trailing slashes in the doc comment of baseNameOf and enabled the test.
2020-05-08Enable `dirOf` testTobias Pflug
Adjusted the doc comment for `dirOf` to reflect the implementation behavior.
2020-05-08configure: Look for gtestEelco Dolstra
2020-05-08Don't install unit testsEelco Dolstra
2020-05-08make check: Run unit testsEelco Dolstra
2020-05-08Fix warningEelco Dolstra
2020-05-08Move unit tests to sr/libutil/tests, use mk make rulesEelco Dolstra
2020-05-07pretending to be constBen Burdette
2020-05-07Remove replaceInSetTobias Pflug
The function isn't being used anywhere so it seems safe to remove
2020-05-06implement SysError errno handlingBen Burdette
2020-05-06Merge pull request #3546 from guibou/nix_readfile_on_0_sized_filesEelco Dolstra
builtins.readFile: do not truncate content
2020-05-06Revert "Merge pull request #3558 from LnL7/ssh-ng-stderr"Eelco Dolstra
This reverts commit 3ebfbecdd187002569257f7cb183bf9e0b39af1e, reversing changes made to c089c52d5f1cff888552f485775b74226dcbe618. https://github.com/NixOS/nix/pull/3558
2020-05-05nix --help: Group commandsEelco Dolstra
2020-05-04appending to hints; remove _printErrorBen Burdette
2020-05-04add normaltxt, yellowify->yellowtxtBen Burdette
2020-05-04affinity operator<<Ben Burdette
2020-05-04Flag: Use designated initializersEelco Dolstra
2020-05-03convert some printError calls to logErrorBen Burdette
2020-05-02logging: handle build log lines in simple loggerDaiderd Jordan
The raw stderr output isn't logged anymore so the build logs need to be printed by the default logger in order for the old commands like nix-build to still show build output.
2020-04-29errorinfo constructor testBen Burdette
2020-04-29StringSink pre allocateGuillaume Bouchard
When used with `readFile`, we have a pretty good heuristic of the file size, so `reserve` this in the `string`. This will save some allocation / copy when the string is growing.
2020-04-29Remove the `drain` argument from `readFile`Guillaume Bouchard
Now it is always `drain` (see previous commit).
2020-04-29uncrustify formattingBen Burdette
2020-04-29builtins.readFile: do not truncate contentGuillaume Bouchard
This closes #3026 by allowing `builtins.readFile` to read a file with a wrongly reported file size, for example, files in `/proc` may report a file size of 0. Reading file in `/proc` is not a good enough motivation, however I do think it just makes nix more robust by allowing more file to be read. Especially, I do considerer the previous behavior to be dangerous because nix was previously reading truncated files. Examples of file system which incorrectly report file size may be network file system or dynamic file system (for performance reason, a dynamic file system such as FUSE may generate the content of the file on demand). ``` nix-repl> builtins.readFile "/proc/version" "" ``` With this commit: ``` nix-repl> builtins.readFile "/proc/version" "Linux version 5.6.7 (nixbld@localhost) (gcc version 9.3.0 (GCC)) #1-NixOS SMP Thu Apr 23 08:38:27 UTC 2020\n" ``` Here is a summary of the behavior changes: - If the reported size is smaller, previous implementation was silently returning a truncated file content. The new implementation is returning the correct file content. - If a file had a bigger reported file size, previous implementation was failing with an exception, but the new implementation is returning the correct file content. This change of behavior is coherent with this pull request. Open questions - The behavior is unchanged for correctly reported file size, however performances may vary because it uses the more complex sink interface. Considering that sink is used a lot, I don't think this impacts the performance a lot. - `builtins.readFile` on an infinite file, such as `/dev/random` may fill the memory. - it does not support adding file to store, such as `${/proc/version}`.
2020-04-28Error classname as nameBen Burdette
2020-04-27astyle formatBen Burdette
2020-04-27Fix long paths permanently breaking GCAlyssa Ross
Suppose I have a path /nix/store/[hash]-[name]/a/a/a/a/a/[...]/a, long enough that everything after "/nix/store/" is longer than 4096 (MAX_PATH) bytes. Nix will happily allow such a path to be inserted into the store, because it doesn't look at all the nested structure. It just cares about the /nix/store/[hash]-[name] part. But, when the path is deleted, we encounter a problem. Nix will move the path to /nix/store/trash, but then when it's trying to recursively delete the trash directory, it will at some point try to unlink /nix/store/trash/[hash]-[name]/a/a/a/a/a/[...]/a. This will fail, because the path is too long. After this has failed, any store deletion operation will never work again, because Nix needs to delete the trash directory before recreating it to move new things to it. (I assume this is because otherwise a path being deleted could already exist in the trash, and then moving it would fail.) This means that if I can trick somebody into just fetching a tarball containing a path of the right length, they won't be able to delete store paths or garbage collect ever again, until the offending path is manually removed from /nix/store/trash. (And even fixing this manually is quite difficult if you don't understand the issue, because the absolute path that Nix says it failed to remove is also too long for rm(1).) This patch fixes the issue by making Nix's recursive delete operation use unlinkat(2). This function takes a relative path and a directory file descriptor. We ensure that the relative path is always just the name of the directory entry, and therefore its length will never exceed 255 bytes. This means that it will never even come close to AX_PATH, and Nix will therefore be able to handle removing arbitrarily deep directory hierachies. Since the directory file descriptor is used for recursion after being used in readDirectory, I made a variant of readDirectory that takes an already open directory stream, to avoid the directory being opened multiple times. As we have seen from this issue, the less we have to interact with paths, the better, and so it's good to reuse file descriptors where possible. I left _deletePath as succeeding even if the parent directory doesn't exist, even though that feels wrong to me, because without that early return, the linux-sandbox test failed. Reported-by: Alyssa Ross <hi@alyssa.is> Thanks-to: Puck Meerburg <puck@puckipedia.com> Tested-by: Puck Meerburg <puck@puckipedia.com> Reviewed-by: Puck Meerburg <puck@puckipedia.com>
2020-04-26error.hhBen Burdette
2020-04-25print dashes instead of empty name stringBen Burdette
2020-04-24don't print blank lines for blank descriptionBen Burdette
2020-04-24all things error to error.hhBen Burdette
2020-04-24add has_value check; remove obslete friend classBen Burdette
2020-04-23'what' stringBen Burdette
2020-04-22Don't include error.hh in util.hh to prevent header bloatEelco Dolstra
2020-04-22Merge branch 'error-format' of https://github.com/bburdette/nixEelco Dolstra
2020-04-21remove 'format' from Error constructor callsBen Burdette
2020-04-21add ErrorInfo to BaseErrorBen Burdette
2020-04-17demoing other error levels than warn/error; rename line and file fields in ↵Ben Burdette
errPos
2020-04-17logError, logWarning; Logger functions; switch to Verbosity enumBen Burdette
2020-04-16iomanip no longer neededBen Burdette