Only ignore .git if we're in a git project, and so on

This commit is contained in:
Félix Saparelli 2022-01-16 16:12:50 +13:00
parent 2682dde41d
commit 9327f8c293
No known key found for this signature in database
GPG Key ID: B948C4BAE44FC474
2 changed files with 54 additions and 9 deletions

View File

@ -13,11 +13,13 @@ use watchexec::{
Event, Tag, Event, Tag,
}, },
filter::{globset::GlobsetFilterer, Filterer}, filter::{globset::GlobsetFilterer, Filterer},
project::ProjectType,
}; };
pub async fn globset(args: &ArgMatches<'static>) -> Result<Arc<WatchexecFilterer>> { pub async fn globset(args: &ArgMatches<'static>) -> Result<Arc<WatchexecFilterer>> {
let (project_origin, workdir) = super::common::dirs(args).await?; let (project_origin, workdir) = super::common::dirs(args).await?;
let ignore_files = super::common::ignores(args, &project_origin).await?; let vcs_types = super::common::vcs_types(&project_origin).await;
let ignore_files = super::common::ignores(args, &vcs_types, &project_origin).await?;
let mut ignores = Vec::new(); let mut ignores = Vec::new();
@ -30,10 +32,33 @@ pub async fn globset(args: &ArgMatches<'static>) -> Result<Arc<WatchexecFilterer
(String::from(".*.kate-swp"), None), (String::from(".*.kate-swp"), None),
(String::from(".*.sw?"), None), (String::from(".*.sw?"), None),
(String::from(".*.sw?x"), None), (String::from(".*.sw?x"), None),
(format!("**{s}.git{s}**", s = MAIN_SEPARATOR), None),
(format!("**{s}.hg{s}**", s = MAIN_SEPARATOR), None),
(format!("**{s}.svn{s}**", s = MAIN_SEPARATOR), None),
]); ]);
if vcs_types.contains(&ProjectType::Git) {
ignores.push((format!("**{s}.git{s}**", s = MAIN_SEPARATOR), None));
}
if vcs_types.contains(&ProjectType::Mercurial) {
ignores.push((format!("**{s}.hg{s}**", s = MAIN_SEPARATOR), None));
}
if vcs_types.contains(&ProjectType::Bazaar) {
ignores.push((format!("**{s}.bzr{s}**", s = MAIN_SEPARATOR), None));
}
if vcs_types.contains(&ProjectType::Darcs) {
ignores.push((format!("**{s}_darcs{s}**", s = MAIN_SEPARATOR), None));
}
if vcs_types.contains(&ProjectType::Fossil) {
ignores.push((
format!("**{s}.fossil-settings{s}**", s = MAIN_SEPARATOR),
None,
));
}
if vcs_types.contains(&ProjectType::Pijul) {
ignores.push((format!("**{s}.pijul{s}**", s = MAIN_SEPARATOR), None));
}
} }
let filters = args let filters = args

View File

@ -63,11 +63,6 @@ pub async fn tagged(args: &ArgMatches<'static>) -> Result<Arc<TaggedFilterer>> {
if !args.is_present("no-default-ignore") { if !args.is_present("no-default-ignore") {
filters.extend([ filters.extend([
Filter::from_glob_ignore(None, ".DS_Store/"), Filter::from_glob_ignore(None, ".DS_Store/"),
Filter::from_glob_ignore(None, ".git/"),
Filter::from_glob_ignore(None, ".hg/"),
Filter::from_glob_ignore(None, ".svn/"),
Filter::from_glob_ignore(None, "_darcs/"),
Filter::from_glob_ignore(None, ".fossil-settings/"),
Filter::from_glob_ignore(None, "*.py[co]"), Filter::from_glob_ignore(None, "*.py[co]"),
Filter::from_glob_ignore(None, "#*#"), Filter::from_glob_ignore(None, "#*#"),
Filter::from_glob_ignore(None, ".#*"), Filter::from_glob_ignore(None, ".#*"),
@ -75,6 +70,31 @@ pub async fn tagged(args: &ArgMatches<'static>) -> Result<Arc<TaggedFilterer>> {
Filter::from_glob_ignore(None, ".*.sw?"), Filter::from_glob_ignore(None, ".*.sw?"),
Filter::from_glob_ignore(None, ".*.sw?x"), Filter::from_glob_ignore(None, ".*.sw?x"),
]); ]);
if vcs_types.contains(&ProjectType::Git) {
filters.push(Filter::from_glob_ignore(None, "/.git"));
}
if vcs_types.contains(&ProjectType::Mercurial) {
filters.push(Filter::from_glob_ignore(None, "/.hg"));
}
if vcs_types.contains(&ProjectType::Bazaar) {
filters.push(Filter::from_glob_ignore(None, "/.bzr"));
}
if vcs_types.contains(&ProjectType::Darcs) {
filters.push(Filter::from_glob_ignore(None, "/_darcs"));
}
if vcs_types.contains(&ProjectType::Fossil) {
filters.push(Filter::from_glob_ignore(None, "/.fossil-settings"));
}
if vcs_types.contains(&ProjectType::Pijul) {
filters.push(Filter::from_glob_ignore(None, "/.pijul"));
}
} }
if args.is_present("no-meta") { if args.is_present("no-meta") {