Make apenwarr/redo installable on windows and work with uv tool install
Find a file
Avery Pennarun b2411fe483 redo-log: capture and linearize the output of redo builds.
redo now saves the stderr from every .do script, for every target, into
a file in the .redo directory.  That means you can look up the logs
from the most recent build of any target using the new redo-log
command, for example:

	redo-log -r all

The default is to show logs non-recursively, that is, it'll show when a
target does redo-ifchange on another target, but it won't recurse into
the logs for the latter target.  With -r (recursive), it does.  With -u
(unchanged), it does even if redo-ifchange discovered that the target
was already up-to-date; in that case, it prints the logs of the *most
recent* time the target was generated.

With --no-details, redo-log will show only the 'redo' lines, not the
other log messages.  For very noisy build systems (like recursing into
a 'make' instance) this can be helpful to get an overview of what
happened, without all the cruft.

You can use the -f (follow) option like tail -f, to follow a build
that's currently in progress until it finishes.  redo itself spins up a
copy of redo-log -r -f while it runs, so you can see what's going on.

Still broken in this version:

- No man page or new tests yet.

- ANSI colors don't yet work (unless you use --raw-logs, which gives
  the old-style behaviour).

- You can't redirect the output of a sub-redo to a file or a
  pipe right now, because redo-log is eating it.

- The regex for matching 'redo' lines in the log is very gross.
  Instead, we should put the raw log files in a more machine-parseable
  format, and redo-log should turn that into human-readable format.

- redo-log tries to "linearize" the logs, which makes them
  comprehensible even for a large parallel build.  It recursively shows
  log messages for each target in depth-first tree order (by tracing
  into a new target every time it sees a 'redo' line).  This works
  really well, but in some specific cases, the "topmost" redo instance
  can get stuck waiting for a jwack token, which makes it look like the
  whole build has stalled, when really redo-log is just waiting a long
  time for a particular subprocess to be able to continue.  We'll need to
  add a specific workaround for that.
2018-11-17 10:27:43 -05:00
contrib/bash_completion.d MacOS: "-e filename/." returns true even for non-directories. 2011-03-05 19:03:30 -08:00
Documentation Refactor the huge README.md into the more structured mkdocs. 2018-11-16 05:22:09 -05:00
minimal minimal/do: didn't work correctly with multi-level auto dir creation. 2018-11-02 04:27:28 -04:00
t Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
version vars.do: an improvement on the previous patch. 2011-02-17 01:05:52 -08:00
.gitignore Generate a basic documentation website with the mkdocs toolkit. 2018-11-16 00:50:18 -05:00
_all.do Change definitions of $1,$2,$3 to match djb's redo. 2011-12-31 02:49:39 -05:00
all.do Automatically select a good shell instead of relying on /bin/sh. 2010-12-21 04:44:39 -08:00
atoi.py Move atoi() into atoi.py and add a new debug2() debug level. 2010-11-16 04:13:17 -08:00
builder.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
clean.do .gitignore and clean.do: add minimal/.do* 2018-11-16 00:32:07 -05:00
deps.py Print a better message when detecting pre-existing cyclic dependencies. 2018-11-02 02:20:52 -04:00
helpers.py New redo-sources and redo-targets commands. 2010-12-19 03:50:38 -08:00
install.do Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
jwack.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
LICENSE Add README.md and LICENSE. 2010-11-17 00:53:58 -08:00
log.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
Makefile Makefile: don't try to 'redo Makefile'. 2010-12-11 23:41:40 -08:00
mkdocs.yml Refactor the huge README.md into the more structured mkdocs. 2018-11-16 05:22:09 -05:00
options.py options.py: typo in comment 2018-11-13 07:00:11 -05:00
paths.py redo-whichdo: fix a bug where the last dir was checked twice, and add tests. 2018-11-02 02:20:52 -04:00
README.md Refactor the huge README.md into the more structured mkdocs. 2018-11-16 05:22:09 -05:00
redo Extremely basic first crack at implementing djb's redo. 2010-11-12 05:25:03 -08:00
redo-always Add a redo-always command: it adds an "always dirty" dependency to your target. 2010-12-11 07:02:45 -08:00
redo-always.py Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
redo-ifchange Move 'redo --ifchange' into 'redo-ifchange' to match djb's style. 2010-11-13 00:47:49 -08:00
redo-ifchange.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
redo-ifcreate Add redo-ifcreate to match djb's design. 2010-11-13 01:10:43 -08:00
redo-ifcreate.py Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
redo-log redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
redo-log.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
redo-ood Add a new redo-ood command. 2010-12-19 03:50:38 -08:00
redo-ood.py Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
redo-sh.do redo-sh: downgrade failures that affected dash; add a bash warning. 2018-10-12 05:18:25 -04:00
redo-sources New redo-sources and redo-targets commands. 2010-12-19 03:50:38 -08:00
redo-sources.py Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
redo-stamp Half-support for using file checksums instead of stamps. 2010-12-11 05:54:37 -08:00
redo-stamp.py Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
redo-targets New redo-sources and redo-targets commands. 2010-12-19 03:50:38 -08:00
redo-targets.py Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
redo-unlocked Rename redo-oob to redo-unlocked, to more accurately represent its use. 2010-12-19 01:20:13 -08:00
redo-unlocked.py Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
redo-whichdo redo-whichdo: a command that explains the .do search path for a target. 2018-10-04 20:20:53 -04:00
redo-whichdo.py Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
redo.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
state.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
test.do minimal/do: add redo-whichdo support and internal unit tests. 2018-11-02 02:20:52 -04:00
vars.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00
vars_init.py redo-log: capture and linearize the output of redo builds. 2018-11-17 10:27:43 -05:00

redo - a recursive build system

Smaller, easier, more powerful, and more reliable than make.

This is an implementation of Daniel J. Bernstein's redo build system. He never released his version, so other people have implemented different variants based on his published specification.

This version, sometimes called apenwarr/redo, is probably the most advanced one, including support for parallel builds, improved logging, and helpful debugging features.


  • View the documentation via readthedocs.org
  • Visit the source code on github
  • Discussions and support via the mailing list. You can subscribe by sending any email message to redo-list+subscribe@googlegroups.com (note the plus sign).