Make apenwarr/redo installable on windows and work with uv tool install
Find a file
Avery Pennarun d95277d121 Use mkstemp() to create the stdout temp file, and simplify $3 path.
Previously, we'd try to put the stdout temp file in the same dir as the
target, if that dir exists.  Otherwise we'd walk up the directory tree
looking for a good place.  But this would go wrong if the directory we
chose got *deleted* during the run of the .do file.

Instead, we switch to an entirely new design: we use mkstemp() to
generate a temp file in the standard temp file location (probably
/tmp), then open it and immediately delete it, so the .do file can't
cause any unexpected behaviour.  After the .do file exits, we use our
still-open fd to the stdout file to read the content back out.

In the old implementation, we also put the $3 in the "adjusted"
location that depended whether the target dir already existed, just for
consistency.  But that was never necessary: we didn't create the $3
file, and if the .do script wants to write to $3, it should create the
target dir first anyway.  So change it to *always* use a $3 temp
filename in the target dir, which is much simpler and so has fewer edge
cases.

Add t/202-del/deltest4 with some tests for all these edge cases.

Reported-by: Jeff Stearns <jeff.stearns@gmail.com>
2018-12-13 13:28:44 +00:00
bin Move setproctitle() stuff into title.py. 2018-12-05 02:28:34 -05:00
contrib/bash_completion.d MacOS: "-e filename/." returns true even for non-directories. 2011-03-05 19:03:30 -08:00
docs Minor copyediting of index.md. 2018-12-10 05:03:20 +00:00
minimal Use mkstemp() to create the stdout temp file, and simplify $3 path. 2018-12-13 13:28:44 +00:00
redo Use mkstemp() to create the stdout temp file, and simplify $3 path. 2018-12-13 13:28:44 +00:00
t Use mkstemp() to create the stdout temp file, and simplify $3 path. 2018-12-13 13:28:44 +00:00
.gitignore Directory reorg: move code into redo/, generate binaries in bin/. 2018-12-04 02:53:40 -05:00
.pylintrc Switch to module-relative import syntax. 2018-12-05 02:34:36 -05:00
_all.do Directory reorg: move code into redo/, generate binaries in bin/. 2018-12-04 02:53:40 -05:00
all.do Directory reorg: move code into redo/, generate binaries in bin/. 2018-12-04 02:53:40 -05:00
clean.do Directory reorg: move code into redo/, generate binaries in bin/. 2018-12-04 02:53:40 -05:00
do Fix a few lagging doc references to old-style build+test layout. 2018-12-10 04:33:57 +00:00
install.do Fix minimal/do and tests when built in a path containing spaces. 2018-12-11 01:22:29 +00:00
LICENSE Change license to Apache 2.0. 2018-11-26 17:04:31 -05:00
Makefile Directory reorg: move code into redo/, generate binaries in bin/. 2018-12-04 02:53:40 -05:00
mkdocs.yml Directory reorg: move code into redo/, generate binaries in bin/. 2018-12-04 02:53:40 -05:00
README.md Directory reorg: move code into redo/, generate binaries in bin/. 2018-12-04 02:53:40 -05:00
test.do Fix a few lagging doc references to old-style build+test layout. 2018-12-10 04:33:57 +00: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.

To build and test redo, run ./do -j10 test. To install it, run DESTDIR=/tmp/testinstall PREFIX=/usr/local ./do -j10 install.


  • 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).