Hello,
I see that FileUtils.rm_rf cannot handle a tree containing a
relative names longer than PATH_MAX.
These commands create a hierarchy a/0...0/0...0/...
where the name specifying the deepest directory has length 4097.
That is usually greater than PATH_MAX.
( mkdir a && cd a &&
for i in $(seq 16); do d=$(printf %0255d 0); mkdir $d && cd $d; done )
This shows that rm_rf doesn't remove "a":
ruby -r fileutils -e 'FileUtils.rm_rf("a")'
test -d a && echo failed to remove a
It prints this:
failed to remove a
It is not at all trivial to fix this "properly".
By "properly," I mean in a way that rm_rf can remove an arbitrarily
deep hierarchy securely while remaining efficient and thread safe.
Modulo hard-coded diagnostics, the C implementation in the GNU coreutils
package (src/remove.c) should be appropriate.
Jim