Changelog
=========

This document describes changes between releases of ``pimsync``. Until v1.0.0, the
public API is still subject to change. This includes commands, arguments and
configuration directives. Upon the release of v1.0.0, backwards incompatible
changes will be avoided unless absolutely necessary.

See the dedicated page for details on :ref:`monitoring for new releases
<new-releases>`.

v0.5.11
-------

- When monitoring, debounce events which arrive in quick succession.
- Initial kqueue monitor implementation. Changes to a ``vdir`` will now also
  trigger an immediate sync on BSD.
- Perform incremental sync based on changes when monitoring. E.g.: if only a
  single property changed, don't immediately re-scan all collections on both
  sides.
- Prohibit relative paths in the configuration file. This could easily lead to
  data loss in unexpected ways.
- When using the ``discover`` command, ensure that no storage is discovered
  more than once. Previously, discovery was performed multiple times for
  storages used across multiple pairs .
- Implement exit code which reflect the result of the execution: configuration
  error, bad usage, manual conflict resolution required, etc. See
  :doc:`pimsync(1) <pimsync.1>` for details.
- Implement a new `discovery` directive to configure service discovery for
  CalDAV and CardDAV storages.

v0.5.10
-------

- Implement digest auth. Use `auth digest` to enable.
- Harden configuration parsing to reject unknown or invalid configuration
  directives.
- Allow using dynamic parameters for status path.
- Allow specifying ``interval 0`` to disabled interval-based synchronisations.

v0.5.9
------

- Fix crash in status migration path.

v0.5.8
------

- Implement proxy support via the `http_proxy` environment variable.
- Allow value for specifying `tls_fingerprint` with colons.
- Don't include superfluous timezones from events split from WebCal remotes.
- Many other small changes, tweaks and performance improvements.
- Implement experimental I/O timeouts, currently defaulting to 30s.
- Fixed usage of Unix domain sockets for most other scenarios.

v0.5.7
------

- Print a human-friendly plan when using  ``sync``.
- Implement interactive sync (``sync -i``), prompting for for confirmation
  before executing a plan.
- Exit non-zero in case of errors when using `pimsync sync`. Also display
  the total amount of errors encountered.
- The experimental JMAP backend is no longer automatically compiled by default
  and needs to be opted into explicitly.
- Builds are now reproducible.
- Log requests (at level TRACE) before sending them.

v0.5.6
------

- Implement support for one-way sync (see ``one_way`` in :doc:`pimsync.conf.5`).
- Implement conflict resolution for properties.
- Implement zsh completion.
- Fix error writing items to strict CalDAV/CardDAV servers.

v0.5.5
------

- Implement authentication support (username, password) for the WebCal storage.
- Various documentation improvements.
- Implement automatic `conflict_resolution` for `keep a` and `keep b`.

v0.5.4
------

- Add ``collection_id_segment`` configuration directive for CalDAV and CardDAV
  storages. This allows using the second-to-last URL segment as the collection
  id instead of the last segment, which is useful for servers with URL structures
  like ``/dav/user@host.tld/collection/``.
- The ``fileext`` parameter for ``vdir`` storages is now optional. If none is
  specified, ``ics`` is used for calendars and ``vcf`` for address books.
- Enable JMAP support by default. This storage remains experimental and the
  usual warnings still apply.
- Fix caching bug in JMAP which could lead to ignoring state transitions.
- Use re-exported libdav and libjmap from vstorage. This simplifies builds,
  especially for development set-ups.

v0.5.3
------

- Remove relative paths for dependencies. This allows building pristine release
  tarballs without having to manually fetch dependant packages.

v0.5.2
------

- Fix release tarballs attempting to build dependencies from relative paths.

v0.5.1
------

- Fix wrong ``Content-Type`` header when updating contacts via CardDAV.

v0.5.0
------

- Various documentation improvements.
- Update to vstorage 0.2.0 and libdav 0.9.5.
- Experimental JMAP support (disabled by default).

v0.4.4
------

- Fix handling of empty responses when finding current user principal. This bug
  mostly affected discovery with DavMail.

v0.4.3
------

- Don't log item data in errors when sync fails. This could leak user data into
  logs.
- Introduce the ``tls_root``, ``tls_fingerprint`` and ``auth_cert``
  configuration parameters used for custom TLS configurations.

v0.4.2
------

- Allow using the ``cmd`` syntax for vdir ``path`` directive.
- Allow using the ``cmd`` syntax for CalDAV/CardDAV ``url`` directive.
- Implement the ``repair`` command.
- Fix deletion of vdir collections.
- Ensure that new WebDAV resources has a proper extension.
- Implement a ``read_only`` directive for storages.
- Initialise pairs concurrently, improving start-up time.
- man pages are now in ``mdoc(7)`` format, which allows cross-links and also
  produces better HTML renders. ``scdoc(1)`` is no longer required.

v0.4.1
------

- Don't build documentation website with `make build`.

v0.4.0
------

- Implement a new `on_delete` directive to protect collections from deletion.
- Normalise timezone order when comparing items. This reduces false positive
  comparisons and conflicts when servers automatically re-order timezone
  components.
- When warning about emptied collections, clarify which storage was empty.
- Fix crash if a previous execution left behind an sqlite journal file.
- Perform a few operations (including initialisation and discovery)
  concurrently, improving start-up times and plan times.
- Improve the conflict resolution UI.
- Implement a sphinx-based website, published via CI.

v0.3.0
------

- Remove unnecessary storage locks when synchronising. Previously storages were
  locked to avoid concurrent executions. Instead, ensure that individual items
  are not modified concurrently.
- Implement monitoring via `inotify` for vdir storages. Other platforms will
  continue to rely on polling.
- Fixed bug including timezones when synchronising from a Webcal storage.
- Fixed support for `keep a` and `keep b` as `conflict_resolution` parameters.
- Implemented the `shell` mechanism for directives. See `pimsync.conf(5)` for
  details.
- Skip uploading unchanged items during conflict resolution. Fixes resolving
  conflicts with read-only storages (e.g.: Webcal).
- Fix `interval` directives in storages not being parsed.

v0.2.0
------

- Several documentation improvements.
- A minimal website is now available, and the documentation is now available
  online too: <https://pimsync.whynothugo.nl/>
- Reject configuration file on superfluous parameter.
- Attempt to use the provided URL before doing service discovery. If the URL
  provided in the configuration file is a valid context URL for a DAV server,
  discovery is skipped entirely.
- Fixed some erroneous handling of percent-encoded characters in URLs.
- Prompt early for all required credentials. This speeds up start-up, since
  there's no network IO between prompts.

v0.1.0
------

- Renamed project to `pimsync`.
- Redesigned configuration file.
- Include a man page for `pimsync(1)` and `pimsync.conf(5)`.
- Several minor fixes.
- Introduce support for Dav over Unix sockets.
- Allow specifying a custom configuration file.
- Many documentation improvements.
- Collection ID was sometimes referred to as "collection name". All references
  now specify "collection id"
- The `http` storage is now named `webcal`.

Previous development versions were named `vdirsyncer`. See :doc:`history` for
background on this.
