├── .gitignore ├── repl-tests ├── debug-nix ├── test1.sh ├── build.sh ├── missing-argument.sh ├── test.sh ├── break.sh ├── let-err.sh ├── nix-build.sh ├── rec-undef.sh ├── underscore.sh ├── elemat.sh ├── cannot-add-float.sh ├── cannot-add-integer.sh ├── trace-let-err.sh ├── undefined-variable.sh ├── attribute-missing.sh ├── gdb-undefined-variable.sh ├── forceInt.sh ├── reg-nix-undefined-variable.sh ├── README.md ├── undefined-variable.nix ├── attribute-missing.nix ├── cannot-add-integer.nix ├── underscore.nix ├── forceInt.nix ├── default.nix ├── cannot-add-float.nix ├── break.nix ├── elemat.nix ├── rec-undef.nix └── let-err.nix ├── README.md ├── colorerrors ├── Cargo.toml ├── Cargo.lock └── src │ └── main.rs ├── error-queue.md ├── counterrs.sh ├── proposal.md └── tktime.txt /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | -------------------------------------------------------------------------------- /repl-tests/debug-nix: -------------------------------------------------------------------------------- 1 | ../../nix/outputs/out/bin/nix -------------------------------------------------------------------------------- /repl-tests/test1.sh: -------------------------------------------------------------------------------- 1 | ./nix build --experimental-features nix-command -f default.nix 2 | -------------------------------------------------------------------------------- /repl-tests/build.sh: -------------------------------------------------------------------------------- 1 | nix-build -E --debugger 'with import { }; callPackage ./default.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/missing-argument.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --debugger -f ./default.nix 2 | -------------------------------------------------------------------------------- /repl-tests/test.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix eval path:///home/bburdette/code/nix-error-project/nix/flake2#modules.hello-closure._final 2 | -------------------------------------------------------------------------------- /repl-tests/break.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./break.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/let-err.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./let-err.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/nix-build.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./default.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/rec-undef.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./rec-undef.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/underscore.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./underscore.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/elemat.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --show-trace --debugger --expr 'with import { }; callPackage ./elemat.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/cannot-add-float.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./cannot-add-float.nix {}' 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nix-error-proposal 2 | 3 | This repo is for developing a [proposal](https://github.com/bburdette/nix-error-proposal/blob/master/proposal.md) for enhancing errors in nix. 4 | -------------------------------------------------------------------------------- /repl-tests/cannot-add-integer.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./cannot-add-integer.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/trace-let-err.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --show-trace --expr 'with import { }; callPackage ./let-err.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/undefined-variable.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./undefined-variable.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/attribute-missing.sh: -------------------------------------------------------------------------------- 1 | ./debug-nix build --experimental-features nix-command --impure --show-trace --debugger --expr 'with import { }; callPackage ./attribute-missing.nix {}' 2 | -------------------------------------------------------------------------------- /repl-tests/gdb-undefined-variable.sh: -------------------------------------------------------------------------------- 1 | gdb --args ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./undefined-variable.nix {}' 2 | -------------------------------------------------------------------------------- /colorerrors/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "colorerrors" 3 | version = "0.1.0" 4 | authors = ["Ben Burdette "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | colored = "1.9" 11 | -------------------------------------------------------------------------------- /repl-tests/forceInt.sh: -------------------------------------------------------------------------------- 1 | # ./nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./forceInt.nix {}' 2 | ./debug-nix build --experimental-features nix-command --impure --show-trace --debugger --expr 'with import { }; callPackage ./forceInt.nix {}' 3 | -------------------------------------------------------------------------------- /repl-tests/reg-nix-undefined-variable.sh: -------------------------------------------------------------------------------- 1 | # ./debug-nix build --experimental-features nix-command --impure --debugger --expr 'with import { }; callPackage ./undefined-variable.nix {}' 2 | nix build --experimental-features nix-command --impure --show-trace --expr 'with import { }; callPackage ./undefined-variable.nix {}' 3 | -------------------------------------------------------------------------------- /error-queue.md: -------------------------------------------------------------------------------- 1 | # Error Queue 2 | 3 | [Issue #2238](https://github.com/NixOS/nix/issues/2259) - can't build because callPackage format. Look in to providing special error for this, ideally with a link to documentation. 4 | 5 | # Completed 6 | 7 | [Issue #2238](https://github.com/NixOS/nix/issues/2238) - Improve error message when missing remote building feature forbids build. Merged with PR [3897](https://github.com/NixOS/nix/pull/3897). Thanks to contributor Cole Mickens! 8 | 9 | [Issue #1885](https://github.com/NixOS/nix/issues/1885) - hash mismatch in downloaded path. Thanks to contributor Domen Kozar! 10 | 11 | -------------------------------------------------------------------------------- /repl-tests/README.md: -------------------------------------------------------------------------------- 1 | These are some test scripts I've been using to work on the nix --debugger flag. 2 | 3 | To test, check out the debugger branch from the PR: 4 | 5 | https://github.com/NixOS/nix/pull/5416 6 | 7 | Build nix in the usual way. 8 | 9 | Then clone this repo, and make a symbolic link to point at your executable. For me its 10 | 11 | `ln -s ../../nix/outputs/out/bin/nix debug-nix` 12 | 13 | Then you can try out some of these scripts. Not all put you in the debuggger, 14 | but these do: 15 | 16 | ./attribute-missing.sh 17 | ./cannot-add-float.nix 18 | ./cannot-add-integer.nix 19 | ./attribute-missing.sh 20 | ./nix-build.sh 21 | ./missing-argument.sh 22 | ./undefined-variable.sh 23 | ./trace-let-err.sh 24 | 25 | 26 | -------------------------------------------------------------------------------- /repl-tests/undefined-variable.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , lib 8 | , callPackage }: 9 | 10 | rustPlatform.buildRustPackage rec { 11 | pname = "zknotes-server"; 12 | version = "1.0"; 13 | 14 | # ui = callPackage ./ui.nix { }; 15 | 16 | src = fetchFromGitHub { 17 | owner = "bburdette"; 18 | repo = "zknotes"; 19 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 20 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 21 | }; 22 | 23 | subPackages = [ "." ]; 24 | 25 | 26 | sourceRoot = "source/server"; 27 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 28 | # dontMakeSourcesWritable=1; 29 | 30 | buildInputs = [openssl sqlite]; 31 | 32 | nativeBuildInputs = [ pkgconfig ]; 33 | 34 | meta = with lib; { 35 | description = "zknotes zettelkasten server."; 36 | homepage = https://github.com/bburdette/zknotes; 37 | license = [ gplX ]; 38 | maintainers = [ ]; 39 | platforms = platforms.all; 40 | }; 41 | } 42 | 43 | -------------------------------------------------------------------------------- /repl-tests/attribute-missing.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , callPackage }: 8 | 9 | # , lib 10 | # , packr 11 | 12 | rustPlatform.buildRustPackage rec { 13 | pname = "zknotes-server"; 14 | version = "1.0"; 15 | 16 | # ui = callPackage ./ui.nix { }; 17 | 18 | src = fetchFromGitHub { 19 | owner = "bburdette"; 20 | repo = "zknotes"; 21 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 22 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 23 | }; 24 | 25 | # preBuild = '' 26 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 27 | # ''; 28 | 29 | # postInstall = '' 30 | # echo "postInttall" 31 | # ls -l $out 32 | # cp -r ${ui}/static $out 33 | # ''; 34 | 35 | # cargo-culting this from the gotify package. 36 | subPackages = [ "." ]; 37 | 38 | 39 | sourceRoot = "source/server"; 40 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 41 | # dontMakeSourcesWritable=1; 42 | 43 | buildInputs = [openssl sqlite]; 44 | 45 | nativeBuildInputs = [ pkgconfig ]; 46 | 47 | meta = with stdenv.lib; { 48 | description = "zknotes zettelkasten server."; 49 | homepage = https://github.com/bburdette/zknotes; 50 | license = [ licenses.gplX ]; 51 | maintainers = [ ]; 52 | platforms = platforms.all; 53 | }; 54 | } 55 | 56 | -------------------------------------------------------------------------------- /repl-tests/cannot-add-integer.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , lib 8 | , callPackage }: 9 | 10 | # , lib 11 | # , packr 12 | 13 | rustPlatform.buildRustPackage rec { 14 | pname = "zknotes-server"; 15 | version = "1.0"; 16 | 17 | # ui = callPackage ./ui.nix { }; 18 | 19 | src = fetchFromGitHub { 20 | owner = "bburdette"; 21 | repo = "zknotes"; 22 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 23 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 24 | }; 25 | 26 | # preBuild = '' 27 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 28 | # ''; 29 | 30 | # postInstall = '' 31 | # echo "postInttall" 32 | # ls -l $out 33 | # cp -r ${ui}/static $out 34 | # ''; 35 | 36 | # cargo-culting this from the gotify package. 37 | subPackages = [ "." ]; 38 | 39 | x = 1 + "five"; 40 | 41 | sourceRoot = "source/server"; 42 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 43 | # dontMakeSourcesWritable=1; 44 | 45 | buildInputs = [openssl sqlite]; 46 | 47 | nativeBuildInputs = [ pkgconfig ]; 48 | 49 | meta = with lib; { 50 | description = "zknotes zettelkasten server."; 51 | homepage = https://github.com/bburdette/zknotes; 52 | license = [ licenses.gpl1 ]; 53 | maintainers = [ ]; 54 | platforms = platforms.all; 55 | }; 56 | } 57 | 58 | -------------------------------------------------------------------------------- /repl-tests/underscore.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , lib 8 | , callPackage }: 9 | 10 | # , lib 11 | # , packr 12 | 13 | rustPlatform.buildRustPackage rec { 14 | pname = "zknotes-server"; 15 | version = "1.0"; 16 | 17 | # ui = callPackage ./ui.nix { }; 18 | 19 | src = fetchFromGitHub { 20 | owner = "bburdette"; 21 | repo = "zknotes"; 22 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 23 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 24 | }; 25 | 26 | # preBuild = '' 27 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 28 | # ''; 29 | 30 | # postInstall = '' 31 | # echo "postInttall" 32 | # ls -l $out 33 | # cp -r ${ui}/static $out 34 | # ''; 35 | 36 | # cargo-culting this from the gotify package. 37 | subPackages = [ "." ]; 38 | 39 | x = __add 1 2; # + "five"; 40 | 41 | sourceRoot = "source/server"; 42 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 43 | # dontMakeSourcesWritable=1; 44 | 45 | buildInputs = [openssl sqlite]; 46 | 47 | nativeBuildInputs = [ pkgconfig ]; 48 | 49 | meta = with lib; { 50 | description = "zknotes zettelkasten server."; 51 | homepage = https://github.com/bburdette/zknotes; 52 | license = [ licenses.gpl1 ]; 53 | maintainers = [ ]; 54 | platforms = platforms.all; 55 | }; 56 | } 57 | 58 | -------------------------------------------------------------------------------- /repl-tests/forceInt.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , lib 8 | , callPackage }: 9 | 10 | # , lib 11 | # , packr 12 | 13 | rustPlatform.buildRustPackage rec { 14 | pname = "zknotes-server"; 15 | version = "1.0"; 16 | 17 | # ui = callPackage ./ui.nix { }; 18 | 19 | src = fetchFromGitHub { 20 | owner = "bburdette"; 21 | repo = "zknotes"; 22 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 23 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 24 | }; 25 | 26 | # preBuild = '' 27 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 28 | # ''; 29 | 30 | # postInstall = '' 31 | # echo "postInttall" 32 | # ls -l $out 33 | # cp -r ${ui}/static $out 34 | # ''; 35 | 36 | # cargo-culting this from the gotify package. 37 | subPackages = [ "." ]; 38 | 39 | x = "five"; 40 | y = builtins.mul x 6; 41 | 42 | sourceRoot = "source/server"; 43 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 44 | # dontMakeSourcesWritable=1; 45 | 46 | buildInputs = [openssl sqlite]; 47 | 48 | nativeBuildInputs = [ pkgconfig ]; 49 | 50 | meta = with lib; { 51 | description = "zknotes zettelkasten server."; 52 | homepage = https://github.com/bburdette/zknotes; 53 | license = licenses.gpl3; 54 | maintainers = [ ]; 55 | platforms = platforms.all; 56 | }; 57 | } 58 | 59 | -------------------------------------------------------------------------------- /repl-tests/default.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , callPackage }: 8 | 9 | # , lib 10 | # , packr 11 | 12 | rustPlatform.buildRustPackage rec { 13 | pname = "zknotes-server"; 14 | version = "1.0"; 15 | 16 | # ui = callPackage ./ui.nix { }; 17 | 18 | src = fetchFromGitHub { 19 | owner = "bburdette"; 20 | repo = "zknotes"; 21 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 22 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 23 | }; 24 | 25 | # preBuild = '' 26 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 27 | # ''; 28 | 29 | # postInstall = '' 30 | # echo "postInttall" 31 | # ls -l $out 32 | # cp -r ${ui}/static $out 33 | # ''; 34 | 35 | # cargo-culting this from the gotify package. 36 | subPackages = [ "." ]; 37 | 38 | x = builtins.mul == 1; 39 | y = 1 + x; 40 | 41 | sourceRoot = "source/server"; 42 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 43 | # dontMakeSourcesWritable=1; 44 | 45 | buildInputs = [openssl sqlite]; 46 | 47 | nativeBuildInputs = [ pkgconfig ]; 48 | 49 | meta = with stdenv.lib; { 50 | description = "zknotes zettelkasten server."; 51 | homepage = https://github.com/bburdette/zknotes; 52 | license = [ licenses.gpl1 ]; 53 | maintainers = [ x ]; 54 | platforms = platforms.all; 55 | }; 56 | } 57 | 58 | -------------------------------------------------------------------------------- /repl-tests/cannot-add-float.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , callPackage 8 | , lib}: 9 | 10 | # , lib 11 | # , packr 12 | 13 | rustPlatform.buildRustPackage rec { 14 | pname = "zknotes-server"; 15 | version = "1.0"; 16 | 17 | # ui = callPackage ./ui.nix { }; 18 | 19 | src = fetchFromGitHub { 20 | owner = "bburdette"; 21 | repo = "zknotes"; 22 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 23 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 24 | }; 25 | 26 | # preBuild = '' 27 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 28 | # ''; 29 | 30 | # postInstall = '' 31 | # echo "postInttall" 32 | # ls -l $out 33 | # cp -r ${ui}/static $out 34 | # ''; 35 | 36 | # cargo-culting this from the gotify package. 37 | subPackages = [ "." ]; 38 | 39 | x = 1 + "five"; 40 | 41 | z = "zett"; 42 | 43 | y = "yott"; 44 | 45 | sourceRoot = "source/server"; 46 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 47 | # dontMakeSourcesWritable=1; 48 | 49 | buildInputs = [openssl sqlite]; 50 | 51 | nativeBuildInputs = [ pkgconfig ]; 52 | 53 | meta = with lib; { 54 | description = "zknotes zettelkasten server."; 55 | homepage = https://github.com/bburdette/zknotes; 56 | license = [ licenses.gpl1 ]; 57 | maintainers = [ ]; 58 | platforms = platforms.all; 59 | }; 60 | } 61 | 62 | -------------------------------------------------------------------------------- /repl-tests/break.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , lib 8 | , callPackage }: 9 | 10 | # , lib 11 | # , packr 12 | 13 | rustPlatform.buildRustPackage rec { 14 | pname = "zknotes-server"; 15 | version = "1.0"; 16 | 17 | # ui = callPackage ./ui.nix { }; 18 | 19 | wat = break 5; 20 | x = 1 + wat; 21 | 22 | src = fetchFromGitHub { 23 | # wat = builtins.abort "blah"; 24 | owner = break "bburdette"; 25 | repo = "zknotes"; 26 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 27 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 28 | }; 29 | 30 | # preBuild = '' 31 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 32 | # ''; 33 | 34 | # postInstall = '' 35 | # echo "postInttall" 36 | # ls -l $out 37 | # cp -r ${ui}/static $out 38 | # ''; 39 | 40 | # cargo-culting this from the gotify package. 41 | subPackages = [ "." ]; 42 | 43 | # x = 1 + "five"; 44 | 45 | sourceRoot = break "source/server"; 46 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 47 | # dontMakeSourcesWritable=1; 48 | 49 | buildInputs = [openssl sqlite]; 50 | 51 | nativeBuildInputs = [ pkgconfig ]; 52 | 53 | meta = with lib; { 54 | description = break "zknotes zettelkasten server."; 55 | homepage = https://github.com/bburdette/zknotes; 56 | license = [ licenses.gpl1 ]; 57 | maintainers = [ ]; 58 | platforms = platforms.all; 59 | }; 60 | } 61 | -------------------------------------------------------------------------------- /repl-tests/elemat.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , lib 8 | , callPackage }: 9 | 10 | # , lib 11 | # , packr 12 | 13 | rustPlatform.buildRustPackage rec { 14 | pname = "zknotes-server"; 15 | version = "1.0"; 16 | 17 | test = ["meh" "you" "bburdette"]; 18 | 19 | idx = (break 5); 20 | 21 | # ui = callPackage ./ui.nix { }; 22 | 23 | src = fetchFromGitHub { 24 | # thunk error. 25 | # owner = builtins.elemAt test (break idx); 26 | # works 27 | owner = builtins.elemAt test idx; 28 | repo = "zknotes"; 29 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 30 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 31 | }; 32 | 33 | # preBuild = '' 34 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 35 | # ''; 36 | 37 | # postInstall = '' 38 | # echo "postInttall" 39 | # ls -l $out 40 | # cp -r ${ui}/static $out 41 | # ''; 42 | 43 | # cargo-culting this from the gotify package. 44 | subPackages = [ "." ]; 45 | 46 | 47 | sourceRoot = "source/server"; 48 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 49 | # dontMakeSourcesWritable=1; 50 | 51 | buildInputs = [openssl sqlite]; 52 | 53 | nativeBuildInputs = [ pkgconfig ]; 54 | 55 | meta = with lib; { 56 | description = "zknotes zettelkasten server."; 57 | homepage = https://github.com/bburdette/zknotes; 58 | license = licenses.gpl3; 59 | maintainers = [ ]; 60 | platforms = platforms.all; 61 | }; 62 | } 63 | 64 | -------------------------------------------------------------------------------- /repl-tests/rec-undef.nix: -------------------------------------------------------------------------------- 1 | { stdenv 2 | , fetchFromGitHub 3 | , rustPlatform 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , lib 8 | , callPackage }: 9 | 10 | # , lib 11 | # , packr 12 | 13 | rustPlatform.buildRustPackage rec { 14 | pname = "zknotes-server"; 15 | # version = "1.0"; 16 | 17 | 18 | version = let q = 5; 19 | r = 7; 20 | in 21 | builtins.toString (q + r + ".1"); 22 | 23 | # v = let z = 5; 24 | # in 25 | # t = let bar = {x}: x + 1; 26 | # foo = a: (bar {b=a;}) + 1; 27 | # q = foo {x=5;}; 28 | # in 29 | # q + z; 30 | # wat = bar {b=6;}; 31 | 32 | # ui = callPackage ./ui.nix { }; 33 | 34 | src = fetchFromGitHub { 35 | owner = "bburdette"; #+ foo(5); 36 | repo = "zknotes"; 37 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 38 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 39 | }; 40 | 41 | # preBuild = '' 42 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 43 | # ''; 44 | 45 | # postInstall = '' 46 | # echo "postInttall" 47 | # ls -l $out 48 | # cp -r ${ui}/static $out 49 | # ''; 50 | 51 | # cargo-culting this from the gotify package. 52 | subPackages = [ "." ]; 53 | 54 | 55 | sourceRoot = "source/server"; 56 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 57 | # dontMakeSourcesWritable=1; 58 | 59 | buildInputs = [openssl sqlite]; 60 | 61 | nativeBuildInputs = [ pkgconfig ]; 62 | 63 | # meta = with stdenv.lib; { 64 | meta = with lib; { 65 | description = "zknotes zettelkasten server."; 66 | homepage = https://github.com/bburdette/zknotes; 67 | license = licenses.gpl1; 68 | maintainers = [ ]; 69 | platforms = platforms.all; 70 | }; 71 | } 72 | 73 | -------------------------------------------------------------------------------- /repl-tests/let-err.nix: -------------------------------------------------------------------------------- 1 | { rustPlatform 2 | , stdenv 3 | , fetchFromGitHub 4 | , openssl 5 | , pkgconfig 6 | , sqlite 7 | , lib 8 | , callPackage }: 9 | 10 | # , lib 11 | # , packr 12 | 13 | rustPlatform.buildRustPackage rec { 14 | pname = "zknotes-server"; 15 | # version = "1.0"; 16 | 17 | 18 | version = with { q = 5; 19 | r = 7; }; 20 | builtins.toString (q + r + "1"); 21 | 22 | blah = stdenv.system; 23 | # blah = builtins.toString rustPlatform.targetPlatform; 24 | 25 | # version = let q = 5; 26 | # r = 7; 27 | # in 28 | # builtins.toString (q + r + "1"); 29 | 30 | # v = let z = 5; 31 | # in 32 | # t = let bar = {x}: x + 1; 33 | # foo = a: (bar {b=a;}) + 1; 34 | # q = foo {x=5;}; 35 | # in 36 | # q + z; 37 | # wat = bar {b=6;}; 38 | 39 | # ui = callPackage ./ui.nix { }; 40 | 41 | src = fetchFromGitHub { 42 | owner = "bburdette" + blah; #+ foo(5); 43 | repo = "zknotes"; 44 | rev = "8166ed086f058e537bdbe8971192b1085acecc30"; 45 | sha256 = "13fbzn5m46jm53lxq2ccby427pgb8a08v8giz4xl560d19xjjb6f"; 46 | }; 47 | 48 | # preBuild = '' 49 | # cp -r ${ui}/libexec/gotify-ui/deps/gotify-ui/build ui/build && packr 50 | # ''; 51 | 52 | # postInstall = '' 53 | # echo "postInttall" 54 | # ls -l $out 55 | # cp -r ${ui}/static $out 56 | # ''; 57 | 58 | # cargo-culting this from the gotify package. 59 | subPackages = [ "." ]; 60 | 61 | 62 | sourceRoot = "source/server"; 63 | cargoSha256 = "1sx9ihzwn1vb1dx48ykzg1b9xdbjk4cbzs89labhgljhh51sr64p"; 64 | # dontMakeSourcesWritable=1; 65 | 66 | buildInputs = [openssl sqlite]; 67 | 68 | nativeBuildInputs = [ pkgconfig ]; 69 | 70 | # meta = with stdenv.lib; { 71 | meta = with lib; { 72 | description = "zknotes zettelkasten server."; 73 | homepage = https://github.com/bburdette/zknotes; 74 | license = licenses.gpl1; 75 | maintainers = [ ]; 76 | platforms = platforms.all; 77 | }; 78 | } 79 | 80 | -------------------------------------------------------------------------------- /counterrs.sh: -------------------------------------------------------------------------------- 1 | # run from nix/src 2 | 3 | ambs --no-color --column -r throw+[a-zA-Z]*Error > ../../rawerrors.txt 4 | ambs --no-color --column "SQLiteError(" >> ../../rawerrors.txt 5 | ambs --no-color --column "SQLiteBusy(" >> ../../rawerrors.txt 6 | ambs --no-color --column "NotDeterministic(" >> ../../rawerrors.txt 7 | ambs --no-color --column "NoSuchBinaryCacheFile(" >> ../../rawerrors.txt 8 | ambs --no-color --column "SubstError(" >> ../../rawerrors.txt 9 | ambs --no-color --column "BuildError(" >> ../../rawerrors.txt 10 | ambs --no-color --column "InvalidPath(" >> ../../rawerrors.txt 11 | ambs --no-color --column "Unsupported(" >> ../../rawerrors.txt 12 | ambs --no-color --column "SubstituteGone(" >> ../../rawerrors.txt 13 | ambs --no-color --column "SubstituterDisabled(" >> ../../rawerrors.txt 14 | ambs --no-color --column "NotInStore(" >> ../../rawerrors.txt 15 | ambs --no-color --column "PathInUse(" >> ../../rawerrors.txt 16 | ambs --no-color --column "UploadToHTTP(" >> ../../rawerrors.txt 17 | ambs --no-color --column "BadStorePath(" >> ../../rawerrors.txt 18 | ambs --no-color --column "JSONParseError(" >> ../../rawerrors.txt 19 | ambs --no-color --column "EvalError(" >> ../../rawerrors.txt 20 | ambs --no-color --column "ParseError(" >> ../../rawerrors.txt 21 | ambs --no-color --column "AssertionError(" >> ../../rawerrors.txt 22 | ambs --no-color --column "ThrownError(" >> ../../rawerrors.txt 23 | ambs --no-color --column "Abort(" >> ../../rawerrors.txt 24 | ambs --no-color --column "TypeError(" >> ../../rawerrors.txt 25 | ambs --no-color --column "UndefinedVarError(" >> ../../rawerrors.txt 26 | ambs --no-color --column "RestrictedPathError(" >> ../../rawerrors.txt 27 | ambs --no-color --column "AttrPathNotFound(" >> ../../rawerrors.txt 28 | ambs --no-color --column "NoPositionInfo(" >> ../../rawerrors.txt 29 | ambs --no-color --column "UnknownCompressionMethod(" >> ../../rawerrors.txt 30 | ambs --no-color --column "CompressionError(" >> ../../rawerrors.txt 31 | ambs --no-color --column "BadHash(" >> ../../rawerrors.txt 32 | ambs --no-color --column "BadURL(" >> ../../rawerrors.txt 33 | ambs --no-color --column "UsageError(" >> ../../rawerrors.txt 34 | ambs --no-color --column "Error(" >> ../../rawerrors.txt 35 | ambs --no-color --column "SerialisationError(" >> ../../rawerrors.txt 36 | ambs --no-color --column "EndOfFile(" >> ../../rawerrors.txt 37 | ambs --no-color --column "Interrupted(" >> ../../rawerrors.txt 38 | ambs --no-color --column "FormatError(" >> ../../rawerrors.txt 39 | ambs --no-color --column "ThreadPoolShutDown(" >> ../../rawerrors.txt 40 | ambs --no-color --column "logWarning(" >> ../../rawerrors.txt 41 | ambs --no-color --column "logError(" >> ../../rawerrors.txt 42 | 43 | sed "s/.(B.\[m//g" ../../rawerrors.txt | grep "printError" -v | grep "MakeError" -v | grep "LocalNoInlineNoReturn" -v | sort -u > ../../errors.txt 44 | 45 | rm ../../rawerrors.txt 46 | -------------------------------------------------------------------------------- /colorerrors/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "atty" 5 | version = "0.2.14" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | dependencies = [ 8 | "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 9 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 10 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 11 | ] 12 | 13 | [[package]] 14 | name = "colored" 15 | version = "1.9.2" 16 | source = "registry+https://github.com/rust-lang/crates.io-index" 17 | dependencies = [ 18 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 19 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 20 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 21 | ] 22 | 23 | [[package]] 24 | name = "colorerrors" 25 | version = "0.1.0" 26 | dependencies = [ 27 | "colored 1.9.2 (registry+https://github.com/rust-lang/crates.io-index)", 28 | ] 29 | 30 | [[package]] 31 | name = "hermit-abi" 32 | version = "0.1.6" 33 | source = "registry+https://github.com/rust-lang/crates.io-index" 34 | dependencies = [ 35 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 36 | ] 37 | 38 | [[package]] 39 | name = "lazy_static" 40 | version = "1.4.0" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | 43 | [[package]] 44 | name = "libc" 45 | version = "0.2.66" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | 48 | [[package]] 49 | name = "winapi" 50 | version = "0.3.8" 51 | source = "registry+https://github.com/rust-lang/crates.io-index" 52 | dependencies = [ 53 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 54 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 55 | ] 56 | 57 | [[package]] 58 | name = "winapi-i686-pc-windows-gnu" 59 | version = "0.4.0" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | 62 | [[package]] 63 | name = "winapi-x86_64-pc-windows-gnu" 64 | version = "0.4.0" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | 67 | [metadata] 68 | "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 69 | "checksum colored 1.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8815e2ab78f3a59928fc32e141fbeece88320a240e43f47b2fd64ea3a88a5b3d" 70 | "checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772" 71 | "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 72 | "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" 73 | "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 74 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 75 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 76 | -------------------------------------------------------------------------------- /proposal.md: -------------------------------------------------------------------------------- 1 | # Nix Error Enhancement 2 | 3 | One of the areas where Nix could have increased ease of use is in error quality. 4 | 5 | In the past decade there has been a trend towards increased ease of use for development tools. The Elm language is one of the leaders in this area, having inspired [helpful errors](https://blog.rust-lang.org/2016/08/10/Shape-of-errors-to-come.html) in other projects such as Rust. [This article](https://elm-lang.org/news/compiler-errors-for-humans) by the author of Elm outlines their basic approach. 6 | 7 | The main goal of these enhanced errors is to minimize the time that the nix user must spend to correct their problem. Ideally the error should provide all the information needed to fix things and move on, without having to resort to the docs, online help, or grepping through nixpkgs. If an error message can't provide a solution, at least it should indicate where the problem occurred and where to look for more information. 8 | 9 | This will involve two main parts: creating an enhanced error format, and creating the corresponding content for each error. 10 | 11 | The error format ought to: 12 | * Have a consistent layout that's easily recognizable by the user, with the same types of data in the same places every time. 13 | * Have a clear divider to show where the error report begins, and to separate multiple errors from each other. 14 | * Be easy to see amid a wash of log data or debug output. 15 | * Show the file, line and column of the code where the error occurred, whenever possible. 16 | * Show the actual text of the offending code in the error itself. 17 | * Show the context of the problem code - preceding and following lines. 18 | * Use color in the format to make it quicker to parse visually. 19 | * Provide a general description of the error. 20 | * Provide a more concrete hint section. 21 | * Provide links to the nix docs for more detail. 22 | 23 | Content wise, the main enhancement is the hint section. 24 | This ought to provide additional context for the error - not just what happened, but why. 25 | How does the error relate to my code, and what should I do to fix it? 26 | Concrete examples are helpful here, and templated strings in the hint can make it 27 | even more immediately relatable, with the strings pulled from the user's own code. 28 | 29 | ## Error Template 30 | 31 | Errors messages should, as much as possible, share a common format for consistency. For nix language errors, an error template would look something like this: 32 | 33 | error/warning: --- ----------------------------------- \ 34 | in file: at line: 35 | 36 | 37 | 38 | | 39 | | 40 | | ^^^^^ 41 | | 42 | 43 | 44 | 45 | And rendered in the terminal, with colored text: 46 | 47 | ![generic error](https://bots.practica.site/static/nixerr-imgs/generic.png) 48 | 49 | For different categories of error, the rendered error will contain different information. Speaking of which: 50 | 51 | ## Categories of nix errors 52 | 53 | For inspiration - and concrete examples - I've gone through the nix issue database on github and flagged issues that are candidates for error message improvement. There are about 90 issues, and they fall roughly into four categories: 54 | 55 | * **language**: syntax errors and the like in the nix language. (13 issues) 56 | * **builtin**: errors that occur in builtin functions. (6 issues) 57 | * **tool**: non-language errors returned by tools like nix-build or nix-copy-clojure. (65 issues) 58 | * **builder**: errors that occur in a builder, like bash. (2 issues) 59 | 60 | These are available in this [spreadsheet](https://docs.google.com/spreadsheets/d/1YeMT8nQPaMaZWLKE0IqVY5o8XvfiNbhuv1TWWZ0VwJk/edit#gid=1201267462) with the candidate errors at the top. 61 | 62 | ## Language Errors 63 | 64 | Language errors will make use of the full error template. There may be a nix file that contains the error, and a line of code where the error occurred. 65 | 66 | ### language warning example: 67 | 68 | [Issue 3088:](https://github.com/NixOS/nix/issues/3088) nix-build ignores attributes with a period {"a.b" = drv} 69 | 70 | This works: 71 | 72 | $ nix-build --expr '{ hi = (import {}).hello; }' 73 | /nix/store/...-hello-2.10 74 | 75 | 76 | But this: 77 | 78 | $ nix-build --expr '{ "hi.there" = (import {}).hello; }' 79 | 80 | Should produce a warning at least. Current output: 81 | 82 | ![language_warning_before](https://bots.practica.site/static/nixerr-imgs/hi.there.before.png) 83 | 84 | Proposed warning output: 85 | 86 | ![language warning](https://bots.practica.site/static/nixerr-imgs/attributename.png) 87 | 88 | Since there was a problem in a nix expression, this example includes the line number and line of code where the problem occurred. 89 | 90 | ### language error example: 91 | 92 | [Issue 3063:](https://github.com/NixOS/nix/issues/3063) Nix should fail (or warn) on unsupported string escapes 93 | 94 | Current output - bad character is siliently ignored: 95 | 96 | ![escape char before image](https://bots.practica.site/static/nixerr-imgs/escape.before.png) 97 | 98 | Proposed error output: 99 | 100 | ![escape char image](https://bots.practica.site/static/nixerr-imgs/escapechar.png) 101 | ## Builtin Errors 102 | 103 | The error format for builtin errors is the same as the language errors, but the errors themselves may come from software external to nix, like git. We may want to detect or interpret errors that these programs return in the context of nix usage. An example: 104 | 105 | [Issue 2431:](https://github.com/NixOS/nix/issues/2431) fetchGit fails with a not very helpful error message when fetching a revision not in the remote's HEAD. 106 | 107 | Current output: 108 | 109 | ![fetchgit image](https://bots.practica.site/static/nixerr-imgs/fetchgit-before.png) 110 | 111 | Proposed output: 112 | 113 | ![fetchgit image](https://bots.practica.site/static/nixerr-imgs/fetchgit.png) 114 | 115 | ## Tool Errors 116 | 117 | These are warnings and errors from nix tools like nix-copy-closure, nix-collect-garbage, nix-instantiate, etc. In the github issue database, most of the tool issues are requests for warnings when certain conditions hold. 118 | 119 | #### warning example: 120 | [Issue 1492:](https://github.com/NixOS/nix/issues/1492) nix-collect-garbage -d should issue a warning when run as non-root user 121 | 122 | Current output: 123 | 124 | ![garbage before image](https://bots.practica.site/static/nixerr-imgs/garbage-before.png) 125 | 126 | Proposed output: 127 | 128 | ![garbage image](https://bots.practica.site/static/nixerr-imgs/garbage.png) 129 | 130 | This is admittedly pretty heavyweight output for many warning messages. 131 | For new users, it would be helpful though. Lowering the verbosity level below the default 132 | could reduce the output. 133 | 134 | 135 | #### error example: 136 | [Issue 2238:](https://github.com/NixOS/nix/issues/2238) Improve error message when missing remote building feature forbids build 137 | 138 | ``` 139 | nix-store --realise --builders 'ssh://root@1.2.3.4 x86_64-linux' -j0 /nix/store/i0kwyxpihg1gcp9jg4qwp7qcrpagj818-chromium-67.0.3396.87.drv /nix/store/bmigs53iryqpqjsy5w4qjfndlh6hxbms-chromium-67.0.3396.87.drv 140 | ``` 141 | 142 | current output: 143 | 144 | ![fetchgit image](https://bots.practica.site/static/nixerr-imgs/chromium.fail.png) 145 | 146 | Proposed output: 147 | 148 | ![fetchgit image](https://bots.practica.site/static/nixerr-imgs/remote-builder.png) 149 | 150 | ### class 4: bash/builder errors. 151 | 152 | Debugging bash and other builders is outside the scope of this project. But we can look at adding error messages that point 153 | at helpful documentation when builder errors occur. 154 | 155 | # Implementation 156 | 157 | First is to implement an error printing function in the C code. I have a rust mockup [here](https://github.com/bburdette/nix-errors-wk/tree/master/colorerrors). That's the easy part! 158 | 159 | Next up is to make sure the error context information needed for the standard error format is available at error time, in the nix language processing, and anywhere else that error messages can be produced. Filename, line number, current line of code. 160 | 161 | With the error context information available, we need to provide all that for each of the **language** and **builtin** errors in nix as well as hints, error templates, error name, general error description. 162 | 163 | For builtins, specialized logic may be needed to interpret results from external tools like git or curl. General hints and strategy for these kinds of errors will be helpful too. 164 | 165 | The **tool** errors are probably the most challenging, if we really want to address all the issues in the nix github. Most of these would require dedicated C code to detect special conditions, in addition to the error hints, general description, and etc. Each of these is different! 166 | 167 | Lastly the **builder** errors. We'll provide some basic links and information to help with debugging. Going beyond that - like writing a bash debugger, for instance - is outside the scope of this project. 168 | -------------------------------------------------------------------------------- /colorerrors/src/main.rs: -------------------------------------------------------------------------------- 1 | extern crate colored; 2 | 3 | use colored::*; 4 | 5 | struct ErrInfo { 6 | level: ErrLevel, 7 | err_name: String, 8 | tool_name: String, 9 | description: String, 10 | nix_code: Option, 11 | hint: ColoredString, 12 | } 13 | 14 | struct NixCode { 15 | nix_file: Option, 16 | err_line: Option, 17 | } 18 | 19 | struct ErrLine { 20 | line_no: i32, 21 | column_range: Option<(usize, usize)>, 22 | prev_loc: Option, 23 | loc: String, 24 | next_loc: Option, 25 | } 26 | 27 | enum ErrLevel { 28 | Warning, 29 | Error, 30 | } 31 | 32 | fn show_err_line(eline: &ErrLine) -> String { 33 | match eline.column_range { 34 | Some((start, _end)) => format!("({}:{})", eline.line_no, start), 35 | None => format!("({})", eline.line_no), 36 | } 37 | } 38 | 39 | fn print_code_lines(prefix: &str, nix_code: &NixCode) { 40 | match &nix_code.err_line { 41 | Some(eline) => { 42 | eline.prev_loc.as_ref().map(|loc| println!("{}{:>5}| {}", prefix, eline.line_no - 1, loc)); 43 | println!("{}{:>5}| {}", prefix, eline.line_no, eline.loc); 44 | eline.column_range.map( 45 | |(col,len)| 46 | println!( 47 | "{} |{}{}", 48 | prefix, 49 | " ".to_string().repeat(col), 50 | "^".to_string().repeat(len).red() 51 | )); 52 | eline.next_loc.as_ref().map(|loc| println!("{}{:>5}| {}", prefix, eline.line_no + 1, loc)); 53 | 54 | println!(""); 55 | } 56 | None => (), 57 | } 58 | } 59 | 60 | fn print_error(einfo: &ErrInfo) { 61 | let errwidth: usize = 80; 62 | let prefix = " "; 63 | 64 | // level 65 | let lstring = match einfo.level { 66 | ErrLevel::Error => "error:".red(), 67 | ErrLevel::Warning => "warning:".yellow(), 68 | }; 69 | 70 | let dashwidth = { 71 | let ndl = lstring.len() + 3 + einfo.err_name.len() + einfo.tool_name.len(); 72 | if ndl > errwidth - 3 { 73 | 3 74 | } else { 75 | 80 - ndl 76 | } 77 | }; 78 | 79 | // divider 80 | println!( 81 | "{}{} {} {} {} {}", 82 | prefix, 83 | lstring, 84 | "---".blue(), 85 | einfo.err_name.blue(), 86 | "-".repeat(dashwidth).blue(), 87 | einfo.tool_name.blue() 88 | ); 89 | 90 | // filename 91 | match &einfo.nix_code { 92 | None => (), 93 | Some(nix_code) => { 94 | match (&nix_code.nix_file, &nix_code.err_line) { 95 | (Some(fname), Some(eline)) => { 96 | println!("{}in file: {} {}", prefix, fname.blue(), show_err_line(eline).blue()); 97 | println!("{}", prefix); 98 | } 99 | (Some(fname), None) => { 100 | println!("{}in file: {}", prefix, fname.blue()); 101 | println!("{}", prefix); 102 | } 103 | (None, _) => { 104 | println!("{}from command line argument", prefix); 105 | println!("{}", prefix); 106 | } 107 | } 108 | } 109 | } 110 | 111 | 112 | // description 113 | println!("{}{}", prefix, einfo.description); 114 | println!("{}", prefix); 115 | 116 | // line of code 117 | einfo.nix_code.as_ref().map(|nc| print_code_lines(prefix,nc )); 118 | 119 | 120 | // hint 121 | println!("{}{}", prefix, einfo.hint); 122 | println!("{}", prefix); 123 | } 124 | 125 | fn main() { 126 | let generic = ErrInfo { 127 | level: ErrLevel::Error, 128 | err_name: "error name".to_string(), 129 | tool_name: "nix tool name".to_string(), 130 | description: "general error description".to_string(), 131 | nix_code: Some(NixCode { 132 | nix_file: Some("myfile.nix".to_string()), 133 | err_line: Some(ErrLine { 134 | line_no: 7, 135 | column_range: Some((24, 14)), 136 | loc: "line of code where the error occurred".to_string(), 137 | prev_loc: Some("previous line".to_string()), 138 | next_loc: Some("next line".to_string()), 139 | })}), 140 | hint: format!( 141 | "error hint with templated {}", 142 | "values".to_string().yellow() 143 | ) 144 | .white(), 145 | }; 146 | 147 | let langwarning = ErrInfo { 148 | level: ErrLevel::Warning, 149 | err_name: "Attribute Name".to_string(), 150 | tool_name: "nix-build".to_string(), 151 | description: "Attribute format is incorrect. Only letters a-z, A-Z, 0-9, or one of \"+_-\" are allowed.".to_string(), 152 | nix_code: Some(NixCode { 153 | nix_file: None, 154 | err_line: Some(ErrLine { 155 | line_no: 1, 156 | column_range: Some((4,8)), 157 | prev_loc: None, 158 | next_loc: None, 159 | loc: "{ \"hi.there\" = (import {}).hello; }".to_string(), 160 | })}), 161 | hint: format!("The symbol {} doesn't satisfy attribute naming requirements. It will be ignored.", "hi.there".yellow()).to_string().white(), 162 | }; 163 | 164 | let langerror = ErrInfo { 165 | level: ErrLevel::Error, 166 | err_name: "String Error".to_string(), 167 | tool_name: "nix-build".to_string(), 168 | description: "Invalid escape character. Only \\t \\n \\r \\\\ are allowed.".to_string(), 169 | nix_code : Some(NixCode { 170 | nix_file: None, 171 | err_line: Some(ErrLine { 172 | line_no: 1, 173 | column_range: Some((15, 2)), 174 | loc: "{ foo = \"test \\e\"; }".to_string(), 175 | next_loc: None, 176 | prev_loc: None, 177 | }) 178 | }) , 179 | hint: format!( 180 | "{} is an invalid escape character for a nix string.", 181 | "\\e".yellow() 182 | ) 183 | .to_string() 184 | .white(), 185 | }; 186 | 187 | let builtinerror = ErrInfo { 188 | level: ErrLevel::Error, 189 | err_name: "fetchGit Error".to_string(), 190 | tool_name: "nix build".to_string(), 191 | description: "builtin.fetchGit returned an error.".to_string(), 192 | nix_code : Some(NixCode { 193 | nix_file: Some("default.nix".to_string()), 194 | err_line: Some(ErrLine { 195 | line_no: 101, 196 | column_range: Some((1, 16)), 197 | prev_loc: None, 198 | loc: "builtin.fetchGit {".to_string(), 199 | next_loc: Some(" url=https://github.com/nixos/nixpkgs-channels;".to_string()), 200 | }) 201 | }), 202 | hint: "fetchGit takes 4 arguments in a nix expression: 203 | { url 204 | , rev (optional) 205 | , ref (optional) 206 | , name (optional) 207 | } 208 | If the ref (branch) does not contain the rev (commit), then the fetch will fail. 209 | 210 | See the manual for more: 211 | 212 | https://nixos.org/nix/manual/#builtin-fetchGit" 213 | .white(), 214 | }; 215 | 216 | let toolwarning = ErrInfo { 217 | level: ErrLevel::Warning, 218 | err_name: "user-only garbage collection".to_string(), 219 | tool_name: "nix-collect-garbage".to_string(), 220 | description: "collecting garbage for user account only.".to_string(), 221 | nix_code : None, 222 | hint: format!( 223 | "this command will collect garbage for user {} only. 224 | To remove OS generations, run as root or use sudo. See the manual for more. 225 | https://nixos.org/nix/manual/#name-5", 226 | "bburdette".yellow(), 227 | ) 228 | .white(), 229 | }; 230 | 231 | let toolerror = ErrInfo { 232 | level: ErrLevel::Error, 233 | err_name: "remote builder error".to_string(), 234 | tool_name: "nix-store".to_string(), 235 | description: "the remote builder doesn't meet package requirements.".to_string(), 236 | nix_code : None, 237 | hint: format!( 238 | "This build has requiredSystemFeatures: {} 239 | But the remote machine only has: {}. 240 | If the remote machine has the features, declare them in its builder specification. 241 | 242 | See the nix manual for more information: 243 | https://nixos.org/nix/manual/#chap-distributed-builds", 244 | "[ \"big-parallel\" ]".yellow(), 245 | "[]".yellow(), 246 | ) 247 | .white(), 248 | }; 249 | 250 | // print all the errors 251 | println!(""); 252 | print_error(&generic); 253 | print_error(&langwarning); 254 | print_error(&langerror); 255 | print_error(&builtinerror); 256 | print_error(&toolerror); 257 | 258 | // tool warning gets context. 259 | println!( 260 | "{}:{}$ nix-collect-garbage", 261 | "bburdette@BB-5520".green(), 262 | "~/code/deploy-bots".blue() 263 | ); 264 | print_error(&toolwarning); 265 | println!("finding garbage collector roots..."); 266 | println!("deleting garbage..."); 267 | println!("deleting '/nix/store/trash'"); 268 | println!("deleting unused links..."); 269 | println!("note: currently hard linking saves 932.01 MiB"); 270 | println!("0 store paths deleted, 0.00 MiB freed"); 271 | } 272 | -------------------------------------------------------------------------------- /tktime.txt: -------------------------------------------------------------------------------- 1 | NVT_1.0 2 | LogEntry== 3 | End=138154034120000000 4 | Start=138154025730000000 5 | Task=2238 6 | LogEntry== 7 | End=138154097830000000 8 | Start=138154089550000000 9 | Task=2238 10 | LogEntry== 11 | End=138154901510000000 12 | Start=138154899990000000 13 | Task=2238 14 | LogEntry== 15 | End=138157775560000000 16 | Start=138157762710000000 17 | Task=2238 18 | LogEntry== 19 | End=138158423170000000 20 | Start=138158412110000000 21 | Task=2238 22 | LogEntry== 23 | End=138158449270000000 24 | Start=138158435980000000 25 | Task=2238 26 | LogEntry== 27 | End=138158486300000000 28 | Start=138158484750000000 29 | Task=2238 30 | LogEntry== 31 | End=138158497100000000 32 | Start=138158488210000000 33 | Task=2238 34 | LogEntry== 35 | End=138158505540000000 36 | Start=138158500600000000 37 | Task=2238 38 | LogEntry== 39 | End=138158558180000000 40 | Start=138158555960000000 41 | Task=2238 42 | LogEntry== 43 | End=138158586620000000 44 | Start=138158583800000000 45 | Task=2238 46 | LogEntry== 47 | End=138159142480000000 48 | Start=138159132320000000 49 | Task=2238 50 | LogEntry== 51 | End=138159158040000000 52 | Start=138159152440000000 53 | Task=2238 54 | LogEntry== 55 | End=138159180390000000 56 | Start=138159168870000000 57 | Task=2238 58 | LogEntry== 59 | End=138159200070000000 60 | Start=138159184720000000 61 | Task=2238 62 | LogEntry== 63 | End=138227781070000000 64 | Start=138227776180000000 65 | Task=2238 66 | LogEntry== 67 | End=138227789190000000 68 | Start=138227785990000000 69 | Task=2238 70 | LogEntry== 71 | End=138227806010000000 72 | Start=138227792510000000 73 | Task=2238 74 | LogEntry== 75 | End=138230113410000000 76 | Start=138230106800000000 77 | Task=admin 78 | LogEntry== 79 | End=138230404850000000 80 | Start=138230391610000000 81 | Task=hashspace 82 | LogEntry== 83 | End=138232122720000000 84 | Start=138232106480000000 85 | Task=hashspace 86 | LogEntry== 87 | End=138232139990000000 88 | Start=138232130050000000 89 | Task=hashspace 90 | LogEntry== 91 | End=138237932500000000 92 | Start=138237912990000000 93 | Task=2259 94 | LogEntry== 95 | End=138237952120000000 96 | Start=138237947620000000 97 | Task=2259 98 | LogEntry== 99 | End=138242178780000000 100 | Start=138242176450000000 101 | Task=2259 102 | LogEntry== 103 | End=138242226290000000 104 | Start=138242212910000000 105 | Task=2259 106 | LogEntry== 107 | End=138242246430000000 108 | Start=138242245500000000 109 | Task=2259 110 | LogEntry== 111 | End=138242259540000000 112 | Start=138242257380000000 113 | Task=2259 114 | LogEntry== 115 | End=138242301390000000 116 | Start=138242280430000000 117 | Task=2259 118 | LogEntry== 119 | End=138242343180000000 120 | Start=138242316790000000 121 | Task=2259 122 | LogEntry== 123 | End=138242359110000000 124 | Start=138242347050000000 125 | Task=2259 126 | LogEntry== 127 | End=138243799240000000 128 | Start=138243792340000000 129 | Task=2259 130 | LogEntry== 131 | End=138243814740000000 132 | Start=138243806940000000 133 | Task=2259 134 | LogEntry== 135 | End=138243859200000000 136 | Start=138243847040000000 137 | Task=2259 138 | LogEntry== 139 | End=138306040910000000 140 | Start=138306038540000000 141 | Task=3505 142 | LogEntry== 143 | End=138306046360000000 144 | Start=138306044060000000 145 | Task=3505 146 | LogEntry== 147 | End=138306063870000000 148 | Start=138306056220000000 149 | Task=3505 150 | LogEntry== 151 | End=138316607930000000 152 | Start=138316594120000000 153 | Task=963 154 | LogEntry== 155 | End=138316697410000000 156 | Start=138316693380000000 157 | Task=963 158 | LogEntry== 159 | End=138317225540000000 160 | Start=138317223840000000 161 | Task=1184 162 | LogEntry== 163 | End=138317234360000000 164 | Start=138317225600000000 165 | Task=963 166 | LogEntry== 167 | End=138317264690000000 168 | Start=138317251620000000 169 | Task=1184 170 | LogEntry== 171 | End=138317280810000000 172 | Start=138317272820000000 173 | Task=1184 174 | LogEntry== 175 | End=138317303070000000 176 | Start=138317294960000000 177 | Task=1184 178 | LogEntry== 179 | End=138317430760000000 180 | Start=138317422220000000 181 | Task=1184 182 | LogEntry== 183 | End=138323425010000000 184 | Start=138323416530000000 185 | Task=963 186 | LogEntry== 187 | End=138323483180000000 188 | Start=138323482260000000 189 | Task=1184 190 | LogEntry== 191 | End=138323492410000000 192 | Start=138323485190000000 193 | Task=963 194 | LogEntry== 195 | End=138323530240000000 196 | Start=138323516380000000 197 | Task=1184 198 | LogEntry== 199 | End=138323570480000000 200 | Start=138323538350000000 201 | Task=1184 202 | LogEntry== 203 | End=138323627040000000 204 | Start=138323626470000000 205 | Task=1184 206 | LogEntry== 207 | End=138323645120000000 208 | Start=138323641720000000 209 | Task=1184 210 | LogEntry== 211 | End=138324151100000000 212 | Start=138324147300000000 213 | Task=1184 214 | LogEntry== 215 | End=138329535170000000 216 | Start=138329487880000000 217 | Task=1184 218 | LogEntry== 219 | End=138329588190000000 220 | Start=138329578300000000 221 | Task=1184 222 | LogEntry== 223 | End=138329602120000000 224 | Start=138329589990000000 225 | Task=1184 226 | LogEntry== 227 | End=138329654090000000 228 | Start=138329649090000000 229 | Task=1184 230 | LogEntry== 231 | End=138330326590000000 232 | Start=138330281410000000 233 | Task=1184 234 | LogEntry== 235 | End=138330356960000000 236 | Start=138330353850000000 237 | Task=1184 238 | LogEntry== 239 | End=138330373470000000 240 | Start=138330360120000000 241 | Task=1184 242 | LogEntry== 243 | End=138330382700000000 244 | Start=138330379450000000 245 | Task=1184 246 | LogEntry== 247 | End=138330409650000000 248 | Start=138330400080000000 249 | Task=1184 250 | LogEntry== 251 | End=138330488160000000 252 | Start=138330475420000000 253 | Task=1184 254 | LogEntry== 255 | End=138341522190000000 256 | Start=138341521550000000 257 | Task=1184 258 | LogEntry== 259 | End=138341538740000000 260 | Start=138341525340000000 261 | Task=1184 262 | LogEntry== 263 | End=138341606150000000 264 | Start=138341570130000000 265 | Task=1184 266 | LogEntry== 267 | End=138342371760000000 268 | Start=138342356990000000 269 | Task=1184 270 | LogEntry== 271 | End=138342406580000000 272 | Start=138342382510000000 273 | Task=1184 274 | LogEntry== 275 | End=138342436010000000 276 | Start=138342425050000000 277 | Task=1184 278 | LogEntry== 279 | End=138342761310000000 280 | Start=138342743640000000 281 | Task=1184 282 | LogEntry== 283 | End=138355199940000000 284 | Start=138355187700000000 285 | Task=1184 286 | LogEntry== 287 | End=138355223840000000 288 | Start=138355200430000000 289 | Task=1184 - existing files? 290 | LogEntry== 291 | End=138355230320000000 292 | Start=138355228950000000 293 | Task=1184 - existing files? 294 | LogEntry== 295 | End=138355273670000000 296 | Start=138355262530000000 297 | Task=1184 - existing files? 298 | LogEntry== 299 | End=138388195920000000 300 | Start=138388186720000000 301 | Task=REPL flag 302 | LogEntry== 303 | End=138388209890000000 304 | Start=138388206180000000 305 | Task=REPL flag 306 | LogEntry== 307 | End=138389089520000000 308 | Start=138389089050000000 309 | Task=REPL linking 310 | LogEntry== 311 | End=138389178390000000 312 | Start=138389167170000000 313 | Task=REPL linking 314 | LogEntry== 315 | End=138389190610000000 316 | Start=138389188840000000 317 | Task=REPL linking 318 | LogEntry== 319 | End=138390166540000000 320 | Start=138390155710000000 321 | Task=REPL flag 322 | LogEntry== 323 | End=138393445690000000 324 | Start=138393433950000000 325 | Task=REPL flag - reproduce example. 326 | LogEntry== 327 | End=138393455000000000 328 | Start=138393448720000000 329 | Task=REPL flag 330 | LogEntry== 331 | End=138393471850000000 332 | Start=138393465910000000 333 | Task=REPL flag 334 | LogEntry== 335 | End=138393481450000000 336 | Start=138393478470000000 337 | Task=REPL flag 338 | LogEntry== 339 | End=138393498540000000 340 | Start=138393493700000000 341 | Task=REPL flag 342 | LogEntry== 343 | End=138399417950000000 344 | Start=138399406870000000 345 | Task=REPL flag 346 | LogEntry== 347 | End=138399450420000000 348 | Start=138399443730000000 349 | Task=REPL flag 350 | LogEntry== 351 | End=138399517440000000 352 | Start=138399505980000000 353 | Task=REPL flag 354 | LogEntry== 355 | End=138399639290000000 356 | Start=138399626980000000 357 | Task=REPL flag 358 | LogEntry== 359 | End=138399649410000000 360 | Start=138399644490000000 361 | Task=REPL flag 362 | LogEntry== 363 | End=138400355440000000 364 | Start=138400342080000000 365 | Task=REPL flag 366 | LogEntry== 367 | End=138400378170000000 368 | Start=138400366000000000 369 | Task=REPL flag 370 | LogEntry== 371 | End=138400385810000000 372 | Start=138400382700000000 373 | Task=REPL flag 374 | LogEntry== 375 | End=138400407280000000 376 | Start=138400392290000000 377 | Task=REPL flag 378 | LogEntry== 379 | End=138400506830000000 380 | Start=138400489160000000 381 | Task=REPL flag 382 | LogEntry== 383 | End=138401061150000000 384 | Start=138401043570000000 385 | Task=REPL flag 386 | LogEntry== 387 | End=138402078920000000 388 | Start=138402067610000000 389 | Task=REPL flag 390 | LogEntry== 391 | End=138402107050000000 392 | Start=138402094240000000 393 | Task=REPL flag 394 | LogEntry== 395 | End=138402138070000000 396 | Start=138402129930000000 397 | Task=REPL flag 398 | LogEntry== 399 | End=138402147550000000 400 | Start=138402141440000000 401 | Task=REPL flag 402 | LogEntry== 403 | End=138402854940000000 404 | Start=138402828430000000 405 | Task=REPL flag 406 | LogEntry== 407 | End=138402934700000000 408 | Start=138402921800000000 409 | Task=REPL flag - env 410 | LogEntry== 411 | End=138424537130000000 412 | Start=138424533680000000 413 | Task=REPL flag 414 | LogEntry== 415 | End=138424559150000000 416 | Start=138424542670000000 417 | Task=REPL flag 418 | LogEntry== 419 | End=138425480700000000 420 | Start=138425459200000000 421 | Task=REPL flag 422 | LogEntry== 423 | End=138425684270000000 424 | Start=138425679150000000 425 | Task=REPL flag 426 | LogEntry== 427 | End=138426113270000000 428 | Start=138426089790000000 429 | Task=REPL flag 430 | LogEntry== 431 | End=138426261060000000 432 | Start=138426253260000000 433 | Task=REPL flag 434 | LogEntry== 435 | End=138426275990000000 436 | Start=138426265400000000 437 | Task=REPL flag 438 | LogEntry== 439 | End=138426354960000000 440 | Start=138426348840000000 441 | Task=REPL flag 442 | LogEntry== 443 | End=138426447590000000 444 | Start=138426417830000000 445 | Task=REPL flag 446 | LogEntry== 447 | End=138427271230000000 448 | Start=138427262240000000 449 | Task=REPL flag 450 | LogEntry== 451 | End=138427326430000000 452 | Start=138427302900000000 453 | Task=REPL flag 454 | LogEntry== 455 | End=138429807600000000 456 | Start=138429795550000000 457 | Task=REPL flag 458 | LogEntry== 459 | End=138430551450000000 460 | Start=138430546450000000 461 | Task=REPL flag 462 | LogEntry== 463 | End=138430627660000000 464 | Start=138430618900000000 465 | Task=REPL flag 466 | LogEntry== 467 | End=138430662970000000 468 | Start=138430645620000000 469 | Task=REPL flag 470 | LogEntry== 471 | End=138430703440000000 472 | Start=138430679250000000 473 | Task=REPL flag - env grokking 474 | LogEntry== 475 | End=138431531080000000 476 | Start=138431520040000000 477 | Task=REPL flag - env grokking 478 | LogEntry== 479 | End=138432276740000000 480 | Start=138432262550000000 481 | Task=admin 482 | LogEntry== 483 | End=138438360220000000 484 | Start=138438344670000000 485 | Task=env-count experiment 486 | LogEntry== 487 | End=138438424460000000 488 | Start=138438413870000000 489 | Task=env-count experiment 490 | LogEntry== 491 | End=138438438210000000 492 | Start=138438427930000000 493 | Task=env-count experiment 494 | LogEntry== 495 | End=138438467520000000 496 | Start=138438464630000000 497 | Task=env-count experiment 498 | LogEntry== 499 | End=138439332200000000 500 | Start=138439328340000000 501 | Task=env-count experiment 502 | LogEntry== 503 | End=138439354830000000 504 | Start=138439346150000000 505 | Task=env-count experiment 506 | LogEntry== 507 | End=138443562410000000 508 | Start=138443549440000000 509 | Task=parseing->env code reading 510 | LogEntry== 511 | End=138443587460000000 512 | Start=138443584640000000 513 | Task=parseing->env code reading 514 | LogEntry== 515 | End=138445335260000000 516 | Start=138445319820000000 517 | Task=parseing->env code reading 518 | LogEntry== 519 | End=138453041650000000 520 | Start=138453021780000000 521 | Task=env subclass 522 | LogEntry== 523 | End=138453743930000000 524 | Start=138453742390000000 525 | Task=env subclass 526 | LogEntry== 527 | End=138453748660000000 528 | Start=138453745890000000 529 | Task=env subclass 530 | LogEntry== 531 | End=138467786560000000 532 | Start=138467782590000000 533 | Task=env bindings 534 | LogEntry== 535 | End=138467822840000000 536 | Start=138467809660000000 537 | Task=env bindings 538 | LogEntry== 539 | End=138468465580000000 540 | Start=138468456570000000 541 | Task=env bindings 542 | LogEntry== 543 | End=138469342640000000 544 | Start=138469329720000000 545 | Task=env bindings 546 | LogEntry== 547 | End=138469389500000000 548 | Start=138469384200000000 549 | Task=env bindings 550 | LogEntry== 551 | End=138469437170000000 552 | Start=138469431170000000 553 | Task=env bindings 554 | LogEntry== 555 | End=138469450000000000 556 | Start=138469443060000000 557 | Task=env bindings 558 | LogEntry== 559 | End=138469493100000000 560 | Start=138469486810000000 561 | Task=env bindings 562 | LogEntry== 563 | End=138474748190000000 564 | Start=138474747060000000 565 | Task=env bindings 566 | LogEntry== 567 | End=138474754120000000 568 | Start=138474749670000000 569 | Task=env bindings 570 | LogEntry== 571 | End=138474862410000000 572 | Start=138474854690000000 573 | Task=env bindings 574 | LogEntry== 575 | End=138474870000000000 576 | Start=138474866280000000 577 | Task=env bindings 578 | LogEntry== 579 | End=138475409750000000 580 | Start=138475399670000000 581 | Task=env bindings 582 | LogEntry== 583 | End=138475461450000000 584 | Start=138475455930000000 585 | Task=env bindings 586 | LogEntry== 587 | End=138478128960000000 588 | Start=138478103050000000 589 | Task=env bindings 590 | LogEntry== 591 | End=138479209440000000 592 | Start=138479183790000000 593 | Task=env bindings 594 | LogEntry== 595 | End=138479318870000000 596 | Start=138479314980000000 597 | Task=env bindings 598 | LogEntry== 599 | End=138479352290000000 600 | Start=138479345970000000 601 | Task=env bindings 602 | LogEntry== 603 | End=138479358820000000 604 | Start=138479355130000000 605 | Task=env bindings 606 | LogEntry== 607 | End=138485045390000000 608 | Start=138485037370000000 609 | Task=env bindings 610 | LogEntry== 611 | End=138485129280000000 612 | Start=138485124270000000 613 | Task=env bindings 614 | LogEntry== 615 | End=138485954110000000 616 | Start=138485946650000000 617 | Task=env bindings 618 | LogEntry== 619 | End=138486019950000000 620 | Start=138486008630000000 621 | Task=env bindings 622 | LogEntry== 623 | End=138486099200000000 624 | Start=138486088430000000 625 | Task=env bindings 626 | LogEntry== 627 | End=138486143470000000 628 | Start=138486128090000000 629 | Task=env bindings 630 | LogEntry== 631 | End=138486147690000000 632 | Start=138486146910000000 633 | Task=env bindings 634 | LogEntry== 635 | End=138486657470000000 636 | Start=138486654000000000 637 | Task=env bindings 638 | LogEntry== 639 | End=138486671880000000 640 | Start=138486665770000000 641 | Task=core dump! 642 | LogEntry== 643 | End=138486703190000000 644 | Start=138486683650000000 645 | Task=core dump! 646 | LogEntry== 647 | End=138486767760000000 648 | Start=138486753130000000 649 | Task=core dump! 650 | LogEntry== 651 | End=138486815330000000 652 | Start=138486809090000000 653 | Task=core dump! 654 | LogEntry== 655 | End=138486823170000000 656 | Start=138486821710000000 657 | Task=core dump! 658 | LogEntry== 659 | End=138486864950000000 660 | Start=138486844160000000 661 | Task=core dump! 662 | LogEntry== 663 | End=138487439810000000 664 | Start=138487433660000000 665 | Task=core dump! 666 | LogEntry== 667 | End=138487452910000000 668 | Start=138487448270000000 669 | Task=core dump! 670 | LogEntry== 671 | End=138491162230000000 672 | Start=138491153020000000 673 | Task=remove valmaps 674 | LogEntry== 675 | End=138491176130000000 676 | Start=138491170790000000 677 | Task=remove valmaps 678 | LogEntry== 679 | End=138491183220000000 680 | Start=138491181600000000 681 | Task=remove valmaps 682 | LogEntry== 683 | End=138491834170000000 684 | Start=138491819510000000 685 | Task=remove valmaps 686 | LogEntry== 687 | End=138491853380000000 688 | Start=138491845360000000 689 | Task=remove valmaps 690 | LogEntry== 691 | End=138491884900000000 692 | Start=138491881170000000 693 | Task=remove valmaps 694 | LogEntry== 695 | End=138491919930000000 696 | Start=138491900140000000 697 | Task=remove valmaps 698 | LogEntry== 699 | End=138491931920000000 700 | Start=138491926370000000 701 | Task=remove valmaps 702 | LogEntry== 703 | End=138492008660000000 704 | Start=138492004820000000 705 | Task=show bindings->pos code 706 | LogEntry== 707 | End=138496464240000000 708 | Start=138496457050000000 709 | Task=builtins, attrs binding investigation 710 | LogEntry== 711 | End=138496479200000000 712 | Start=138496473440000000 713 | Task=builtins, attrs binding investigation 714 | LogEntry== 715 | End=138497041420000000 716 | Start=138497023650000000 717 | Task=builtins, attrs binding investigation 718 | LogEntry== 719 | End=138497134090000000 720 | Start=138497123010000000 721 | Task=builtins, attrs binding investigation 722 | LogEntry== 723 | End=138497252900000000 724 | Start=138497250390000000 725 | Task=builtins, attrs binding investigation 726 | LogEntry== 727 | End=138497279700000000 728 | Start=138497253940000000 729 | Task=builtins, attrs binding investigation 730 | LogEntry== 731 | End=138497993640000000 732 | Start=138497975730000000 733 | Task=builtins, attrs binding investigation 734 | LogEntry== 735 | End=138498894030000000 736 | Start=138498879540000000 737 | Task=builtins, attrs binding investigation 738 | LogEntry== 739 | End=138499639910000000 740 | Start=138499634060000000 741 | Task=builtins, attrs binding investigation 742 | LogEntry== 743 | End=138499665450000000 744 | Start=138499659410000000 745 | Task=builtins, attrs binding investigation 746 | LogEntry== 747 | End=138499700520000000 748 | Start=138499688790000000 749 | Task=builtins, attrs binding investigation 750 | LogEntry== 751 | End=138508273100000000 752 | Start=138508265530000000 753 | Task=builtins, attrs binding investigation 754 | LogEntry== 755 | End=138508321670000000 756 | Start=138508315680000000 757 | Task=shared-ptr StaticEnv 758 | LogEntry== 759 | End=138508329980000000 760 | Start=138508325770000000 761 | Task=shared-ptr StaticEnv 762 | LogEntry== 763 | End=138508352220000000 764 | Start=138508347980000000 765 | Task=shared-ptr StaticEnv 766 | LogEntry== 767 | End=138508499110000000 768 | Start=138508482000000000 769 | Task=shared-ptr StaticEnv 770 | LogEntry== 771 | End=138508513760000000 772 | Start=138508506710000000 773 | Task=shared-ptr StaticEnv 774 | LogEntry== 775 | End=138508629700000000 776 | Start=138508622860000000 777 | Task=shared-ptr StaticEnv 778 | LogEntry== 779 | End=138509100270000000 780 | Start=138509082010000000 781 | Task=shared-ptr StaticEnv 782 | LogEntry== 783 | End=138509175660000000 784 | Start=138509170800000000 785 | Task=shared-ptr StaticEnv 786 | LogEntry== 787 | End=138509231880000000 788 | Start=138509218560000000 789 | Task=shared-ptr StaticEnv 790 | LogEntry== 791 | End=138509253550000000 792 | Start=138509238910000000 793 | Task=shared-ptr StaticEnv 794 | LogEntry== 795 | End=138510156660000000 796 | Start=138510153490000000 797 | Task=shared-ptr StaticEnv 798 | LogEntry== 799 | End=138510160390000000 800 | Start=138510159170000000 801 | Task=shared-ptr StaticEnv 802 | LogEntry== 803 | End=138510170550000000 804 | Start=138510161780000000 805 | Task=shared-ptr StaticEnv 806 | LogEntry== 807 | End=138510172180000000 808 | Start=138510171840000000 809 | Task=shared-ptr StaticEnv 810 | LogEntry== 811 | End=138510187100000000 812 | Start=138510181090000000 813 | Task=shared-ptr StaticEnv 814 | LogEntry== 815 | End=138515305370000000 816 | Start=138515298530000000 817 | Task=shared-ptr StaticEnv debug 818 | LogEntry== 819 | End=138515325720000000 820 | Start=138515313730000000 821 | Task=shared-ptr StaticEnv debug 822 | LogEntry== 823 | End=138515339470000000 824 | Start=138515331690000000 825 | Task=shared-ptr StaticEnv debug 826 | LogEntry== 827 | End=138516021450000000 828 | Start=138516016960000000 829 | Task=shared-ptr StaticEnv debug 830 | LogEntry== 831 | End=138516165210000000 832 | Start=138516151350000000 833 | Task=shared-ptr StaticEnv debug 834 | LogEntry== 835 | End=138516188650000000 836 | Start=138516180230000000 837 | Task=shared-ptr StaticEnv debug 838 | LogEntry== 839 | End=138516215770000000 840 | Start=138516198080000000 841 | Task=shared-ptr StaticEnv debug 842 | LogEntry== 843 | End=138516286010000000 844 | Start=138516264240000000 845 | Task=shared-ptr StaticEnv debug 846 | LogEntry== 847 | End=138516852630000000 848 | Start=138516840320000000 849 | Task=shared-ptr StaticEnv debug 850 | LogEntry== 851 | End=138516890200000000 852 | Start=138516884230000000 853 | Task=shared-ptr StaticEnv debug 854 | LogEntry== 855 | End=138516900940000000 856 | Start=138516891240000000 857 | Task=shared-ptr StaticEnv debug 858 | LogEntry== 859 | End=138516933520000000 860 | Start=138516926730000000 861 | Task=shared-ptr StaticEnv debug 862 | LogEntry== 863 | End=138521068790000000 864 | Start=138521060650000000 865 | Task=shared-ptr StaticEnv show vars 866 | LogEntry== 867 | End=138521162860000000 868 | Start=138521151700000000 869 | Task=shared-ptr StaticEnv show vars 870 | LogEntry== 871 | End=138524758430000000 872 | Start=138524751290000000 873 | Task=shared-ptr StaticEnv show vars 874 | LogEntry== 875 | End=138524802740000000 876 | Start=138524791050000000 877 | Task=shared-ptr StaticEnv show vars 878 | LogEntry== 879 | End=138532466040000000 880 | Start=138532457700000000 881 | Task=shared-ptr StaticEnv show vars 882 | LogEntry== 883 | End=138532554790000000 884 | Start=138532541360000000 885 | Task=shared-ptr StaticEnv show vars 886 | LogEntry== 887 | End=138532582970000000 888 | Start=138532561210000000 889 | Task=shared-ptr StaticEnv show vars 890 | LogEntry== 891 | End=138532611330000000 892 | Start=138532605940000000 893 | Task=shared-ptr StaticEnv show vars 894 | LogEntry== 895 | End=138532626820000000 896 | Start=138532617670000000 897 | Task=shared-ptr StaticEnv show vars 898 | LogEntry== 899 | End=138532637040000000 900 | Start=138532627660000000 901 | Task=shared-ptr StaticEnv show vars 902 | LogEntry== 903 | End=138532778850000000 904 | Start=138532769780000000 905 | Task=shared-ptr StaticEnv show vars 906 | LogEntry== 907 | End=138533444370000000 908 | Start=138533436700000000 909 | Task=shared-ptr StaticEnv show vars 910 | LogEntry== 911 | End=138542054330000000 912 | Start=138542035750000000 913 | Task=exploratory PR 914 | LogEntry== 915 | End=138542088860000000 916 | Start=138542056390000000 917 | Task=exploratory PR 918 | LogEntry== 919 | End=138542179550000000 920 | Start=138542167830000000 921 | Task=exploratory PR 922 | LogEntry== 923 | End=138557506910000000 924 | Start=138557502700000000 925 | Task=exploratory PR 926 | LogEntry== 927 | End=138557570410000000 928 | Start=138557560160000000 929 | Task=exploratory PR 930 | --------------------------------------------------------------------------------