4 There are three basic main commands, originally suggested by DJB in his
9 Forcefully and sequentially build specified targets. This is the
10 main command you will explicitly use from the command line. If no
11 targets are given, then @file{all} target will be used by default.
13 Rebuild specified targets if they are out-of-date and record them as
14 a dependency for the currently run target. This is the main command
15 you will use in @file{.do} files.
17 Record the non-existent file dependency for the currently run
18 target. Target will be rebuilt if any of the given files appear. Can
19 be used only inside @file{.do} file.
22 Pay attention that @command{redo-ifchange} enables parallel builds of
23 the given targets, but ordinary @command{redo} is not: it builds
24 specified targets sequentially and stops when error happens.
26 @option{-x} option can be used to enable tracing (@code{set -x}) of the
27 currently run shell script @file{.do} file. @option{-xx} option enables
28 tracing for all invoked @file{.do} files further.
30 With @option{-j} option you can enable parallel builds, probably with an
31 infinite number of workers (@code{=0}). Also you can set
32 @env{$REDO_JOBS} to automatically apply that setting globally.
34 Read about @ref{Logs, log storage capabilities}.
36 @option{-log-pid} (@env{$REDO_LOG_PID=1}) can be used to prefix job's
37 @code{stderr} with the PID, that could be useful during parallel builds.
38 @option{-d} (@env{$REDO_DEBUG=1}) enables debug messages.
40 @option{-no-progress} (@env{$REDO_NO_PROGRESS=1}) and
41 @option{-no-status} (@env{$REDO_NO_STATUS=1}) disable statusline and
42 progress display. @env{$NO_COLOR=1} disables progress/debug messages
45 By default all build commands use @code{fsync} to assure data is reached
46 the disk. You can disable its usage with @env{$REDO_NO_SYNC=1}
47 environment variable, for speeding up the build process.
49 There are other commands that could be found in other implementations too:
53 Record current target as an always-do dependency. By definition it
54 should be always build. @command{goredo} tries to build it once per
57 Record "stamp" dependency. It reads @code{stdin} and stores its hash
58 in the dependency database. It is not used anyhow, it is dummy. Read
59 about @ref{Stamping, stamping} in the FAQ. It is left only for
60 compatibility with some other implementations.
61 @item redo-targets, redo-ood
62 Show all known targets, possibly limited by specified directories.
63 @command{redo-ood} shows only the out-of-date ones.
65 Recursively show all source files the given targets depend on.
67 It is not in other distributions, but it is some kind of opposite of
68 @command{redo-sources} -- shows the targets that will be affected by
69 specified files change.
72 And there are some maintenance and debug commands:
76 Removes either temporary (@option{tmp}), log files (@option{log}),
77 or everything related to @command{goredo} (@option{full}).
80 Display @file{.do} search paths for specified target (similar to
81 @command{apenwarr/redo}):
83 $ redo-whichdo x/y/a.b.o
101 @url{https://en.wikipedia.org/wiki/DOT_(graph_description_language), DOT}
102 graph generator. For example to visualize your dependencies with GraphViz:
104 $ redo target [...] # to assure that **/.redo/*.rec are filled up
105 $ redo-dot target [...] > whatever.dot
106 $ dot -Tpng whatever.dot > whatever.png # possibly add -Gsplines=ortho
110 When you copy your worktree to different place, then copied files
111 ctime will change. And because recorded dependency information
112 differs from updated ctimes, out-of-date algorithm will fallback to
113 rereading the whole files for hash calculation, that is much slower.
114 If you do not want to rebuild your targets from the ground, then
115 @command{redo-depfix} can traverse through all dependency files and
116 check if they have non-altered ctime values and update them in place.