From: Lady <redacted>
Date: Tue, 16 Jan 2024 02:41:30 +0000 (-0500)
Subject: Update allowed characters; make find more selective
X-Git-Tag: 0.3.0~3
X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/e0c0562b79020c115373957d9c2d92a575758dda?ds=sidebyside

Update allowed characters; make find more selective

With percent‐encoding, it seems like the only problematic characters
are :—

- Whitespace (incompatible with make)
- Colons (incompatible with make)
- Pipes (incompatible with make as they introduce order‐only
  prerequisites)
- Bucks (incomaptible with make secondary expansion)
- Percents (incompatible with secondary expansion inside static pattern
  rules, and possibly other things)
- Leading hyphen‐minuses (confusable with a command‐line argument)

This commit updates the `find` rules to not select these files, in
addition to the existing behaviour of not selecting hidden files or
those which start with a period.

`FINDOPTS` is removed as the default is virtually always the correct
behaviour; users can override `FIND` if supplying options is absolutely
necessary.
---

diff --git a/GNUmakefile b/GNUmakefile
index 0b644c2..bcba827 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -149,9 +149,7 @@ MAGICDIR := $(patsubst ./%,%,$(THISDIR)/magic)
 # By default, `find´ will not follow symlinks and will use extended
 # regular expressions, ignoring hidden files and those which begin with
 # a period.
-FINDOPTS := -PE
-FINDRULES := -flags -nohidden -and -not -name '.*'
-FINDINCLUDEOPTS := $(FINDOPTS)
+FINDRULES := -flags -nohidden -and ! '(' '(' -name '[.-]*' -or -name '*[:|$$%]*' ')' -and -prune ')'
 FINDINCLUDERULES := $(FINDRULES)
 
 # The list of parsers for plaintext file types.
diff --git a/README.markdown b/README.markdown
index dec092a..7e9b74b 100644
--- a/README.markdown
+++ b/README.markdown
@@ -157,17 +157,10 @@ The following additional variables can be used to control the behaviour
 - **`MAGICDIR`:**
   The location of the magic files to use (default: `$(THISDIR)/magic`).
 
-- **`FINDOPTS`:**
-  Options to pass to `find` when searching for source files (default:
-    `-PE`).
-
 - **`FINDRULES`:**
-  Rules to use with `find` when searching for source files (default:
-    `-flags -nohidden -and -not -name '.*'`).
-
-- **`FINDINCLUDEOPTS`:**
-  Options to pass to `find` when searching for includes (default:
-    `$(FINDOPTS)`).
+  Rules to use with `find` when searching for source files.
+  The default ignores hidden files, those that start with a period or
+    hyphen‐minus, and those which contain a pipe, buck, or colon.
 
 - **`FINDINCLUDERULES`:**
   Rules to use with `find` when searching for includes (default:
@@ -213,11 +206,12 @@ Text formats with associated X·S·L·T parsers are wrapped in a H·T·M·L
 Source files whose media type does not have an associated X·S·L·T
   parser are considered “assets” and will not be transformed.
 
-For compatibility with this program, source filenames should not
-  contain Ascii whitespace or any of the following Ascii characters:
-  ``!"#$%&()-:<>?\^`{|}``.
-These characters are either invalid in u·r·i’s or conflict with aspects
-  of the Make or commandline syntax.
+**☡ For compatibility with this program, source filenames must not
+  contain Ascii whitespace, colons (`:`), pipes (`|`), bucks (`$`),
+  percents (`%`) or control characters, and must not begin with a
+  hyphen‐minus (`-`).**
+The former characters have the potential to conflict with make syntax,
+  and a leading hyphen‐minus is confusable for a command‐line argument.
 
 ## Parsers