On Fr, 2011-01-07 at 14:12 +0000, Patrick Ohly wrote:
Since the beginning it was always possible to switch back and forth
between SyncEvolution releases. When backwards-incompatible on-disk
changes were necessary, the user had to explicitly asked for them with
the --migrate option (needed only once so far, to get the config layout
change).
For 1.2, this will no longer be possible, because libsynthesis changes
its on-disk format ("binfile") in a backwards-incompatible way (can read
old format, but old version cannot read new one).
There's one catch here: if this was the only change, then SyncEvolution
would have to detect the version of libsynthesis at compile or even
runtime to enable or disable its own config version bump.
It becomes mute when SyncEvolution's own config changes, but the problem
remains.
On that occasion I also want to make several other changes which
will
prevent going back:
1. split "type" into independent options, to solve
http://bugs.meego.com/show_bug.cgi?id=1023
2. rename "evolutionsource" to "database",
"evolutionuser/password"
to "backendusername/password", with the old names accepted as
alias, but not being written to disk
I've implemented the versioning, but not yet these two points.
Here's how I intend to handle the transition:
* Pre-releases of 1.2 will refuse to do anything with a config
unless its complete context gets migrated with "--migrate
@<context>"; this will also migrate all configs inside that
context. The error message will explain this.
Here's the result:
[INFO] must change format of peer config 'funambol' in
backward-incompatible way
[ERROR] error code from SyncEvolution local, status 22005:
Proceeding would modify config 'funambol' such that the previous
SyncEvolution release will not be able to use it. Stopping now.
Please explicitly acknowledge this step by running the following
command on the command line: syncevolution --migrate 'funambol'
After syncevolution --migrate 'funambol' the older release will complain
with:
[INFO] config version check failed: peer config has format 1,
but this SyncEvolution release only supports format 0
[ERROR] SyncEvolution 1.1.99.2 is too old to read configuration
'funambol', please upgrade SyncEvolution.
Migration happens
by renaming ~/.config/syncevolution/default to
~/.config/syncevolution/default.old and then recreating
~/.config/syncevolution/default with the new content. So it will
be possible to go back, but only with slow or refresh syncs.
* The final 1.2 will do the migration automatically, because most
users (in particular those relying on a GUI) will have problems
with the pre-release error messages.
There's one catch here: the migration is supposed to be invisible to
such users. But as the code stands at the moment, the foobar.old config
will be visible to them.
Two solutions:
1. do not keep the backup config around
2. filter out *.old in the list of configs reported via D-Bus
(which is what GUIs use); command line users will still see them
3. name the automatically generated backups like something which is
more obviously not created by a user, like .foobar.old, and hide
that
I prefer option 2. Power users will still be able to discover the
backups and throw them away with "--remove", whereas casual users won't
notice anything, as intended.
* I'll introduce .version files in
~/.config/syncevolution,
~/.config/syncevolution/* and ~/.config/syncevolution/*/peers/*.
The content are two numbers, one specifying the oldest format
definition that the directory is compatible with, the other
specifying the current definition.
I've implemented this slightly differently, with hidden version
properties in .internal.ini files.
--
Best Regards
Patrick Ohly
Senior Software Engineer
Intel GmbH
Open Source Technology Center
Pützstr. 5 Phone: +49-228-2493652
53129 Bonn
Germany