===========================
YARsync patch release 0.2.1 was done on 28 March 2023.
* Adds ``--version`` command.
* Improves diagnostic messages.
* Improves documentation.
* Fixes tests.
===============
YARsync 0.2
===============
YARsync v0.2 was released on the 8th of March, 2023.
Its main features were synchronization, commit limit and cloning.
Synchronization information is now stored in the directory *.ys/sync/*.
It contains information on the most recent synchronized commits for each known repository.
This information is transferred between replicas during ``pull``, ``push`` and ``clone``.
This allows ``yarsync`` repositories to better support the 3-2-1 backup rule.
To convert an old synchronization file to the new directory format, from the working directory one can use
cat .ys/sync.txt && mkdir .ys/sync && touch .ys/sync/$(cat .ys/sync.txt|sed 's/,/_/g').txt && rm .ys/sync.txt
To properly support synchronization information, now each repository must have a unique name.
The name is no longer automatically deduced from the host name,
but contained in *.ys/repo_<repo_name>.txt*.
In particular, nameless repositories on external drives cannot be mixed with nameless local repositories.
One can set repository name with ``init`` (this command does not affect existing files and is always safe).
A user of ``yarsync`` was concerned about the fact that ``rsync`` does not work well with millions of files,
and proposed automatically removing old commits.
To achieve that, *commit limit* was introduced. It can be set using an option *limit* of ``commit``.
When there appears more than that limit, older commits are removed during ``commit``.
``pull`` and ``push`` don't check whether destination has commits missing on source if
the local repository has commit limits
(it makes a repository with commit limit more like a central repository).
Bug fixes
---------
* *--no-inc-recursion* is always active for ``pull`` and ``push``.
Fixes a bug when ``pull`` *--new* retransferred files already present in commits.
* ``pull`` *--new* disables automatic checkout of commits after merge.
This prevents deletion of uncommitted files in the working directory
(they should be preserved when using *--new*).
Improvements
------------
* ``commit`` adds an option *--limit*.
``status`` shows the commit limit (if present). Commit limits are logged (during commit).
* ``init`` prompts for input when no repository name on the command line is given.
* ``status`` no longer outputs group and owner changes.
This information is ignored by ``yarsync`` and considered noise.
Set proper user and group for all files when needed.
* Improves output in case of errors.
* ``pull`` changes:
* *--new* allows local repository to have uncommitted changes.
* *--new* allows local or remote commits to be missing.
* ``pull`` and ``push`` changes:
* Improves output for ``pull`` and ``push``. All files for commits that are transferred as a whole (that is new ones)
are being output on a single line (that commit name).
This makes output more focused on the actual changes in the working directory
and on existing commits (if they contained changes).
* ``yarsync`` no longer updates user and group ids for ``pull`` and ``push`` (and indirectly ``clone``).
This allows one to have different user and group ids on different machines and storage drives, ignoring this metadata.
yarsync repositories are supposed to contain data belonging to one user.
* If local repository has a commit limit,
destination can have commits missing on source.
Backward incompatible changes
-----------------------------
* ``clone`` command and interface changed. ``clone`` allows copying to a remote.
New repository name must be provided explicitly.
Cloning from inside a repository with *rsync-filter* is allowed.
* Turns off ``pull/push`` *--overwrite* (``rsync`` *--ignore-existing*) functionality.
Waiting for https://github.com/WayneD/rsync/issues/357 to be fixed.
* Repositories are not checked for changes in the working directory
for ``push`` or ``pull`` if *--force* option is given.
* Name for each repository is required (to assist synchronization).
* Repository name is no longer stored in *repository.txt*, but in *repo_<name>.txt*.
This allows ``yarsync`` to know remote repository names from listing their configuration files.
Technical changes
-----------------
Documentation has been moved to Read the Docs.
* ``yarsync`` is tested for Python 3.11.
* ``yarsync`` development classifier on PyPI becomes "5 - Production/Stable".
* Adds *.gitattributes* (to log revisions of functions).
* Tests improvements:
* Adds *helpers.py* (for cloning test repositories).
* Fixes hardlink fixtures.
* Implements ``init`` *--merge* option. It is not tested and shall be added in the next release.
* *_print_command* accepts lists and properly escapes commands with spaces.
String and list representations of commands are no longer needed.
* *_commit* method accepts arguments explicitly.
* Adds *_Config* and *_Sync* helper classes.
* Documentation improvements:
* Adds a how-to for synchronizing repositories after adding external data to both of them (see details section).
* Documentation uses Sphinx. Needs fixes for pdf version.
Test coverage is 79% (253/1224 missing/total).
Publication
-----------
``yarsync`` v0.1 was packaged for Arch Linux, Debian and PyPI (and will be updated for v0.2).
A talk on ``yarsync`` was made at the Winter seminar of the Physics Institute of the RWTH Aachen University
in Montafon on February 2023.
The program was announced on the ``rsync`` mailing list, published on Arch Wiki and Arch Forum,
and in several Russian programming Telegram chats.
===========================
YARsync 0.1.1+deb
===========================
YARsync patch release 0.1.1+deb was done on 6 July 2022.
* Fixes manual for whatis (lexgrog) parsing.
* Documentation improvements. Adds Installation, Documentation and Thanks sections to README.
===========================