You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Creates a new Predicate that ensures the path doesn’t exist.
However, if the path is a symlink pointing to nothing, then it will be treated as not existing, when in fact the symlink is a file that exists.
Open to the idea that a broken link should count as not existing, but either way it would be useful for the function's docs to cover this.
It also gets complicated as a symlink may start to exist or not exist based on changes to other parts of the filesystem.
I tried this code:
use predicates::prelude::*;use std::{fs, os::unix, path::Path};fnmain(){let _ = fs::remove_file("symlink-to-non-existent-path");
unix::fs::symlink("non-existent-path","symlink-to-non-existent-path").unwrap();let predicate_fn = predicate::path::missing();// Shouldn't be missing as symlink is a real file.assert_eq!(false, predicate_fn.eval(Path::new("non-existent-file.foo")));}
I feel like matching path.exists() will most meet people's expectations and I worry changing it will break someone and would rather not break compatibility.
I can see us exposing an API with more specific checks (is_file, is_dir, is_symlink) and the corresponding predicate struct could have a follow_symlinks(false) function to customize it, like we do with utf8 on other predicates.
The main question is ow to expose this. Some ideas:
The docs for
predicates::path::missing()
say:However, if the path is a symlink pointing to nothing, then it will be treated as not existing, when in fact the symlink is a file that exists.
Open to the idea that a broken link should count as not existing, but either way it would be useful for the function's docs to cover this.
It also gets complicated as a symlink may start to exist or not exist based on changes to other parts of the filesystem.
I tried this code:
I expected the assert to pass, but it failed.
Meta
predicates-rs version:
2.1.0
rustc --version
:1.57.0
I think instead of:
The text was updated successfully, but these errors were encountered: