From mboxrd@z Thu Jan 1 00:00:00 1970 From: Danny Milosavljevic Subject: User-Friendlyness of Guix and non-scaryness, printing messages Date: Sun, 28 May 2017 20:44:44 +0200 Message-ID: <20170528204437.6dfd35c4@scratchpost.org> References: <87bbe3e5.AEAAKL2r-KIAAAAAAAAAAAOtUOAAAAACwQwAAAAAAAW9WABZGcQo@mailjet.com> <87y3tw4kw3.fsf@gnu.org> <87r2zfx0xt.fsf@gnu.org> <427678e8.AEUAKjfDcSgAAAAAAAAAAAPB0agAAAACwQwAAAAAAAW9WABZKceD@mailjet.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:41145) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dF3BR-0000sn-Tz for guix-devel@gnu.org; Sun, 28 May 2017 14:45:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dF3BO-0001l9-Mb for guix-devel@gnu.org; Sun, 28 May 2017 14:44:57 -0400 In-Reply-To: <427678e8.AEUAKjfDcSgAAAAAAAAAAAPB0agAAAACwQwAAAAAAAW9WABZKceD@mailjet.com> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org Hi, so bug#26941 (which is only tangentially related) has made me think about a long-standing usability wart of Guix: The verbosity of Guix messages is really off-putting for regular users. Ideally, a successful build & installation of a package should look like this: $ guix package -i foobar $ Nothing else. If you can't help it, then: $ guix package -i foobar Package foobar in version 2.3.2 has been successfully installed into your profile. $ For a successful installation it should *never* print (as it does now): $ guix package -i foobar ...aphics/opentype -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/transforms -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream/libwebrtc -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mock -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mock/mediasource -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/network -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/sql -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text -I/tmp/guix-build-webkitgtk-2.16 .3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text/icu -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/plugins -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/ Source/WebCore/rendering -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/line -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/mathml -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/shapes -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/style -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/rendering/svg -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/replay -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/storage -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/style -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg -I/tmp/guix-b uild-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg/animation -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg/graphics -I/tmp/guix-build-webkitgtk-2.16.3.drv -0/webkitgtk-2.16.3/Source/WebCore/svg/graphics/filters -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg/properties -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/websockets -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/workers -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/xml -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/xml/parser -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/WebCore -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/ForwardingHeaders/ANGLE -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gpu -I/tmp/guix-b uild-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/ThirdParty/woff2/src -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream/openwebrtc -I/tmp/guix-build-we bkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gstreamer -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gstreamer/mse -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gstreamer/eme -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/audio/gstreamer -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/bmp -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/gif -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/ico -I/tmp/gui x-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/jpeg -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/png -I/tm p/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/image-decoders/webp -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/linux -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/texmap -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/page/scrolling/coordinatedgraphics -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/texmap/coordinated -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/ThirdParty/ANGLE -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/ThirdParty/ANGLE/include/KHR -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/accessibility/atk -I/tmp/guix-build-webkitgtk-2.1 6.3.drv-0/webkitgtk-2.16.3/Source/WebCore/editing/atk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/page/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Sour ce/WebCore/platform/cairo -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/gamepad/glib -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/geoclue -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/cairo -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/egl -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/glx -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/freetype -I/tmp/guix-build-we bkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/opengl -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/wayland -I/tmp/guix-build-web kitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/graphics/x11 -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/mediastream/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/network/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/network/soup -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/platform/text/gtk -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/bindings/gobject -isystem /gnu/store/0wps368gx0cn3ynrkbhzq5pxf75rng7y-glib-2.50.3/include/glib-2.0 -isystem /gnu/store/0wps368gx0cn3ynrkbhzq5pxf75rng7y-glib-2.50.3/lib/glib-2.0/include -isystem /gnu/store/228dcbvw787gbz1kslwjcaz5qnfcgn2v-gstreamer-1.12.0/include/gstreamer-1 .0 -isystem /gnu/store/jkx9mkw8j34jfnv0dqdbbzxdcx3mlfdg-atk-2.22.0/include/atk-1.0 -isystem /gnu/store/i0bjwdqvn0wixcwfpw254w0az17iysga-cairo-1.14.8/include/cairo -isystem /gnu/store/92scvk1jj5fnsbw y4nichgg0hdl235dz-enchant-1.6.0/include/enchant -isystem /gnu/store/b837wr8ffw2ppbx1744a2xll70bh8h4c-freetype-2.7.1/include/freetype2/freetype -isystem /gnu/store/b837wr8ffw2ppbx1744a2xll70bh8h4c-freetype-2.7.1/include/freetype2 -isystem /gnu/store/0wps368gx0cn3ynrkbhzq5pxf75rng7y-glib-2.50.3/include/gio-unix-2.0 -isystem /gnu/store/k6jkr6p94xlsddgiy8abicm2b36gkdh6-harfbuzz-1.4.3/include/harfbuzz -isystem /gnu/store/iclywgva6yjrxyblxrxcisrpqc2x8m5s-libsecret-0.18.5/include/libsecret-1 -isystem /gnu/store/4wr3mq3n7wvgkpy6384rsrrq5kiwwihq-libsoup-2.56.0/include/libsoup-2.4 -isystem /gnu/store/8h3gg0hj7lwimcdn2r912vv2mnh6yx0n-libxml2-2.9.4/include/libxml2 -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/ Source/JavaScriptCore/.. -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/API -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/Forwardin gHeaders -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/assembler -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/b3 -I/tmp/guix-build-webkitgtk-2.16 .3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/b3/air -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/bindings -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/builtins -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/bytecode -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/bytecompiler -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/dfg -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/disassembler -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/disassembler/udis86 -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/disassembler/ARM64 -I/tmp/gu ix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/domjit -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/ftl -I/tmp/guix-build-webkitgtk-2.16.3.d rv-0/webkitgtk-2.16.3/Source/JavaScriptCore/heap -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/debugger -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/inspector -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/inspector/agents -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/inspector/augmentable -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/inspector/remote -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/interpreter -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/jit -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/llint -I/tmp/guix-b uild-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/parser -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/profiler -I/tmp/guix-build-webkitgtk-2.16.3. drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/replay -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/runtime -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/tools -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/wasm -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/wasm/js -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/JavaScriptCore/yarr -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/ForwardingHeaders -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/JavaScriptCore -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources/JavaScriptCore/inspector -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/bmallo c -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WTF -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/build/DerivedSources -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/ ThirdParty -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/PAL -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/PAL/pal -I/tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/PAL/pal/crypto -fno-exceptions -fno-strict-aliasing -fno-rtti -std=c++1y -O3 -DNDEBUG -Wall -Wextra -Wcast-align -Wformat-security -Wmissing-format-attribute -Wpointer-arith -Wundef -Wwrite-strings -fPIC -o CMakeFiles/WebCore.dir/svg/SVGFEImageElement.cpp.o -c /tmp/guix-build-webkitgtk-2.16.3.drv-0/webkitgtk-2.16.3/Source/WebCore/svg/SVGFEImageElement.cpp [... 20 pages of cryptic text] Package foobar has been successfully installed into your profile. $ I think that a line containing something like "36pqsgbqi7kkkkn89sqrp2hyk3gxm8zv" (like install-file would print, too) should never appear in front of the user in normal operation. Some programmer (!) colleagues of mine actually remarked something like "what is THAT? Looks scary" when they looked at what guix prints when I install something in Guix. Really, printing that much noise is an usability bug. Arun mentioned that he wants to see that something is still happening and therefore wants something printed. I agree - but it should only print and update one line total. For example, if we wanted a progress monitor, that could look like this (this should include all the dependencies in the same progress display): $ guix package -i foobar Installing... [20%] \ ^ Spinner that spins, say, every time a line is added to the log file. And later when progress is 100%, changing to $ guix package -i foobar Installation successful $ I think that the detailed messages are good to have in the event that an installation fails. But even then it should just print a message like this (and here, it really should print it): $ guix package -i foobar Installation failed. For more details, you can invoke "guix build --log-file `guix build -d foobar`" (without double quotes). In order to report a bug, please send a message to . $ Or it could invoke "guix build --log-file `guix build -d foobar`" on its own and just print the resulting name. It should NOT print the detailed messages automatically. So all in all I'd really like much less verbosity on the console. I actually use guix behind a wrapper script of mine that supresses all non-error messages for common cases (it redirects stdout to /dev/null) - and it's *still* pretty bad. I think that's because all the build output is printed to stderr by build.scm , regardless of whether the container printed it to stdout or stderr. Is that correct? Could we please make "guix package -i" use "guix build -q" to make stdout and stderr go into the log files only? Furthermore, I think even the guix download lines are too noisy in the successful case. Guix should really just update one line for the entire thing, downloading, building, profile updating, everything. The usual UNIX design, too, is that if everything works, UNIX prints nothing. As soon as something is printed my first feeling is that it's something bad (especially with 20 pages :P). And really, no one cares what the current gcc command is - as long as it works. If UNIX printed everything it did it would look very noisy and be very slow (printing takes time). I think "guix pull" is nice in this regard. It just shows a progress bar. Nothing else. Because a normal user doesn't care that now it compiles gnu/foo/bar.scm into e5y35334436743987463464363-foo/lib/afrewtew/tw/teww. WDYT?