mirror-sync:
- Add a repo-sync sync method for rpm/deb/arch/apk repositories, with
installer, prune setting, an optional type filter, and trace fields passed
through to it.
- Count what each sync changed and publish SYNC_FILES_* / SYNC_CHANGED to
the post successful sync hook, so a hook can stay idle on a no-op run.
- Make trace saving configurable with save_trace (global and per module)
and publish traces from every method, not just rsync. Exclude the local
trace from deletes, and stop hierarchy entries stacking up per run.
- Add parse_bool so boolean settings reject values that would otherwise be
read as their opposite; keep an explicit bare=false from being
auto-detected away, and require hide_remote on the clone path too.
- MIRROR_SYNC_CONF names an alternate configuration file.
- Fix docroot joining when repo has a trailing slash, unparsable
last-modified headers skipping every sync, s3cmd --host taking a full
URL, and the average rate line for methods with no byte count.
- Exit non-zero when help is printed because of a mistake.
mirror-file-generator:
- Match du summary paths exactly instead of by substring, so sibling repos
sharing a prefix no longer return several sizes.
- Fall back to the default icon when no image is found, and stop the
fallback recursing into itself.
- Validate sections against SECTIONS, count repos written to decide whether
to publish the index, and create the log directory if missing.
- MIRROR_SYNC_CONF support, and exit non-zero on an unknown mirror.
Docs: rewrite README around quick start and sync methods, and move the
file generator reference to docs/mirror-file-generator.md.
Runs a configurable hook at the very end of every sync method, after all
cleanup has finished and the sync is confirmed successful. Unlike the
rsync/qfm post_hook, it is available for all sync methods and runs after
trace files, log cleanup, and mirror reporting.
Bare mirrors served over dumb HTTP need info/refs and objects/info/packs
kept current, so run git update-server-info after every successful bare
sync and clone. The post-update hook cannot be used since it only fires
on push, not on the fetch a mirror performs.
Add a hide_remote option (requires bare + source) that keeps the upstream
URL out of the served files: it removes the stored remote from config,
deletes FETCH_HEAD after each fetch, and fetches directly from source with
a +refs/*:refs/* mirror refspec on every run.
Introduces logo_dark and repo_icon_dark config options that serve alternate
images to dark-OS browsers via HTML <picture> elements, and adds a CSS
prefers-color-scheme dark block to the default header template.
- mirror-sync.sh: fix upstream_check/time_file_check to handle missing
timestamp file and empty Last-Modified header; fix rebuild_dusum_totals
variable shadowing; propagate return codes from install helpers; refactor
git_sync out of subshell; scope LOGFILE_STAGE2 to stage-2 block; clean up
mirror_update_file and QFM in-progress files on failure; fix total_time
initialization and wget_sync exit propagation
- mirror-file-generator.sh: add icons_local_repo/icons_repo_url/icons_repo_refresh
for offline icon serving; move PIDFILE to /tmp; enhance image_copy to
refresh stale cached files; fix temp index file cleanup on empty output;
safer ${var:?} → [[ -n $var ]] guards throughout
- README.md: fix typos, heading levels, variable names, and document new
icon repo config options
- Bump VERSION to 20260602 in both scripts