Changes
Revision history, newest first. The authoritative list is the
Changes file in the distribution.
0.002.0 — 4 November 2026
Enhancements
- Created this website.
filesync sync --quietprints nothing for a repo where nothing happened, instead of an all-zero summary and transfer line, so a cron job that finds nothing to do stays silent.
Bug fixes
- The system-locale tests in
t/locales.tfailed on Windows: they passed a multi-line child program toperl -e, which Windows cut at the first newline, and importedLC_MESSAGES, which Windows' POSIX lacks. The child is now a script file and falls back toLC_CTYPE.
0.001.5 — 25 October 2026
Bug fixes
Log::Abstraction0.36 is now required, because the client logs its run summary as structured fields in a trailing hashref. An older copy, which the installer accepted, turned that intosync finishedHASH(0x...)in the log file and an empty entry in an array logger, so the counts were lost and the settings test failed its seven logger assertions.
0.001.4 — 25 October 2026
Bug fixes
t/ssh.t: the stand-in for ssh now names the perl running the tests on its first line instead of#!/usr/bin/env perl. The transport starts that file as a program, so the kernel picked whichever perl came first onPATH— on a smoke tester the system perl, which cannot see the modules the build installed — and thefilesync-serverit then ran died withCan't locate Params/Validate/Strict.pmagainst a build that never lacked it. The Windows wrapper already named$^X.
Tests
t/ssh.tchecks the interpreter line of the stand-in it writes, so thePATH-dependent first line cannot come back unnoticed.
0.001.3 — 25 October 2026
Documentation
- More improvements.
Bug fixes
- Bump the minimum
Config::Abstraction.
0.001.2 — 24 October 2026
Bug fixes
filesync-admin repo createnames the server root and the directory that blocks it when the root cannot be written, and says to chown it to the running account or use--rootelsewhere. It used to report onlyPermission deniedagainst a path below the root.- That advice is given only when a directory really is unwritable, so a full disk or a root that is a file keeps its own error.
Documentation
- The examples are split by machine — what to run on the server, on each client, and from cron — and keep the master in a home directory, so nothing needs sudo.
- What a
/srv/filesyncroot needs instead, the wrapper that adds--roottofilesync-server, and the ssh key the first sync requires. - The backup and restore commands follow the example's master layout, and make the backup directory before cron mirrors into it.
- The synopsis creates the repo first, so it runs as printed.
0.001.1 — 24 October 2026
Bug fixes
- Build: test on Windows with Perl 5.42 again. Its
B::Hooks::EndOfScopefaults at exit, so the plain-Perl hook is used there. filesync,filesync-serverandfilesync-adminselect 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.tmpintokeep.tmpand could delete the file remotely);/topanchors 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_readworks 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 unlessFILESYNC_TRACEis set. - Internals: new
Args,Base,Constants,I18N,IOandPlatformmodules; 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/andxt/are not indexed; bug tracker link added. $VERSIONis 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.
0.001.0 — 23 October 2026
- First draft.