Install plugins from a branch #7

Merged
benvin merged 3 commits from benvin/branch-specs into main 2026-09-12 00:45:00 +10:00

3 Commits

Author SHA1 Message Date
unkin-agent 3716131e56 Say the recorded digest is not a file checksum
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/lint Pipeline was successful
sha256() refuses binary input, so the archive is hashed in its base64
form. Comparing it against sha256sum reads as corruption.
2026-09-12 00:23:08 +10:00
unkin-agent 3c73a83602 Reject a NUL byte in every ref that reaches curl
A NUL truncates a string when vim.system marshals argv, so the URL curl
fetches diverges from the ref that was validated, locked and displayed.
The whitespace class does not cover it.

- reject a NUL in tag, branch, the "as" directory name, an explicit url
  and the registry
- cover a NUL in the middle, at the end, and alone for each
2026-09-12 00:23:08 +10:00
unkin-agent 460dc2c5c8 Install plugins from a branch
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/lint Pipeline was successful
Many upstream plugins publish no tags at all, so a tag-only installer cannot
manage them.

- Add a branch spec field, mutually exclusive with tag and validated the same way
- Build archive/refs/heads/<branch> URLs for branch specs
- Refetch a branch only on :ArtiPackUpdate or a forced sync, never from cache
- Record the branch, archive digest and fetch time in the lockfile
- Report a branch plugin as tracked and fetched, never as up to date
2026-09-12 00:08:18 +10:00