Make apenwarr/redo installable on windows and work with uv tool install
In commit redo-0.11-4-g34669fb, we changed os.stat into os.lstat to avoid false positives in the "manual override" detector: a .do file that generates $3 as a symlink would trigger manual override if the *target* of that symlink ever changed, which is incorrect. Unfortunately using os.lstat() leads to a different problem: if X depends on Y and Y is a symlink to Z, then X would not be rebuilt when Z changes, which is clearly wrong. The fix is twofold: 1. read_stamp() should change on changes to both the link itself, *and* the target of the link. 2. We shouldn't mark a target as overridden under so many situations. We'll use *only* the primary mtime of the os.lstat(), not all the other bits in the stamp. Step 2 fixes a few other false positives also. For example, if you 'cp -a' a whole tree to another location, the st_ino of all the targets will change, which would trigger a mass of "manual override" warnings. Although a change in inode is sufficient to count an input as having changed (just to be extra safe), it should *not* be considered a manual override. Now we can distinguish between the two. Because the stamp format has changed, update the SCHEMA_VER field. I should have done this every other time I changed the stamp format, but I forgot. Sorry. That leads to spurious "manually modified" warnings after upgrading redo. |
||
|---|---|---|
| contrib/bash_completion.d | ||
| Documentation | ||
| minimal | ||
| t | ||
| version | ||
| .gitignore | ||
| _all.do | ||
| all.do | ||
| atoi.py | ||
| builder.py | ||
| clean.do | ||
| deps.py | ||
| helpers.py | ||
| install.do | ||
| jwack.py | ||
| LICENSE | ||
| logs.py | ||
| Makefile | ||
| mkdocs.yml | ||
| options.py | ||
| paths.py | ||
| README.md | ||
| redo | ||
| redo-always | ||
| redo-always.py | ||
| redo-ifchange | ||
| redo-ifchange.py | ||
| redo-ifcreate | ||
| redo-ifcreate.py | ||
| redo-log | ||
| redo-log.py | ||
| redo-ood | ||
| redo-ood.py | ||
| redo-sh.do | ||
| redo-sources | ||
| redo-sources.py | ||
| redo-stamp | ||
| redo-stamp.py | ||
| redo-targets | ||
| redo-targets.py | ||
| redo-unlocked | ||
| redo-unlocked.py | ||
| redo-whichdo | ||
| redo-whichdo.py | ||
| redo.py | ||
| state.py | ||
| test.do | ||
| vars.py | ||
| vars_init.py | ||
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).