z3c.vcsync changes
==================

0.17 (2009-06-05)
-----------------

* Depend only on ``grokcore.component`` and ``zope.app.container``
  directly, not on ``grok`` itself. We want instead to depend only 
  on ``zope.container``, but we cannot do this yet as we need
  compatibility with Grok 0.14.

* Use a somewhat less verbose way to set up the tests.

* An issue existed when a common filesystem representation was used
  that could be translated (by a single factory) into a number of
  different classes. If an object was added, synchronized, then
  removed and an object of the name but different class was added, an
  error would occur when synchronizing this. This bug has been fixed
  at the (small) cost of a few-reparses here and there.

0.16 (2009-06-02)
-----------------

* Change the method by which zip files are created for export to a
  less filesystem-intensive method; files are directly added to the
  zip file. This hopefully brings performance benefits on platforms
  where accessing many small files is slow.

0.15 (2008-08-19)
-----------------

* Fix a bug where the SVN "R" status was not recognized by the py lib.
  Monkey-patch py for now, though a fix should be released with py
  0.9.2 eventually. Strictly depend on py 0.9.1 for now to make sure
  monkey-patch applies cleanly.

* A bit of refactoring of duplicated code in retrieving the objects
  modified and objects removed lists. Still not happy that this gets
  called twice per synchronization, but it was already doing this so
  doesn't get worse either.

0.14 (2008-07-04)
-----------------

* Fixed a bug where too many path fragments were returned in case of
  conflicts. Now only paths that have in fact changed should be
  returned. Added some tests for this.

* There was a case where two users would add a file with the same name
  to their own states independently. This used to result in an SVN
  error, but now also generates a conflict.  This conflict is a bit
  different in its behavior unfortunately, as it prefers the version
  already in SVN as opposed to the one last added.

0.13 (2008-06-02)
-----------------

* The root directory of the checkout is now truly equivalent to the
  root object of the state. This means that if the SVN checkout
  content is to remain the same, the state root to synchronize should
  be one level higher (the parent of the current state root).

* Conflict resolution has been cleaned up. When a conflict occurs, the
  other half of the conflict (the one not resolved) is moved into the
  ``found`` directory, which is created in the checkout root. This is
  also represented in the state container object and is synchronized
  like any other content.

0.12 (2008-05-16)
-----------------

Features added
~~~~~~~~~~~~~~

* The API has been cleaned up and revised. This will break code that
  uses this library, but so far I don't think that is many people
  yet. :)

* A major refactoring of the tests, including real SVN tests. This
  requires SVN to be installed on the system where the tests are being
  run, including the ``svn-admin`` command.

* ``IState`` objects now need to implement methods to access and
  maintain the revision number of the last revision.

* The developer must now also implement ``IParser`` utilities for
  files that can be synchronized (besides ``IFactory``, which used to
  be called ``IVcFactory``. The ``IParser`` utility overwrites the
  existing object instead of creating a new one. This allows
  synchronization to be a bit nicer and not remove and recreate
  objects unnecessarily, which makes it harder to implement things
  like references between objects.

* Add a facility to pass a special function along that is called for
  all objects created or modified during the synchronization (or
  during import). This function is called at the end when all objects
  that are going to exist already exist, so can be used in situations
  where the state of an object relies on the existence of another one.

0.11 (2008-03-10)
-----------------

Bugs fixed
~~~~~~~~~~

* Do not try to remove non-existent files during synchronization. A
  file might have been removed in SVN and there is no more need to
  re-remove it if it was also removed locally.

* There was an off-by one error during the "up" phase of
  synchronization with SVN, and as a result a log entry that was
  already processed could be re-processed during this next
  synchronisation. This could in some cases revive folders as unknown
  directories on the filesystem, leading to errors and
  inconsistencies.

0.10 (2008-01-08)
-----------------

Features added
~~~~~~~~~~~~~~

* The ``.sync()`` method now does not return the revision number, but
  an ``ISynchronizationInfo`` object. This has a ``revision_nr``
  attribute and also contains some information on what happened during
  the synchronization process.

Bugs fixed
~~~~~~~~~~

* revision number after synchronization was not always updated
  properly to the latest number of the repository. Now retrieve this
  number from ``commit()`` where possible.

0.9.1 (2007-11-29)
------------------

Bugs fixed
~~~~~~~~~~

* When resolving objects in the ZODB, a path was generated that has
  separators that are actually dependent on the operating system in
  use (``/`` for Unices, but ``\`` for windows). This caused
  synchronization to fail on Windows, completely flattening
  hierarchies. Now use os.path.sep to be platform-independent.

0.9 (2007-11-25)
----------------

Features added
~~~~~~~~~~~~~~

* The importing logic now allows the user to import new content over
  existing content. In this case any existing content is left alone,
  but new objects are added. Any attempt to overwrite existing content
  is ignored.

Bugs fixed
~~~~~~~~~~

* In some cases a containing directory is referenced which does not
  exist anymore when removing files. In this case we do not need to
  remove the file anymore, as the directory itself is gone.

* SVN doesn't actually remove directories, just mark them for
  removal. This could confuse the system during synchronization:
  removed directories might reappear again as they were still on the
  filesystem during loading. Make sure now that any directories marked
  for removal are also properly removed in the filesystem before load
  starts, but after up (as rm-ing a directory marked for removal
  before svn up will actually re-add this directory!).

Restructuring
~~~~~~~~~~~~~

* Previously the datetime of last synchronization was used to
  determine what to synchronize both in the ZODB as well as in the
  checkout. This has a significant drawback if the datetime setting of
  the computer the synchronization code is running on is ahead of the
  datetime setting of the version control server: updates could be
  lost. 

  Changed the code to use a revision_nr instead. This is a number that
  increments with each synchronization, and the number can be used to
  determine both what changes have been made since last
  synchronization in the ZODB as well as in the version control
  system. This is a more robust approach.

0.8.1 (2007-11-07)
------------------

Bugs fixed
~~~~~~~~~~

* Fix a bug in conversion of SVN timestamps to datetimes. Previous
  code worked in DST, but not during winter time. The new code might
  of course break under DST - the mysterious of datetime conversion
  are legion.

* A cleaner way to cache the files listing from SVN.

* Work around a bug in the Py library. The Py library doesn't support
  the R status code from SVN and raises a NotImplementedError when it
  encounters it. Evilly catch these NotImplementedErrors for now. The
  bug has been reported upstream and should be fixed in the next
  release of Py.
