summaryrefslogtreecommitdiff
path: root/cli/util/gitignore.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/util/gitignore.rs')
-rw-r--r--cli/util/gitignore.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/cli/util/gitignore.rs b/cli/util/gitignore.rs
index da9065494..f4185aa0d 100644
--- a/cli/util/gitignore.rs
+++ b/cli/util/gitignore.rs
@@ -38,13 +38,19 @@ impl DirGitIgnores {
pub struct GitIgnoreTree {
fs: Arc<dyn deno_runtime::deno_fs::FileSystem>,
ignores: HashMap<PathBuf, Option<Rc<DirGitIgnores>>>,
+ include_paths: Vec<PathBuf>,
}
impl GitIgnoreTree {
- pub fn new(fs: Arc<dyn deno_runtime::deno_fs::FileSystem>) -> Self {
+ pub fn new(
+ fs: Arc<dyn deno_runtime::deno_fs::FileSystem>,
+ // paths that should override what's in the gitignore
+ include_paths: Vec<PathBuf>,
+ ) -> Self {
Self {
fs,
ignores: Default::default(),
+ include_paths,
}
}
@@ -94,6 +100,16 @@ impl GitIgnoreTree {
for line in text.lines() {
builder.add_line(None, line).ok()?;
}
+ // override the gitignore contents to include these paths
+ for path in &self.include_paths {
+ if let Ok(suffix) = path.strip_prefix(dir_path) {
+ let suffix = suffix.to_string_lossy().replace('\\', "/");
+ let _ignore = builder.add_line(None, &format!("!/{}", suffix));
+ if !suffix.ends_with('/') {
+ let _ignore = builder.add_line(None, &format!("!/{}/", suffix));
+ }
+ }
+ }
let gitignore = builder.build().ok()?;
Some(Rc::new(gitignore))
});
@@ -122,7 +138,7 @@ mod test {
"!file.txt\nignore.txt".into(),
),
]);
- let mut ignore_tree = GitIgnoreTree::new(Arc::new(fs));
+ let mut ignore_tree = GitIgnoreTree::new(Arc::new(fs), Vec::new());
let mut run_test = |path: &str, expected: bool| {
let path = PathBuf::from(path);
let gitignore = ignore_tree