Skip to content

Commit fcb16c8

Browse files
authored
Re-implement --exclude
1 parent ae5e3e4 commit fcb16c8

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/info/langs/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::collections::HashMap;
66
use std::error::Error;
77
use std::path::Path;
88
use strum::IntoEnumIterator;
9+
use globset::{Glob, GlobSetBuilder};
910

1011
pub mod language;
1112

@@ -22,6 +23,13 @@ pub fn get_size_by_language_sorted(
2223
language_types: &[LanguageType],
2324
include_hidden: bool,
2425
) -> Result<Vec<(Language, usize)>> {
26+
let globset = globs_to_exclude.iter()
27+
.filter_map(|glob| Glob::new(glob).ok())
28+
.fold(GlobSetBuilder::new(), |mut builder, glob| {
29+
builder.add(glob);
30+
builder
31+
})
32+
.build()?;
2533
let analysis = match get_statistics(dir, globs_to_exclude, language_types, include_hidden) {
2634
Ok(stats) => stats,
2735
Err(e) => return Err(anyhow!("Could not analyze repository: {}", e))
@@ -30,6 +38,7 @@ pub fn get_size_by_language_sorted(
3038
// NOTE If finer control is ever needed, summary_with can be used.
3139
let mut size_by_language: Vec<(Language, _)> = analysis.iter()
3240
.filter(|(path, _)| include_hidden || !is_hidden(path))
41+
.filter(|(path, _)| !globset.is_match(path))
3342
.filter(|(_, entry)| {
3443
let lang_type = LanguageType(entry.language().category());
3544
language_types.contains(&lang_type)

0 commit comments

Comments
 (0)