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