Skip to content

Commit 6003e04

Browse files
committed
add --exlude option
1 parent 81e5334 commit 6003e04

File tree

3 files changed

+31
-6
lines changed

3 files changed

+31
-6
lines changed

Diff for: src/info.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -305,11 +305,12 @@ impl Info {
305305
no_merges: bool,
306306
color_blocks_flag: bool,
307307
author_nb: usize,
308+
ignored_directories: Vec<&str>,
308309
) -> Result<Info> {
310+
let is_root_directory = dir == ".";
309311
let repo = Repository::discover(&dir).map_err(|_| Error::NotGitRepo)?;
310312
let workdir = repo.workdir().ok_or(Error::BareGitRepo)?;
311313
let workdir_str = workdir.to_str().unwrap();
312-
313314
let config = Info::get_configuration(&repo)?;
314315
let current_commit_info = Info::get_current_commit_info(&repo)?;
315316
let authors = Info::get_authors(workdir_str, no_merges, author_nb);
@@ -321,7 +322,8 @@ impl Info {
321322
let last_change = Info::get_last_change(workdir_str)?;
322323
let creation_date = Info::get_creation_time(workdir_str)?;
323324
let project_license = Info::get_project_license(workdir_str)?;
324-
let (languages_stats, number_of_lines) = Language::get_language_stats(workdir_str)?;
325+
let (languages_stats, number_of_lines) =
326+
Language::get_language_stats(workdir_str, ignored_directories, is_root_directory)?;
325327
let dominant_language = Language::get_dominant_language(languages_stats.clone());
326328

327329
Ok(Info {

Diff for: src/language.rs

+11-4
Original file line numberDiff line numberDiff line change
@@ -352,8 +352,12 @@ impl Language {
352352
}
353353
}
354354

355-
pub fn get_language_stats(dir: &str) -> Result<(Vec<(Language, f64)>, usize)> {
356-
let tokei_langs = project_languages(&dir);
355+
pub fn get_language_stats(
356+
dir: &str,
357+
exclude: Vec<&str>,
358+
is_root: bool,
359+
) -> Result<(Vec<(Language, f64)>, usize)> {
360+
let tokei_langs = project_languages(&dir, exclude, is_root);
357361
let languages_stat =
358362
Language::get_languages_stat(&tokei_langs).ok_or(Error::SourceCodeNotFound)?;
359363
let mut stat_vec: Vec<(_, _)> = languages_stat.into_iter().collect();
@@ -375,7 +379,7 @@ fn get_total_loc(languages: &tokei::Languages) -> usize {
375379
.fold(0, |sum, val| sum + val.code)
376380
}
377381

378-
fn project_languages(dir: &str) -> tokei::Languages {
382+
fn project_languages(dir: &str, exclude: Vec<&str>, is_root: bool) -> tokei::Languages {
379383
use tokei::Config;
380384

381385
let mut languages = tokei::Languages::new();
@@ -384,7 +388,10 @@ fn project_languages(dir: &str) -> tokei::Languages {
384388
types: Some(required_languages),
385389
..Config::default()
386390
};
387-
languages.get_statistics(&[&dir], &[".git", "target"], &tokei_config);
391+
392+
let d = if is_root { "." } else { dir };
393+
languages.get_statistics(&[&d], &exclude, &tokei_config);
394+
388395
languages
389396
}
390397

Diff for: src/main.rs

+16
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,22 @@ fn main() -> Result<()> {
224224
.default_value("3")
225225
.help("Number of authors to be shown."),
226226
)
227+
.arg(
228+
Arg::with_name("exclude")
229+
.short("e")
230+
.long("exclude")
231+
.multiple(true)
232+
.takes_value(true)
233+
.help("Ignore all files & directories matching the pattern.")
234+
)
227235
.get_matches();
228236

237+
let ignored_directories: Vec<&str> = if let Some(user_ignored) = matches.values_of("exclude") {
238+
user_ignored.map(|s| s as &str).collect()
239+
} else {
240+
Vec::new()
241+
};
242+
229243
if matches.is_present("languages") {
230244
let iterator = Language::iter().filter(|x| *x != Language::Unknown);
231245

@@ -288,6 +302,7 @@ fn main() -> Result<()> {
288302
} else {
289303
None
290304
};
305+
291306
let image_backend = if custom_image.is_some() {
292307
if let Some(backend_name) = matches.value_of("image-backend") {
293308
#[cfg(target_os = "linux")]
@@ -330,6 +345,7 @@ fn main() -> Result<()> {
330345
no_merges,
331346
color_blocks_flag,
332347
author_number,
348+
ignored_directories,
333349
)?;
334350

335351
print!("{}", info);

0 commit comments

Comments
 (0)