~repos /rust-embed
git clone https://pyrossh.dev/repos/rust-embed.git
rust macro which loads files into the rust binary at compile time during release and loads the file from the fs during dev.
e3038b71
—
Ahmad Yasser 4 years ago
use globset instead of glob
- readme.md +2 -2
- utils/Cargo.toml +2 -2
- utils/src/lib.rs +9 -5
readme.md
CHANGED
|
@@ -104,7 +104,7 @@ Compress each file when embedding into the binary. Compression is done via [`inc
|
|
|
104
104
|
|
|
105
105
|
### `include-exclude`
|
|
106
106
|
Filter files to be embedded with multiple `#[include = "*.txt"]` and `#[exclude = "*.jpg"]` attributes.
|
|
107
|
-
Matching is done on relative file paths, via [`
|
|
107
|
+
Matching is done on relative file paths, via [`globset`].
|
|
108
108
|
`exclude` attributes have higher priority than `include` attributes.
|
|
109
109
|
Example:
|
|
110
110
|
|
|
@@ -177,4 +177,4 @@ Go Rusketeers!
|
|
|
177
177
|
The power is yours!
|
|
178
178
|
|
|
179
179
|
[`include-flate`]: https://crates.io/crates/include-flate
|
|
180
|
-
[`
|
|
180
|
+
[`globset`]: https://crates.io/crates/globset
|
utils/Cargo.toml
CHANGED
|
@@ -15,10 +15,10 @@ edition = "2018"
|
|
|
15
15
|
walkdir = "2.3.1"
|
|
16
16
|
sha2 = "0.9"
|
|
17
17
|
|
|
18
|
-
[dependencies.
|
|
18
|
+
[dependencies.globset]
|
|
19
19
|
version = "0.3.0"
|
|
20
20
|
optional = true
|
|
21
21
|
|
|
22
22
|
[features]
|
|
23
23
|
debug-embed = []
|
|
24
|
-
include-exclude = ["
|
|
24
|
+
include-exclude = ["globset"]
|
utils/src/lib.rs
CHANGED
|
@@ -19,13 +19,15 @@ pub fn is_path_included(_path: &str, _includes: &[&str], _excludes: &[&str]) ->
|
|
|
19
19
|
|
|
20
20
|
#[cfg(feature = "include-exclude")]
|
|
21
21
|
pub fn is_path_included(rel_path: &str, includes: &[&str], excludes: &[&str]) -> bool {
|
|
22
|
-
use
|
|
22
|
+
use globset::Glob;
|
|
23
23
|
|
|
24
24
|
// ignore path matched by exclusion pattern
|
|
25
25
|
for exclude in excludes {
|
|
26
|
+
let pattern = Glob::new(exclude)
|
|
26
|
-
|
|
27
|
+
.unwrap_or_else(|_| panic!("invalid exclude pattern '{}'", exclude))
|
|
28
|
+
.compile_matcher();
|
|
27
29
|
|
|
28
|
-
if pattern.
|
|
30
|
+
if pattern.is_match(rel_path) {
|
|
29
31
|
return false;
|
|
30
32
|
}
|
|
31
33
|
}
|
|
@@ -37,9 +39,11 @@ pub fn is_path_included(rel_path: &str, includes: &[&str], excludes: &[&str]) ->
|
|
|
37
39
|
|
|
38
40
|
// accept path if matched by inclusion pattern
|
|
39
41
|
for include in includes {
|
|
42
|
+
let pattern = Glob::new(include)
|
|
40
|
-
|
|
43
|
+
.unwrap_or_else(|_| panic!("invalid include pattern '{}'", include))
|
|
44
|
+
.compile_matcher();
|
|
41
45
|
|
|
42
|
-
if pattern.
|
|
46
|
+
if pattern.is_match(rel_path) {
|
|
43
47
|
return true;
|
|
44
48
|
}
|
|
45
49
|
}
|