===========================
YARsync 0.3
===========================
YARsync minor release 0.3 was done on March 28, 2025.

This release does not add much functionality, but fixes several bugs
and improves documentation and technical features of the project.

What's new
----------

* *clone* command gets a ``--force`` option.

Bug fixes
---------

* Fixes some bugs in *clone_from* and *show* connected with the synchronisation directory.

Documentation
-------------

* Adds a *Developing and Contributing* section.
* Updates tips on using virtual environment.

Technical changes
-----------------

* Adds *pyproject.toml* instead of *setup.py*, as is required by modern Python packaging.
* Updates tests to run for Python 3.13.
* Linted out many unused imports in test files.
* This is the last release tested with Python 3.6.


Community
---------

This release is mostly due to [statzitz](https://github.com/statzitz),
who updated tests to work with the recent Python version (a serious bug which prevented many users to use the tool;
thanks to complaints from AUR users as well) and added many documentation improvements.

Also thanks to [Lin, Yong Xiang](https://github.com/r888800009) for several bug reports and useful discussions.

Today the project has 39 stars on GitHub and 3 contributors, which looks rather popular for me
and inspires its better support and development.

Publicity
---------

*yarsync* was presented in August 2024 at a conference of Python developers in high energy physics,
PyHEP.dev 2024.
A `video <https://www.youtube.com/watch?v=1qRZ1mIuD3U>`_ was recorded and published on YouTube (link added to the README).


===========================
YARsync 0.2.1
===========================
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.

===========================
YARsync 0.1.1
===========================
YARsync patch release 0.1.1 was made on 30 June 2022.
It adds a manual page, improves output and supports Python 3.6.

Improvements
------------
Tested and works for Python 3.6.
Improves output handling in commit (allows verbosity settings).
rsync always outputs error messages.

Bug fixes
---------
pull and push print output correctly.

=======================
  YARsync release 0.1
=======================

The first tagged release YARsync v0.1 was made on 21st-23rd June 2022.
The program works with Python 3.7, 3.8, 3.9, 3.10 and PyPy 3.
Test coverage is 76% (209/889 missing to total).
