apenwarr-redo/t
Avery Pennarun 672b748394 Further improve handling of symlink targets/deps.
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.
2018-11-21 16:28:14 -05:00
..
000-set-minus-e Avoid bashism >&file 2018-10-11 03:28:05 -04:00
100-args Remove deprecated old-args feature. 2018-10-11 03:28:05 -04:00
101-atime Further improve handling of symlink targets/deps. 2018-11-21 16:28:14 -05:00
102-empty minimal/do: redo vs redo-ifchange, and fix empty target handling. 2018-10-17 01:54:29 -04:00
103-unicode t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
104-space t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
110-compile t/110-compile and t/111-example: skip if no C compiler installed. 2018-11-19 15:46:22 -05:00
111-example t/110-compile and t/111-example: skip if no C compiler installed. 2018-11-19 15:46:22 -05:00
120-defaults-flat t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
121-defaults-nested t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
130-mode Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
140-shuffle Add a test for --shuffle option. 2012-02-09 00:42:41 -05:00
141-keep-going Avoid bashism >&file 2018-10-11 03:28:05 -04:00
200-shell t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
201-fail minimal/do: don't create a .did file until after a file is actually built. 2018-11-02 04:25:35 -04:00
202-del t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
220-ifcreate t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
250-makedir minimal/do: didn't work correctly with multi-level auto dir creation. 2018-11-02 04:27:28 -04:00
260-whichdo minimal/do whichdo: should print ../default.do if ../$1.do exists. 2018-11-02 03:13:45 -04:00
350-deps t/*: some cleanups so switching between redo and minimal/do works. 2018-10-12 05:20:27 -04:00
355-deps-cyclic t/*: some cleanups so switching between redo and minimal/do works. 2018-10-12 05:20:27 -04:00
360-symlinks Further improve handling of symlink targets/deps. 2018-11-21 16:28:14 -05:00
370-logs redo-log: add automated tests, and fix some path bugs revealed by them. 2018-11-19 18:58:36 -05:00
550-chdir t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
640-always t/*: rearrange tests into numbered directories. 2012-02-08 01:56:50 -05:00
950-curse t/stress: add a test that usually triggers a bug using 950-curse. 2018-10-12 05:48:56 -04:00
999-installer Avoid bashism >&file 2018-10-11 03:28:05 -04:00
s60-stamp t/660-stamp: don't run at the same time as other tests in redo -j. 2018-10-12 05:20:27 -04:00
.gitignore t/stress: add a test that usually triggers a bug using 950-curse. 2018-10-12 05:48:56 -04:00
all.do builder.py: refresh the File object after obtaining the lock. 2018-10-13 01:37:08 -04:00
clean.do t/clean.do: don't forget to run s??/clean. 2018-11-02 02:20:52 -04:00
dotparams.od redo-sh: downgrade failures that affected dash; add a bash warning. 2018-10-12 05:18:25 -04:00
flush-cache Replaced all instances of 'python' with 'python2' 2018-11-14 10:52:09 -08:00
nothing.od shelltest: detect the ". of empty script" shell problem. 2011-02-28 22:06:57 -08:00
shelltest.od shelltest: downgrade #48 to a warning. 2018-10-29 07:35:56 +00:00
skip-if-minimal-do.sh Disable the tests that don't work with minimal/do. 2010-12-11 21:06:12 -08:00
sleep t/*.do: add some time delays. 2010-11-13 02:17:22 -08:00
stress.do t/stress: add a test that usually triggers a bug using 950-curse. 2018-10-12 05:48:56 -04:00