@node Features @unnumbered Features Notable features that differentiate @command{goredo} from many other implementations. @itemize @item explicit useful and convenient checks from @command{apenwarr/redo}: @itemize @item check that @file{$1} was not touched during .do execution @item check that @file{stdout} and @file{$3} are not written simultaneously @item check that generated target was not modified "externally" outside the redo, preventing its overwriting, but continuing the build @end itemize @item recursive, indented and serialized logs display ability, with priority to the depth and bad return codes, like in @command{apenwarr/redo}, thanks to @url{https://apenwarr.ca/log/20181106, apenwarr's article} @item all environment variables, working directory, command line arguments, start/finish times, duration, participated PIDs, return codes can be saved for later investigation @item targets, dependency information and their directories are explicitly synced (can be disabled, should work faster) @item file's change is detected by comparing its size, @code{ctime} (if @env{$REDO_INODE_NO_TRUST} environment variable is not set) and @url{https://github.com/BLAKE3-team/BLAKE3, BLAKE3} hash @item files creation is @code{umask}-friendly (unlike @code{mkstemp()} used in @command{redo-c}) @item parallel build with jobs limit, optionally in infinite mode @item optional coloured messages @item verbose debug messages, including out-of-date determination, PIDs, lock and jobserver acquirings/releases @item displaying of each target's execution time @item each target's @file{stderr} can be prefixed with the PID @item optional statusline with currently running/waiting/done jobs @item target's @file{stderr} can be stored on the disk with @url{http://cr.yp.to/libtai/tai64.html, TAI64N} timestamp prefixes for each line. To convert them to localtime you can use either @command{tai64nlocal} utility from @url{http://cr.yp.to/daemontools.html, daemontools}, or similar one: @code{go get go.cypherpunks.ru/tai64n/cmd/tai64nlocal} @item Either GNU Make or bmake @ref{Jobserver, jobserver} compatibility support @end itemize