Fixed an issue where archive-copy would fail on an incr/diff backup when hardlink=n. In this case the pg_xlog path does not already exist and must be created.

Fixed an issue in async archiving where archive-push was not properly returning 0 when archive-max-mb was reached and moved the async check after transfer to avoid having to remove the stop file twice. Also added unit tests for this case and improved error messages to make it clearer to the user what went wrong.

Fixed a locking issue that could allow multiple operations of the same type against a single stanza. This appeared to be benign in terms of data integrity but caused spurious errors while archiving and could lead to errors in backup/restore.

Allow duplicate WAL segments to be archived when the checksum matches. This is necessary for some recovery scenarios.

Allow comments/disabling in pg_backrest.conf using the # character. Only # characters in the first character of the line are honored.

Better logging before pg_start_backup() to make it clear when the backup is waiting on a checkpoint.

Various command behavior and logging fixes.

Replaced JSON module with JSON::PP which ships with core Perl.

Various help fixes.