Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 14 Sep 10:15
· 162 commits to main since this release
Immutable release. Only release title and notes can be modified.
v0.4.0
d0956d7
  • Use --block-policy-categories=LIST to select separate archive, temp, or output block controls
    per INI file; unlisted categories use ordinary file controls.

  • Fail before actions on invalid configuration globals and undefined selected or composed configs.

  • Reject command-line-only options and non-regular configuration targets; document directive scopes
    in individual help entries and apply INI pager settings to listing output.

  • Fix the user config location at the effective OS account home under .config/xff/config;
    environment variables cannot redirect trusted configuration.

  • Reject missing explicit --xffrc files and unreadable existing configuration, including
    dangling symlinks and requested skips. Missing automatic system/user files remain normal.

  • Evaluate .xffrc admission controls in requested selector order, including composed configs.

  • Make --no-system-config and --no-user-config exclude named sections while retaining existing
    globals by default. --no-config combines those exclusions and disables .xffrc autoloading.

  • Add config-only --require-system-globals / --no-require-system-globals and
    --require-user-globals / --no-require-user-globals pairs. Each pair appears once per permitted
    file, in unsectioned globals; the system decision wins for user globals. Optional globals are
    excluded only when a skip is requested. Missing automatic files remain normal.

  • Add config-selectable --allow-xffrc / --no-allow-xffrc controls for explicitly named config
    files, subject to the system policy gate and unavailable to the file being admitted.

  • Document every config-only allow/deny control individually in --help=config, including its
    scope, permitted location, precedence, and multiplicity.

  • Warn about overriding the same setting more than once within one logical config section while
    preserving last-value-wins behavior. Deliberately accumulating settings, expression primaries,
    separate sections and tiers, and all command-line repetitions remain unaffected.

  • Apply named configuration and explicitly loaded config files at each command-line
    selector's exact position instead of flattening them ahead of all CLI options.

  • Defer regex matcher binding until the final configuration has selected grammar
    and case, avoiding premature or duplicate compilation.

  • Add --re2 and --pcre as direct regex-engine selectors, plus BSD/macOS
    find-compatible -E using the configured extended grammar.

  • Add the always-available --regextype=ERE engine for native POSIX extended
    regular expressions, with platform locale semantics and explicit NUL handling.

  • Add distinct root-spanning traversal orders: --sort=roots sorts only the search operands,
    while --sort=global sorts the operands and walks each tree in deterministic depth-first order.
    Clarify the ordering, directory read-ahead, result buffering, post-order, and score-ranking
    contracts throughout the generated reference and parallel-walk design.

  • Honor the selected path encoding in tree-comparison status records, including non-UTF-8 path
    bytes, instead of emitting raw relative paths independently of the output configuration.

  • Apply every matching system-policy safety-class denial to mixed config lines, so a destructive
    primary cannot be hidden from an @destructive rule by a sensitive primary on the same line.

  • Clarify concurrency and matching controls, including worker defaults and -exec timing,
    filesystem-native versus explicit case folding, block-size units, and regex grammar scope.

Install

Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.

Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.

Install on Linux x86_64:

XFF_VERSION=v0.4.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"

# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"

# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"

Install on macOS:

XFF_VERSION=v0.4.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"

# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"

# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"

Release resources