All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project uses Semantic Versioning.
The first numbered version. It does not try to describe everything preen does; the README does that. It records the work that landed before versioning began: mostly names and paths that preen listed wrong or could not open, and the CI that now runs on the platform preen is most used on.
preen --version says which preen this is (-V, or preen version). It
reads the VERSION file at the root of the checkout preen was run from, which
it finds by resolving the symlink install.sh puts on your PATH. A checkout
whose VERSION cannot be read answers preen unknown and still exits 0: the
version is what you ask for when something is wrong, so it is the one question
that must not fail.sort, find and awk, and the file lists are built
from exactly the constructs where those disagree with bash 5 and GNU. The
macOS job is pinned to the system bash, so a newer one on the runner cannot
quietly take the 3.2 coverage away. Tried against 16 constructs that break on
3.2 or BSD, the macOS job failed on all 16 and the Linux job on none.site/sync-assets.sh instead of only parsing it (#27, PR #29). A
--dry-run resolves every source and destination without encoding anything,
and the workflow compares the destinations with the five images the site
actually reads. A renamed tape or a mistyped output name now fails CI; before,
it shipped green and left the old image in place. A third runner OS added to
the matrix now stops with a message naming it, not deep inside the suite.permissions: contents: read
instead of inheriting the repository default, which took away a
packages: read nothing used.core.quotePath says, so the
name was listed in a spelling nothing could open, and the preview was blank.
A newline was worse: it also split one file into two entries, so a
worktree's count was too high. Every list is now read on NUL, the one byte a
filename cannot hold, and fzf is told to read it that way.pr mode previews an accented or odd name (PR #19). git quotes the whole
path in a diff --git header when the name holds a quote, a backslash, a
control character or any byte above ASCII, so every accented name arrived
quoted and the preview matched nothing. preen decodes the header now.git worktree prune was blamed on git
being older than 2.36, on any git, and preen exited 1 if it was the only one.
Now the advice is to prune if it is gone for good, and git's version is named
only when git really is too old. On that older git, a newline in a worktree's
name used to list a plausible worktree that did not exist; that entry is
dropped now, and the picker's header says one went.preen md on a directory whose name starts with a dash finds its files
(#22, PR #31). find read the name as options.pr mode no longer previews two files stitched together (#22, PR #31). A
PR holding x.md and a file named b/x.md matched both when previewing
x.md. The header is now split exactly instead of matched on its tail.preen FILE.md and
piped input page through less, which was never asked for the mouse, so
under tmux the wheel did nothing while every picker mode scrolled. less is
given --mouse when it supports it. The cost: a plain drag now selects inside
less, so copying a line wants tmux copy mode or a modifier key, and the docs
now say so (PR #39).tput
for the width in a way that often answered 80 whatever the pane was, so in a
66-column pane a piped render was 80 wide and less wrapped every line again,
mid-word. preen now asks the terminal itself. COLUMNS still wins, and 80 is
still the answer when there is no terminal at all./nitro.json
was public with a week-long cache, for a file that changes on every deploy and
that nothing reads. It is left out of the image now.width and height, is the way out.pr mode cannot list a filename that contains a newline. gh pr diff --name-only separates its output with newlines and has no NUL form, so such a
name cannot be told apart from two. Every other odd name lists and opens in
pr mode.