Merge pull request #314 from ouch-org/bump-version-to-0.4.0
[ouch.git] / src / utils / file_visibility.rs
blobd8abd40a258a6ea856ba89995d1fc3ba2ec88019
1 use std::path::Path;
3 /// Determines which files should be read or ignored during directory walking
4 pub struct FileVisibilityPolicy {
5     /// Enables reading .ignore files.
6     ///
7     /// Disabled by default.
8     pub read_ignore: bool,
10     /// If enabled, ignores hidden files.
11     ///
12     /// Disabled by default
13     pub read_hidden: bool,
15     /// Enables reading .gitignore files.
16     ///
17     /// This is enabled by default.
18     pub read_git_ignore: bool,
20     /// Enables reading `.git/info/exclude` files.
21     pub read_git_exclude: bool,
24 impl Default for FileVisibilityPolicy {
25     fn default() -> Self {
26         Self {
27             read_ignore: false,
28             read_hidden: true,
29             read_git_ignore: false,
30             read_git_exclude: false,
31         }
32     }
35 impl FileVisibilityPolicy {
36     pub fn new() -> Self {
37         Self::default()
38     }
40     #[must_use]
41     /// Enables reading .ignore files.
42     pub fn read_ignore(self, read_ignore: bool) -> Self {
43         Self { read_ignore, ..self }
44     }
46     #[must_use]
47     /// Enables reading .gitignore files.
48     pub fn read_git_ignore(self, read_git_ignore: bool) -> Self {
49         Self {
50             read_git_ignore,
51             ..self
52         }
53     }
55     #[must_use]
56     /// Enables reading `.git/info/exclude` files.
57     pub fn read_git_exclude(self, read_git_exclude: bool) -> Self {
58         Self {
59             read_git_exclude,
60             ..self
61         }
62     }
64     #[must_use]
65     /// Enables reading `.git/info/exclude` files.
66     pub fn read_hidden(self, read_hidden: bool) -> Self {
67         Self { read_hidden, ..self }
68     }
70     /// Walks through a directory using [`ignore::Walk`]
71     pub fn build_walker(&self, path: impl AsRef<Path>) -> ignore::Walk {
72         ignore::WalkBuilder::new(path)
73             .git_exclude(self.read_git_exclude)
74             .git_ignore(self.read_git_ignore)
75             .ignore(self.read_ignore)
76             .hidden(self.read_hidden)
77             .build()
78     }