Add Hide hidden flag

From feature request to respect the .gitignore file. Decided to bundle in
respect for hidden files into the same feature [otherwise if you obey
the .gitignore file you still endup showing the .git directory]
This commit is contained in:
andy.boot
2020-09-02 22:47:32 +01:00
parent 4e1180e502
commit 873456eb97
2 changed files with 19 additions and 6 deletions
+8
View File
@@ -126,6 +126,12 @@ fn main() {
.long("filecount") .long("filecount")
.help("Directory 'size' is number of child files/dirs not disk size"), .help("Directory 'size' is number of child files/dirs not disk size"),
) )
.arg(
Arg::with_name("ignore_hidden")
.short("i") // Do not use 'h' this is used by 'help'
.long("ignore_hidden")
.help("Obey .git_ignore rules & Do not display hidden files"),
)
.arg(Arg::with_name("inputs").multiple(true)) .arg(Arg::with_name("inputs").multiple(true))
.get_matches(); .get_matches();
@@ -165,6 +171,7 @@ fn main() {
None => None, None => None,
}; };
let by_filecount = options.is_present("by_filecount"); let by_filecount = options.is_present("by_filecount");
let show_hidden = !options.is_present("ignore_hidden");
let simplified_dirs = simplify_dir_names(target_dirs); let simplified_dirs = simplify_dir_names(target_dirs);
let (permissions, nodes) = get_dir_tree( let (permissions, nodes) = get_dir_tree(
@@ -173,6 +180,7 @@ fn main() {
use_apparent_size, use_apparent_size,
limit_filesystem, limit_filesystem,
by_filecount, by_filecount,
show_hidden,
depth, depth,
); );
let sorted_data = sort(nodes); let sorted_data = sort(nodes);
+7 -2
View File
@@ -81,16 +81,19 @@ pub fn simplify_dir_names<P: AsRef<Path>>(filenames: Vec<P>) -> HashSet<PathBuf>
fn prepare_walk_dir_builder<P: AsRef<Path>>( fn prepare_walk_dir_builder<P: AsRef<Path>>(
top_level_names: &HashSet<P>, top_level_names: &HashSet<P>,
limit_filesystem: bool, limit_filesystem: bool,
show_hidden: bool,
max_depth: Option<usize>, max_depth: Option<usize>,
) -> WalkBuilder { ) -> WalkBuilder {
let mut it = top_level_names.iter(); let mut it = top_level_names.iter();
let mut builder = WalkBuilder::new(it.next().unwrap()); let mut builder = WalkBuilder::new(it.next().unwrap());
builder.follow_links(false); builder.follow_links(false);
if show_hidden {
builder.hidden(false);
builder.ignore(false); builder.ignore(false);
builder.git_global(false); builder.git_global(false);
builder.git_ignore(false); builder.git_ignore(false);
builder.git_exclude(false); builder.git_exclude(false);
builder.hidden(false); }
if limit_filesystem { if limit_filesystem {
builder.same_file_system(true); builder.same_file_system(true);
@@ -110,6 +113,7 @@ pub fn get_dir_tree<P: AsRef<Path>>(
apparent_size: bool, apparent_size: bool,
limit_filesystem: bool, limit_filesystem: bool,
by_filecount: bool, by_filecount: bool,
show_hidden: bool,
max_depth: Option<usize>, max_depth: Option<usize>,
) -> (bool, HashMap<PathBuf, u64>) { ) -> (bool, HashMap<PathBuf, u64>) {
let (tx, rx) = channel::bounded::<PathData>(1000); let (tx, rx) = channel::bounded::<PathData>(1000);
@@ -119,7 +123,8 @@ pub fn get_dir_tree<P: AsRef<Path>>(
let t2 = HashSet::from_iter(top_level_names.iter().map(|p| p.as_ref().to_path_buf())); let t2 = HashSet::from_iter(top_level_names.iter().map(|p| p.as_ref().to_path_buf()));
let t = create_reader_thread(rx, t2, apparent_size); let t = create_reader_thread(rx, t2, apparent_size);
let walk_dir_builder = prepare_walk_dir_builder(top_level_names, limit_filesystem, max_depth); let walk_dir_builder =
prepare_walk_dir_builder(top_level_names, limit_filesystem, show_hidden, max_depth);
walk_dir_builder.build_parallel().run(|| { walk_dir_builder.build_parallel().run(|| {
let txc = tx.clone(); let txc = tx.clone();