commit ebf6ddff30e2c54a8cc2de1c757c11b4a2d52868
parent a1c3c453f23c020b1926924c6526182fcc4c5728
Author: marisa <mokou@posteo.de>
Date: Sat, 9 Nov 2019 23:46:19 +0100
Implement ignoring
Diffstat:
5 files changed, 109 insertions(+), 4 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -1,11 +1,44 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
+name = "aho-corasick"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "fnv"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "globset"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "im"
version = "13.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -16,6 +49,11 @@ dependencies = [
]
[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "linked-hash-map"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -29,11 +67,32 @@ dependencies = [
]
[[package]]
+name = "memchr"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "pathdiff"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "regex"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "rustc_version"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -66,6 +125,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
name = "shtola"
version = "0.1.0"
dependencies = [
+ "globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"im 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"pathdiff 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -83,6 +143,14 @@ dependencies = [
]
[[package]]
+name = "thread_local"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "typenum"
version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -142,16 +210,25 @@ dependencies = [
]
[metadata]
+"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
+"checksum bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245"
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
+"checksum globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "925aa2cac82d8834e2b2a4415b6f6879757fb5c0928fc445ae76461a12eed8f2"
"checksum im 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8db49f8bc08d5cc4e2bb0f7d25a6d1db2c79bc6f7d7c86c96c657eb3d214125f"
+"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
+"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
"checksum pathdiff 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a3bf70094d203e07844da868b634207e71bfab254fe713171fae9a6e751ccf31"
+"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
+"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
"checksum sized-chunks 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f01db57d7ee89c8e053245deb77040a6cc8508311f381c88749c33d4b9b78785"
+"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
"checksum ware 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "55b9c9f12bd457015eddc65fb44597e72b2091fc7e3ca250bb2a229969a9d589"
diff --git a/fixtures/ignore/ignored.md b/fixtures/ignore/ignored.md
@@ -0,0 +1 @@
+test
diff --git a/fixtures/ignore/not_ignored.md b/fixtures/ignore/not_ignored.md
@@ -0,0 +1 @@
+hello
diff --git a/shtola/Cargo.toml b/shtola/Cargo.toml
@@ -17,3 +17,4 @@ ware = "0.1.0"
im = "13.0.0"
yaml-rust = "0.4.3"
pathdiff = "0.1.0"
+globset = "0.4.4"
diff --git a/shtola/src/lib.rs b/shtola/src/lib.rs
@@ -4,6 +4,7 @@ use std::fs;
use std::io::{Read, Write};
use std::path::PathBuf;
use walkdir::WalkDir;
+use globset::{GlobSetBuilder, Glob};
pub use im::HashMap;
pub use ware::Ware;
@@ -29,7 +30,7 @@ impl Shtola {
}
}
- pub fn ignores(&mut self, vec: &mut Vec<PathBuf>) {
+ pub fn ignores(&mut self, vec: &mut Vec<String>) {
self.ir.config.ignores.append(vec);
self.ir.config.ignores.dedup();
}
@@ -60,8 +61,19 @@ impl Shtola {
fs::remove_dir_all(&self.ir.config.destination)?;
fs::create_dir_all(&self.ir.config.destination).expect("Unable to recreate destination directory!");
}
- let files = read_dir(&self.ir.config.source, self.ir.config.frontmatter)?;
- self.ir.files = files;
+
+ let mut builder = GlobSetBuilder::new();
+ for item in &self.ir.config.ignores {
+ builder.add(Glob::new(item).unwrap());
+ }
+ let set = builder.build().unwrap();
+ let unfiltered_files = read_dir(&self.ir.config.source, self.ir.config.frontmatter)?;
+ let files = unfiltered_files.iter().filter(|(p, _)| {
+ let path = p.to_str().unwrap();
+ !set.is_match(path)
+ });
+
+ self.ir.files = files.cloned().collect();
let result_ir = self.ware.run(self.ir.clone());
write_dir(result_ir.clone(), &self.ir.config.destination)?;
Ok(result_ir)
@@ -76,7 +88,7 @@ pub struct IR {
#[derive(Debug, Clone)]
pub struct Config {
- ignores: Vec<PathBuf>,
+ ignores: Vec<String>,
source: PathBuf,
destination: PathBuf,
clean: bool,
@@ -212,3 +224,16 @@ fn no_frontmatter_works() {
dbg!(matter_file);
assert!(matter_file.frontmatter.is_empty());
}
+
+#[test]
+fn ignore_works() {
+ let mut s = Shtola::new();
+ s.source("../fixtures/ignore");
+ s.destination("../fixtures/dest_ignore");
+ s.ignores(&mut vec!["ignored.md".to_string()]);
+ s.clean(true);
+ let r = s.build().unwrap();
+ assert_eq!(r.files.len(), 1);
+ let (path, _) = r.files.iter().last().unwrap();
+ assert_eq!(path.to_str().unwrap(), "not_ignored.md");
+}