Skip to content

Instantly share code, notes, and snippets.

@pzel
Last active August 29, 2015 14:00
Show Gist options
  • Save pzel/11079755 to your computer and use it in GitHub Desktop.
Save pzel/11079755 to your computer and use it in GitHub Desktop.

Project Build Tools: Output on first run vs. second run with no new changes

Cabal-install (Haskell), initial run:

Running cabal install for the first time, we get a full report of the steps taken to build the project.

hproject$ cabal install
Resolving dependencies...
Downloading SDL-0.6.4...
[1 of 1] Compiling Main             ( /tmp/SDL-0.6.4-6210/SDL-0.6.4/Setup.lhs, /tmp/SDL-0.6.4-6210/SDL-0.6.4/dist/setup/Main.o )
Linking /tmp/SDL-0.6.4-6210/SDL-0.6.4/dist/setup/setup ...
Configuring SDL-0.6.4...
configure: WARNING: unrecognized options: --with-compiler, --with-gcc
checking for sdl-config... /usr/bin/sdl-config
configure: creating ./config.status
config.status: creating config.mk
config.status: creating SDL.buildinfo
config.status: creating includes/HsSDLConfig.h
configure: WARNING: unrecognized options: --with-compiler, --with-gcc
Building SDL-0.6.4...
Preprocessing library SDL-0.6.4...
[ 1 of 16] Compiling Graphics.UI.SDL.Utilities ( Graphics/UI/SDL/Utilities.hs, dist/build/Graphics/UI/SDL/Utilities.o )

*** (Info on dependency module compilation, elided)

[16 of 16] Compiling Graphics.UI.SDL  ( Graphics/UI/SDL.hs, dist/build/Graphics/UI/SDL.o )
In-place registering SDL-0.6.4...
Installing library in /home/USER/.cabal/lib/x86_64-linux-ghc-7.6.3/SDL-0.6.4
Registering SDL-0.6.4...
Installed SDL-0.6.4
Configuring hproject-0.0.1...

*** (Info on the compiling hproject files, elided)

Linking dist/build/hproject/hproject ...
Installing executable(s) in /home/USER/.cabal/bin
Installed hproject-0.0.1
hproject$

Cabal-install, second run:

When we run cabal install without introducing any changes in the project source, the tool's output is much more consice:

hproject$ cabal install
Resolving dependencies...
Configuring hproject-0.0.1...
Building hproject-0.0.1...
Preprocessing executable 'hproject' for hproject-0.0.1...
Installing executable(s) in /home/USER/.cabal/bin
Installed hproject-0.0.1
hproject$

That's only six lines of output on the idempotent second compile, vs. potentially thousands on the first, clean compile.

Npm (Node js), initial run:

Installing the expressjs dependency for an empty project:

jsproject$ npm install
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/express/-/express-3.5.1.tgz

*** (Many, many lines of output elided)

npm http 200 https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz
express@3.5.1 node_modules/express
├── methods@0.1.0
├── merge-descriptors@0.0.2
├── debug@0.8.0
├── cookie-signature@1.0.3
├── range-parser@1.0.0
├── fresh@0.2.2
├── buffer-crc32@0.2.1
├── cookie@0.1.1
├── mkdirp@0.3.5
├── send@0.2.0 (mime@1.2.11)
├── commander@1.3.2 (keypress@0.1.0)
└── connect@2.14.1 (response-time@1.0.0, connect-timeout@1.0.0, pause@0.0.1, method-override@1.0.0, static-favicon@1.0.0, vhost@1.0.0, qs@0.6.6, basic-auth-connect@1.0.0, morgan@1.0.0, serve-static@1.0.2, bytes@0.2.1, raw-body@1.1.3, errorhandler@1.0.0, cookie-parser@1.0.1, compression@1.0.0, csurf@1.0.0, express-session@1.0.2, serve-index@1.0.1, multiparty@2.2.0)

Npm, second run:

That was quite noisy and colorful! However, if we run it again, without changing anything in the project:

jsproject$ npm install
jsproject$

We are treated with ZERO LINES OF OUTPUT! Very elegant. No changes were actually made, and our clean and uncluttered terminal screen is a clear indication of this fact.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment