Add a test for repairing paths
nix-shell: Execute shellHook if it exists

Since normal builds don't execute shellHook, this allows nix-shell
specific customisation.  Suggested by Domen.
Heuristically detect if a build may have failed due to a full disk

This will allow Hydra to detect that a build should not be marked as
"permanently failed", allowing it to be retried later.
nix-store --gc --max-freed: Support a unit specifier

E.g. "--max-freed 10G" means "free ten gigabytes".
Move some code around

In particular, do replacing of valid paths during repair later.  This
prevents us from replacing a valid path after the build fails.
When using a build hook, only copy missing paths
Refactoring
Make --repair work on Darwin

Mac OS X doesn't allow renaming a read-only directory.

http://hydra.nixos.org/build/9113895
Don't build on Debian 6.0

Its linker is too old to understand --no-copy-dt-needed-entries.

http://hydra.nixos.org/build/9113883
Test nix-store --verify-path and --repair-path
Add a flag ‘--check’ to verify build determinism

The flag ‘--check’ to ‘nix-store -r’ or ‘nix-build’ will cause Nix to
redo the build of a derivation whose output paths are already valid.
If the new output differs from the original output, an error is
printed.  This makes it easier to test if a build is deterministic.
(Obviously this cannot catch all sources of non-determinism, but it
catches the most common one, namely the current time.)

For example:

  $ nix-build '<nixpkgs>' -A patchelf
  ...
  $ nix-build '<nixpkgs>' -A patchelf --check
  error: derivation `/nix/store/1ipvxsdnbhl1rw6siz6x92s7sc8nwkkb-patchelf-0.6' may not be deterministic: hash mismatch in output `/nix/store/4pc1dmw5xkwmc6q3gdc9i5nbjl4dkjpp-patchelf-0.6.drv'

The --check build fails if not all outputs are valid.  Thus the first
call to nix-build is necessary to ensure that all outputs are valid.

The current outputs are left untouched: the new outputs are either put
in a chroot or diverted to a different location in the store using
hash rewriting.
Slight simplification
Update ignores
lexer-tab.o and parser-tab.o require each other's headers