use std::path::Path;
use ignore::gitignore::{Gitignore, GitignoreBuilder};
use log::info;
use walkdir::DirEntry;
use crate::config::Config;
use crate::errors::Result;
pub fn parse_ignore(source: &Path, config: &Config) -> Result<Option<Gitignore>> {
let gitignore = if config.gitignore {
let gifile = source.join(".gitignore");
info!("Using .gitignore file {gifile:?}");
let mut builder = GitignoreBuilder::new(source);
builder.add(&gifile);
let ignore = builder.build()?;
Some(ignore)
} else {
None
};
Ok(gitignore)
}
pub fn ignore_filter(entry: &DirEntry, ignore: &Option<Gitignore>) -> bool {
match ignore {
None => true,
Some(gi) => {
let path = entry.path();
let m = gi.matched(path, path.is_dir());
!m.is_ignore()
}
}
}