Changes for version 0.001.1 - 2026-10-24

  • Bug Fixes
    • Build: test on Windows with Perl 5.42 again. Its B::Hooks::EndOfScope faults at exit, so the plain-Perl hook is used there.
    • filesync, filesync-server and filesync-admin select that hook for themselves on 5.42 for Windows, so it no longer has to be set to run them; an implementation already in the environment is left alone. A test checks the choice in a child process that starts without the variable.
    • Security: an ssh server of the form "-v@host" (or a program name starting with "-") is refused; it was passed to ssh as an option.
    • Security: client and repo names that are not plain ids ("../x", over 64 characters) are refused by the server, admin and client.
    • Server: a conflict copy is kept under the planned name whether or not the client names it, and any other name is refused; acks are accepted only for actions the client applies; get validates its offset and caps its size; an upload larger than announced is refused and discarded.
    • Ignore: building a matcher no longer modifies the caller's pattern list (which turned "!keep.tmp" into "keep.tmp" and could delete the file remotely); "/top" anchors to the root; "build/" matches at any depth.
    • Trash: same-day versions sort numerically and are no longer capped at .99. Each client repo has its own local trash; restore still finds files in the old shared one.
    • Admin: journal_read works when the server root contains spaces.
    • All messages come from a catalogue (App::FileSync::I18N::en) and can be translated; errors no longer show Perl file and line numbers unless FILESYNC_TRACE is set.
    • Internals: new Args, Base, Constants, I18N, IO and Platform modules; private subs are enforced with Sub::Private; full POD.
    • Removed the unused POSIX and Encode prerequisites.
    • Build: requires Perl 5.14; declares ExtUtils::MakeMaker 6.64 as a configure prerequisite so test prerequisites are honoured; the gzip and (on macOS) gtar dist settings are now actually applied; t/ and xt/ are not indexed; bug tracker link added.
    • $VERSION is a version object (version->declare), so every tool reads 0.001.1 as the dotted version v0.1.1.
    • Every module and program carries the same GPL v2 licence notice.

Documentation

keep a directory in step with a master copy
administer a filesync server root
serve one sync session (the forced command in authorized_keys)

Modules

cron-driven file synchronisation without a daemon
server-side repo, client and recovery administration
validated arguments for App::FileSync's public routines
shared i18n behaviour for App::FileSync objects
the filesync, filesync-admin and filesync-server commands
sync one repo, and the client-side repo commands
client and repo configuration files
shared constants for App::FileSync
rsync-style block deltas in pure Perl
message catalogue and error raising for App::FileSync
the English message catalogue
filesystem primitives for App::FileSync
.gitignore-style path exclusion
advisory lock files
three-way merge of base, client and master manifests
choose platform workarounds before other modules load
the line-delimited JSON wire protocol
describe a directory tree as a manifest
serve one sync session against a repo's master
process-wide settings and logging for App::FileSync
daily snapshots of a replica
the server-side files of one repo
run the server as a local child process
run the server over ssh
dated trash with retention
check a tree against its recorded manifest