diff --git a/src/libcmd/repl.cc b/src/libcmd/repl.cc index f292f06bb81..8935056b264 100644 --- a/src/libcmd/repl.cc +++ b/src/libcmd/repl.cc @@ -791,6 +791,25 @@ void NixRepl::addAttrsToScope(Value & attrs) staticEnv->sort(); staticEnv->deduplicate(); notice("Added %1% variables.", attrs.attrs()->size()); + + const int max_print = 10; + int counter = 0; + std::string loaded; + for (auto & i : attrs.attrs()->lexicographicOrder(state->symbols)) { + if (counter >= max_print) + break; + + if (counter > 0) + loaded += ", "; + + loaded += printIdentifier(state->symbols[i->name]); + counter += 1; + } + + notice("%1%", loaded); + + if (attrs.attrs()->size() > max_print) + notice("... and %1% more", attrs.attrs()->size() - max_print); } diff --git a/tests/functional/repl.sh b/tests/functional/repl.sh index 59d1f1be02a..5346c790675 100755 --- a/tests/functional/repl.sh +++ b/tests/functional/repl.sh @@ -153,6 +153,32 @@ foo + baz ' "3" \ ./flake ./flake\#bar --experimental-features 'flakes' +testReplResponse $' +:a { a = 1; b = 2; longerName = 3; "with spaces" = 4; } +' 'Added 4 variables. +a, b, longerName, with spaces +' + +cat < attribute-set.nix +{ + a = 1; + b = 2; + longerName = 3; + "with spaces" = 4; +} +EOF +testReplResponse ' +:l ./attribute-set.nix +' 'Added 4 variables. +a, b, longerName, with spaces +' + +testReplResponseNoRegex $' +:a builtins.foldl\' (x: y: x // y) {} (map (x: { ${builtins.toString x} = x; }) (builtins.genList (x: x) 13)) +' 'Added 13 variables. +0, 1, 10, 11, 12, 2, 3, 4, 5, 6 +... and 3 more' + # Test the `:reload` mechansim with flakes: # - Eval `./flake#changingThing` # - Modify the flake @@ -302,6 +328,8 @@ runRepl () { -e "s@$testDirNoUnderscores@/path/to/tests/functional@g" \ -e "s@$nixVersion@@g" \ -e "s@Added [0-9]* variables@Added variables@g" \ + -e '/^- /d' \ + -e '/\.\.\. and [0-9]* more/d' \ | grep -vF $'warning: you don\'t have Internet access; disabling some network-dependent features' \ ; }