Features ¶
Notable features that differentiate goredo
from many other
implementations.
- explicit useful and convenient checks from
apenwarr/redo
:
- check that $1 was not touched during .do execution
- check that stdout and $3 are not written simultaneously
- check that generated target was not modified "externally" outside
the redo, preventing its overwriting, but continuing the build
(optionally can stop)
- recursive, indented and serialized logs display ability, with
priority to the depth and bad return codes, like in
apenwarr/redo
,
thanks to apenwarr’s article
- all environment variables, working directory, command line
arguments, start/finish times, duration, participated PIDs, return
codes can be saved for later investigation
- targets, dependency information and their directories are explicitly
synced (can be disabled, should work faster)
- file’s change is detected by comparing its size, and
BLAKE3 hash. Also as an
optimization, by default if file’s
ctime
is same, then hash
check is skipped. Optionally you can disable that behaviour, or even
enable trust to file’s mtime
- files creation is
umask
-friendly (unlike mkstemp()
used in redo-c
)
- parallel build with jobs limit, optionally in infinite mode
- optional coloured messages
- verbose debug messages, including out-of-date determination, PIDs,
lock and jobserver acquirings/releases
- displaying of each target’s execution time
- each target’s stderr can be prefixed with the PID
- optional statusline with currently running/waiting/done jobs
- target’s stderr can be stored on the disk with
TAI64N timestamp prefixes
for each line. To convert them to localtime you can use either
tai64nlocal
utility from
daemontools, or similar one:
go install go.cypherpunks.su/tai64n/v4/cmd/tai64nlocal@latest
- Either GNU Make
or NetBSD’s
bmake
jobserver compatibility support