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