]> git.proxmox.com Git - cargo.git/commit
Ignore broken but excluded file during traversing
authorWeihang Lo <me@weihanglo.tw>
Fri, 19 Aug 2022 22:30:01 +0000 (23:30 +0100)
committerWeihang Lo <me@weihanglo.tw>
Fri, 19 Aug 2022 23:56:43 +0000 (00:56 +0100)
commitc0110c63820b5322ac42e23a73b3ccaf8e3cf1a9
tree8648e2fba68b4d0670c2fcee5920fcc0d561427c
parent52a418c516bf73e8ce1d9fc61d5583269ed66b1a
Ignore broken but excluded file during traversing

Walkdir's [`filter_entry()`][1] won't call the predicate if the entry
is essentially an `Err` from its underyling `IntoIter`. That means
Cargo hasn't had a chance to call `filter` on an entry that should be
excluded but eventually return an `Err` and cause the loop to stop.
For instance, a broken symlink which should bee excluded by `filter`
will generate an error since `filter` closure is not called with it.

The solution is calling `filter` if an error occurs with a path
(because it has yet been called with that path).
If it's exactly excluded, ignore the error.

[1]: https://github.com/BurntSushi/walkdir/blob/abf3a15887758e0af54ebca827c7b6f8b311cb45/src/lib.rs#L1042-L1058
src/cargo/sources/path.rs