| Age | Commit message (Collapse) | Author | Files | Lines |
|
reconcile_bundle_deps flagged a dep as changed on raw URL-string
inequality. Manifests serve bare-tag archive URLs
(.../archive/v0.26.7.tar.gz) while hints use the SBo-fetched tree shape
(.../archive/v0.26.7/tree-sitter-0.26.7.tar.gz) — same version, different
path — so every dep was reported changed at a version that had not moved.
Add _url_version to parse and normalize the version from a URL basename,
and detect change by version rather than URL string. Only rewrite a line
when the version actually differs. Change report now shows
"name old-ver -> new-ver". Regression test T-BM17 pins the same-version,
different-shape case as no change (180 passed).
Bump MKHINT_VERSION and man title to 1.2.1, rebuild mkhint.1.gz.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Review findings before v1.2.0 deploy:
- apply mode now writes a .bak before mutating (parity with every other
mutator; the --force recovery path had no rollback)
- the changed-deps report shows old->new basenames so bumps are visible,
not the version-stripped 'dep -> dep'
- apply mode no longer re-prints the report (report/apply split)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Parity with --check: the update path runs Phase 2 (report + apply) after
the primary bump.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
The bundled-dep FYI iterated all manifest URLs but only extra (index>=1)
hint URLs were tracked as matched, so the manifest's primary entry was
always reported as 'not in hint'. Seed the primary's manifest match
(without reconciling index 0) so the FYI is accurate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Runs after the primary bump; auto when the primary changed this run,
otherwise only with --force. Report then per-package apply confirm.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Report-only at creation time; the .info version is kept, upstream
disagreement is flagged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Match each extra DOWNLOAD line to the manifest, rewrite changed lines and
recompute their md5 in apply mode, report only in report mode, and print
the manifest-only-deps FYI. Primary line untouched.
Also guard the main "$@" call at the bottom of mkhint behind a
BASH_SOURCE check so tests can source the whole script (needed to reach
parse_multiline_var/build_multiline_value/download_file alongside the
new function) without triggering the no-args CLI path, which previously
called exit 1.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Parse the pkg->url-template config and substitute {VERSION}.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Repo-path match first, exact basename-stem fallback for blob hosts. Blob
host repo (owner/deps) is excluded from repo-path matching so it resolves
by stem.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Opt-in per-package manifest for bundled-dep reconciliation. No behavior
yet; wires the config default and the test-harness path patch.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
--hintfile -V and --new -V only substituted the packaged underscore form
of the old version, so download URLs using the upstream dash form (dates
like 2026-07-07, tags) kept pointing at the old tarball and their md5
went stale. Now both the underscore and dash variants of old->new are
rewritten. exploitdb was the trigger case.
Tests T74 (--hintfile) and T75 (--new) cover the dashed-URL bump.
Release v1.1.3.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Trim show_help to a usage synopsis, the options list, the runtime
paths, and a 'man mkhint' pointer. The usage examples, variable-order
note, and exit-code table now live in the man page. Add T73 asserting
--help exits 0 and points at the man page.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
BREAKING CHANGE: the hint-version flag is now -V/--set-version. -v/--version
now prints the tool's own version and exits.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Equal versions keep the yellow row (and MATCHED_PKGS for -R). When
versions differ, sort -V picks the newer side and only that cell is
green. New DelReq column (before Created) shows a check when the hint
has a populated DELREQUIRES. Tests T60-T64 added.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
With package names, --list skips the table and shows each named
hint diffed against its .info (git diff --no-index, else diff -y),
missing hint exits 2. Diff display extracted to _show_hint_diff,
shared with --review. Bash completion completes hint names after
-l. Adds T58, T59.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
--list now skips hint files with no VERSION (e.g. pure DELREQUIRES
hints) and excludes them from the total. Version columns widened
10->22 to fit long version strings without shifting other rows.
Adds T57.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
SBo SlackBuilds target stable; some build deps (rust-opt, google-go-lang)
are unneeded on -current. Auto-add DELREQUIRES for these instead of writing
a hintfile per dependent by hand.
- Read the phantom-dep list from ~/.config/mkhint/phantom-deps (one per
line, # comments; missing file = no-op).
- --fix-current / -F: sweep the repo, ensure every package whose REQUIRES
contains a phantom dep carries the matching DELREQUIRES. Create a minimal
hint if absent, back up and merge into an existing hint otherwise.
Idempotent, no prompts, mutually exclusive with -v/-f/-n.
- --new: auto-append DELREQUIRES for phantom deps found in the .info.
- Tests T50-T56; docs and bash-completion updated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
SlackBuild versions cannot contain '-' (it breaks PRGNAM parsing), so an
upstream date like 2026-06-02 is packaged as 2026_06_02. mkhint was
comparing them byte-for-byte and offering a spurious upgrade/downgrade.
Add _normalize_version ('-' -> '_') and apply it to the upstream version
in --check and --hintfile (no -v) before comparing and before storing, so
equivalent versions compare equal and accepted updates are written in the
underscore form. nvtake still uses nvchecker's raw keyfile value.
Tests T48/T49 cover equivalence and normalized storage (105 passing).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
When --check is given exactly one package, and when --hintfile suggests a
version without -v, run `nvchecker -e <pkg>` so only that entry is scanned
instead of the whole nvchecker.toml. Two+ packages or no args still do one
full scan, since nvchecker -e accepts only a single entry.
Add T42/T43 (mock nvchecker now logs its args), and update CLAUDE.md and
README.md (including the previously undocumented -R/--review and -l highlight).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
nvchecker resolves a relative oldver/newver/keyfile path against the config
file's directory, not the CWD. _nvchecker_newver_path returned the raw
relative string (e.g. "new_ver.json"), so nvchecker_latest's [[ -f ]] check
ran against whatever CWD 'mkhint -C' was launched from — almost never the
config dir. Result: every package reported 'no nvchecker result' and the run
said 'all up to date' despite nvchecker having found updates.
Resolve non-absolute keyfile paths against dirname(NVCHECKER_CONFIG). T35
covers a relative newver path with the keyfile beside the config.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Section names with '.', '-', etc. must be TOML-quoted (e.g. ["yt-dlp"]),
otherwise nvchecker fails to parse them. add_nvchecker_section wrote bare
[pkg] headers, so such names had to be hand-quoted. Worse, _has_nvchecker_section
only matched the bare form, so already-present quoted sections were reported as
missing and re-flagged for populate on every 'mkhint -C' run.
Add _nvchecker_label helper as the single source of truth for the written
label (bare iff name matches ^[A-Za-z0-9_]+$, else double-quoted), used by
both the write side (3 section headers + messages) and the read side
(_has_nvchecker_section grep, with regex metachars escaped so '.' is literal).
Tests T32-T34 cover quoted-header write, no-duplicate on re---new, and
--check recognizing an existing quoted section.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
- Patch NVCHECKER_CONFIG in run_mkhint() sed block
- Add nvchecker.toml + new_ver.json/old_ver.json fixtures in setup()
- Add github (ghpkg) and pypi (pypkg) .info fixtures
- Add mock_nvchecker_tools() with no-op nvchecker and logging nvtake
- Call mock_nvchecker_tools after mock_wget
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
- Add parse_multiline_var, prompt_continuation_urls, build_multiline_value,
_process_download_var; refactor update_checksums to handle multi-URL vars
- First URL always re-downloaded; continuation URLs prompt user, skip
re-download if unchanged
- Add tests/mkhint_test.sh: 44 cases covering all commands and edge cases
- Update README and CLAUDE.md: correct -N semantics, --new behavior,
multiline DOWNLOAD flow, test suite docs
|