source -> datastore rename, improved terminology

The word "source" implies reading, while in fact access is read/write.
"datastore" avoids that misconception. Writing it in one word emphasizes
that it is single entity.

While renaming, also remove references to explicit --*-property
parameters. The only necessary use today is "--sync-property ?"
and "--datastore-property ?".

--datastore-property was used instead of the short --store-property
because "store" might be mistaken for the verb. It doesn't matter
that it is longer because it doesn't get typed often.

--source-property must remain valid for backward compatility.

As many user-visible instances of "source" as possible got replaced in
text strings by the newer term "datastore". Debug messages were left
unchanged unless some regex happened to match it.

The source code will continue to use the old variable and class names
based on "source".

Various documentation enhancements:
  Better explain what local sync is and how it involves two sync
  configs. "originating config" gets introduces instead of just
  "sync config".

  Better explain the relationship between contexts, sync configs,
  and source configs ("a sync config can use the datastore configs in
  the same context").

  An entire section on config properties in the terminology
  section. "item" added (Todd Wilson correctly pointed out that it was
  missing).

  Less focus on conflict resolution, as suggested by Graham Cobb.

  Fix examples that became invalid when fixing the password
  storage/lookup mechanism for GNOME keyring in 1.4.

  The "command line conventions", "Synchronization beyond SyncML" and
  "CalDAV and CardDAV" sections were updated. It's possible that the
  other sections also contain slightly incorrect usage of the
  terminology or are simply out-dated.
This commit is contained in:
Patrick Ohly 2014-07-28 15:29:41 +02:00
parent 581cee897e
commit 04f11b422e
15 changed files with 537 additions and 355 deletions

View File

@ -379,7 +379,7 @@ README.patched.rst: README.rst src/syncevolution
-e 's/^:Version: .*/:Version: $(VERSION)/;' \
-e 's/:Date: .*/":Date: " . `date +%Y-%m-%d`/e;' \
-e 'if (s;(<< see "syncevolution --sync-property ." >>\n);run("src/syncevolution --daemon=no --sync-property ?") || $$1;e) { $$syncfound=1; }' \
-e 'if (s;(<< see "syncevolution --source-property ." >>\n);run("src/syncevolution --daemon=no --source-property ?") || $$1;e) { $$sourcefound=1; }' \
-e 'if (s;(<< see "syncevolution --datastore-property ." >>\n);run("src/syncevolution --daemon=no --source-property ?") || $$1;e) { $$sourcefound=1; }' \
-e 'print;' \
-e '}' \
-e 'die "<<sync-property>> tag not in README.rst?!" unless $$syncfound;' \

File diff suppressed because it is too large Load Diff

View File

@ -186,7 +186,7 @@ class ActiveSyncSource :
boost::shared_ptr<ConfigNode> m_itemNode;
private:
/** "source-config@<context>" instance which holds our username == ActiveSync account ID */
/** "target-config@<context>" instance which holds our username == ActiveSync account ID */
boost::shared_ptr<SyncConfig> m_context;
/** account ID for libeas, must be set in "username" config property */

View File

@ -204,7 +204,7 @@ static TestingSyncSource *createEASSource(const ClientTestConfig::createsource_t
return res.release();
} else {
// sorry, no database
SE_LOG_ERROR(NULL, "cannot create EAS source for database %s, check config",
SE_LOG_ERROR(NULL, "cannot create EAS datastore for database %s, check config",
res->getDatabaseID().c_str());
return NULL;
}

View File

@ -27,13 +27,13 @@ Query databases:
syncevolution
Configuring syncevolution for contacts with Akonadi as backend:
syncevolution --configure --source-property sync=none \
syncevolution --configure --datastore-property sync=none \
--sync-property username=... \
--sync-property password=... \
scheduleworld
syncevolution --configure --source-property sync=two-way \
--source-property type=kde-contacts \
--source-property evolutionsource=akonadi:?... \
syncevolution --configure --datastore-property sync=two-way \
--datastore-property type=kde-contacts \
--datastore-property evolutionsource=akonadi:?... \
scheduleworld addressbook
Initial run:

View File

@ -21,7 +21,7 @@ Install /tmp/syncsqlite.so by moving it into the
installation.
It then should show up as additional choice for the "type" property:
syncevolution --source-property type=?
syncevolution --datastore-property type=?
...
SQLite Address Book = addressbook = contacts = sqlite-contacts

View File

@ -81,7 +81,7 @@ public:
if (sourceName.empty()) {
sourceName = "<none>";
}
description = StringPrintf("sync config '%s', source config '%s', database='%s'",
description = StringPrintf("sync config '%s', datastore config '%s', database='%s'",
syncName.c_str(),
sourceName.c_str(),
url.c_str());
@ -219,14 +219,14 @@ void ContextSettings::lookupAuthProvider()
if (m_sourceConfig) {
identity = m_sourceConfig->getUser();
password = m_sourceConfig->getPassword();
credentialsFrom = "source config";
credentialsFrom = "datastore config";
}
// fall back to context
if (m_context && !identity.wasSet() && !password.wasSet()) {
identity = m_context->getSyncUser();
password = m_context->getSyncPassword();
credentialsFrom = "source context";
credentialsFrom = "context";
}
SE_LOG_DEBUG(NULL, "using username '%s' from %s for WebDAV, password %s",
identity.toString().c_str(),

View File

@ -225,7 +225,7 @@ void Connection::process(const Caller_t &caller,
uint32_t contentType;
std::string serverURI;
if (!numSources) {
SE_LOG_DEBUG(NULL, "SAN message with no sources, using selected modes");
SE_LOG_DEBUG(NULL, "SAN message with no datastores, using selected modes");
// Synchronize all known sources with the default mode.
if (san.GetNthSync(0, syncType, contentType, serverURI)) {
SE_LOG_DEBUG(NULL, "SAN invalid header, using default modes");
@ -233,7 +233,7 @@ void Connection::process(const Caller_t &caller,
SE_LOG_DEBUG(NULL, "SAN invalid sync type %d, using default modes", syncType);
} else {
m_syncMode = PrettyPrintSyncMode(SyncMode(syncType), true);
SE_LOG_DEBUG(NULL, "SAN sync mode for all configured sources: %s", m_syncMode.c_str());
SE_LOG_DEBUG(NULL, "SAN sync mode for all configured datastores: %s", m_syncMode.c_str());
}
} else {
for (int sync = 1; sync <= numSources; sync++) {
@ -604,7 +604,7 @@ void Connection::ready()
// range selection for events)
if (boost::starts_with(sourceConfig->getURINonEmpty(), serverURI)) {
SE_LOG_DEBUG(NULL,
"SAN entry #%d = source %s with mode %s",
"SAN entry #%d = datastore %s with mode %s",
(int)sync, source.c_str(), syncMode.c_str());
m_sourceModes[source] = syncMode;
found = true;

View File

@ -289,7 +289,7 @@ void ReadOperations::checkSource(const std::string &sourceName)
}
}
if(it == sourceNames.end()) {
SE_THROW_EXCEPTION(NoSuchSource, "'" + m_configName + "' has no '" + sourceName + "' source");
SE_THROW_EXCEPTION(NoSuchSource, "'" + m_configName + "' has no '" + sourceName + "' datastore");
}
bool checked = false;
try {
@ -307,7 +307,7 @@ void ReadOperations::checkSource(const std::string &sourceName)
}
if (!checked) {
SE_THROW_EXCEPTION(SourceUnusable, "The source '" + sourceName + "' is not usable");
SE_THROW_EXCEPTION(SourceUnusable, "The datastore '" + sourceName + "' is not usable");
}
}
void ReadOperations::getDatabases(const string &sourceName, SourceDatabases_t &databases)
@ -322,14 +322,14 @@ void ReadOperations::getDatabases(const string &sourceName, SourceDatabases_t &d
if (!source.get()) {
continue;
} else if (source->isInactive()) {
SE_THROW_EXCEPTION(NoSuchSource, "'" + m_configName + "' backend of source '" + sourceName + "' is not supported");
SE_THROW_EXCEPTION(NoSuchSource, "'" + m_configName + "' backend of datastore '" + sourceName + "' is not supported");
} else {
databases = source->getDatabases();
return;
}
}
SE_THROW_EXCEPTION(NoSuchSource, "'" + m_configName + "' has no '" + sourceName + "' source");
SE_THROW_EXCEPTION(NoSuchSource, "'" + m_configName + "' has no '" + sourceName + "' datastore");
}
SE_END_CXX

View File

@ -179,6 +179,7 @@ bool Cmdline::parse(vector<string> &parsed)
}
parsed.push_back(m_argv[opt]);
} else if(boost::iequals(m_argv[opt], "--source-property") ||
boost::iequals(m_argv[opt], "--datastore-property") ||
boost::iequals(m_argv[opt], "-z")) {
opt++;
if (!parseProp(SOURCE_PROPERTY_TYPE,
@ -770,7 +771,7 @@ bool Cmdline::run() {
if (!m_server.empty()) {
// list for specific backend chosen via config
if (m_sources.size() != 1) {
SE_THROW(StringPrintf("must specify exactly one source after the config name '%s'",
SE_THROW(StringPrintf("must specify exactly one datastore after the config name '%s'",
m_server.c_str()));
}
sourceName = *m_sources.begin();
@ -959,7 +960,7 @@ bool Cmdline::run() {
string origPeer;
if (m_migrate) {
if (!m_sources.empty()) {
SE_LOG_ERROR(NULL, "cannot migrate individual sources");
SE_LOG_ERROR(NULL, "cannot migrate individual datastores");
return false;
}
@ -1295,7 +1296,7 @@ bool Cmdline::run() {
}
if (!sources.empty()) {
Exception::throwError(SE_HERE, string("no such source(s): ") + boost::join(sources, " "));
Exception::throwError(SE_HERE, string("no such datastore(s): ") + boost::join(sources, " "));
}
}
@ -1368,9 +1369,9 @@ bool Cmdline::run() {
explanation.push_back(StringPrintf("configuration '%s' does not exist", m_server.c_str()));
}
if (haveSourceName && !sourceNodes.exists()) {
explanation.push_back(StringPrintf("source '%s' does not exist", sourceName.c_str()));
explanation.push_back(StringPrintf("datastore '%s' does not exist", sourceName.c_str()));
} else if (!haveSourceName) {
explanation.push_back("no source selected");
explanation.push_back("no datastore selected");
}
SyncSourceConfig sourceConfig(sourceName, sourceNodes);
if (!sourceConfig.getBackend().wasSet()) {
@ -1650,7 +1651,7 @@ bool Cmdline::run() {
// check whether there were any sources specified which do not exist
if (!unmatchedSources.empty()) {
Exception::throwError(SE_HERE, string("no such source(s): ") + boost::join(unmatchedSources, " "));
Exception::throwError(SE_HERE, string("no such datastore(s): ") + boost::join(unmatchedSources, " "));
}
if (m_status) {
@ -1682,7 +1683,7 @@ bool Cmdline::run() {
return false;
}
if (m_sources.empty()) {
usage(false, "Sources must be selected explicitly for --restore to prevent accidental restore.");
usage(false, "Datastores must be selected explicitly for --restore to prevent accidental restore.");
return false;
}
context->restore(m_restore,
@ -1811,7 +1812,7 @@ bool Cmdline::parseProp(PropertyType propertyType,
if (isSyncProp) {
if (isSourceProp) {
usage(false, StringPrintf("property '%s' in %s could be both a sync and a source property, use --sync-property or --source-property to disambiguate it", propname, args.c_str()));
usage(false, StringPrintf("property '%s' in %s could be both a sync and a datastore property, use --sync-property or --datastore-property to disambiguate it", propname, args.c_str()));
return false;
} else {
validProps = &m_validSyncProps;
@ -1888,7 +1889,7 @@ bool Cmdline::parseProp(PropertyType propertyType,
if (validProps == &m_validSyncProps) {
// complain if sync property includes source prefix
if (!spec.m_source.empty()) {
SE_LOG_ERROR(NULL, "%s: source name '%s' not allowed in sync property",
SE_LOG_ERROR(NULL, "%s: datastore name '%s' not allowed in sync property",
args.c_str(),
spec.m_source.c_str());
return false;
@ -3190,7 +3191,8 @@ protected:
{
TestCmdline cmdline("--configure",
"--source-property", "uri = dummy",
// Intentionally use legacy parameter name here.
"--datastore-property", "uri = dummy",
"scheduleworld",
"xyz",
NULL);
@ -3262,7 +3264,7 @@ protected:
" not always obvious.\n"
" \n"
" When accepting a sync session in a SyncML server (HTTP server), only\n"
" sources with sync != disabled are made available to the client,\n"
" datastores with sync != disabled are made available to the client,\n"
" which chooses the final sync mode based on its own configuration.\n"
" When accepting a sync session in a SyncML client (local sync with\n"
" the server contacting SyncEvolution on a device), the sync mode\n"
@ -3278,7 +3280,7 @@ protected:
string(filter.m_cmdline->m_props[""].m_sourceProps[""]));
CPPUNIT_ASSERT_EQUAL_DIFF("", string(filter.m_cmdline->m_props[""].m_syncProps));
TestCmdline filter2("--source-property", "sync=refresh", NULL);
TestCmdline filter2("--datastore-property", "sync=refresh", NULL);
CPPUNIT_ASSERT(filter2.m_cmdline->parse());
CPPUNIT_ASSERT(!filter2.m_cmdline->run());
CPPUNIT_ASSERT_NO_THROW(filter2.expectUsageError("[ERROR] No configuration name specified.\n"));
@ -3287,10 +3289,10 @@ protected:
CPPUNIT_ASSERT_EQUAL_DIFF("",
string(filter2.m_cmdline->m_props[""].m_syncProps));
TestCmdline filter3("--source-property", "xyz=1", NULL);
TestCmdline filter3("--datastore-property", "xyz=1", NULL);
CPPUNIT_ASSERT(!filter3.m_cmdline->parse());
CPPUNIT_ASSERT_EQUAL(string(""), filter3.m_out.str());
CPPUNIT_ASSERT_EQUAL(string("[ERROR] '--source-property xyz=1': no such property\n"), filter3.m_err.str());
CPPUNIT_ASSERT_EQUAL(string("[ERROR] '--datastore-property xyz=1': no such property\n"), filter3.m_err.str());
TestCmdline filter4("xyz=1", NULL);
CPPUNIT_ASSERT(!filter4.m_cmdline->parse());
@ -3602,7 +3604,7 @@ protected:
// updating "type" for peer is mapped to updating "backend",
// "databaseFormat", "syncFormat", "forceSyncFormat"
TestCmdline cmdline("--configure",
"--source-property", "addressbook/type=file:text/vcard:3.0",
"--datastore-property", "addressbook/type=file:text/vcard:3.0",
"scheduleworld",
NULL);
cmdline.doit();
@ -3624,7 +3626,7 @@ protected:
{
// updating type for context must not affect peer
TestCmdline cmdline("--configure",
"--source-property", "type=file:text/x-vcard:2.1",
"--datastore-property", "type=file:text/x-vcard:2.1",
"@default", "addressbook",
NULL);
cmdline.doit();
@ -3742,7 +3744,7 @@ protected:
}
{
TestCmdline cmdline("--source-property", "?",
TestCmdline cmdline("--datastore-property", "?",
NULL);
cmdline.doit();
CPPUNIT_ASSERT_EQUAL_DIFF("", cmdline.m_err.str());
@ -3751,7 +3753,7 @@ protected:
}
{
TestCmdline cmdline("--source-property", "?",
TestCmdline cmdline("--datastore-property", "?",
"--sync-property", "?",
NULL);
cmdline.doit();
@ -3762,7 +3764,7 @@ protected:
{
TestCmdline cmdline("--sync-property", "?",
"--source-property", "?",
"--datastore-property", "?",
NULL);
cmdline.doit();
CPPUNIT_ASSERT_EQUAL_DIFF("", cmdline.m_err.str());
@ -3771,11 +3773,11 @@ protected:
}
{
TestCmdline cmdline("--source-property", "sync=?",
TestCmdline cmdline("--datastore-property", "sync=?",
NULL);
cmdline.doit();
CPPUNIT_ASSERT_EQUAL_DIFF("", cmdline.m_err.str());
CPPUNIT_ASSERT_EQUAL_DIFF("'--source-property sync=?'\n",
CPPUNIT_ASSERT_EQUAL_DIFF("'--datastore-property sync=?'\n",
filterIndented(cmdline.m_out.str()));
}
@ -3806,8 +3808,8 @@ protected:
// create from scratch with only addressbook configured
{
TestCmdline cmdline("--configure",
"--source-property", "database = file://tmp/test",
"--source-property", "type = file:text/x-vcard",
"--datastore-property", "database = file://tmp/test",
"--datastore-property", "type = file:text/x-vcard",
"@foobar",
"addressbook",
NULL);
@ -3835,8 +3837,8 @@ protected:
// add calendar
{
TestCmdline cmdline("--configure",
"--source-property", "database@foobar = file://tmp/test2",
"--source-property", "backend = calendar",
"--datastore-property", "database@foobar = file://tmp/test2",
"--datastore-property", "backend = calendar",
"@foobar",
"calendar",
NULL);
@ -3880,8 +3882,8 @@ protected:
// disable all sources except for addressbook
{
TestCmdline cmdline("--configure",
"--source-property", "addressbook/sync=two-way",
"--source-property", "sync=none",
"--datastore-property", "addressbook/sync=two-way",
"--datastore-property", "sync=none",
"scheduleworld@foobar",
NULL);
cmdline.doit();
@ -3896,8 +3898,8 @@ protected:
{
TestCmdline cmdline("--configure",
"--template", "SyncEvolution",
"--source-property", "addressbook/type=file:text/vcard:3.0",
"--source-property", "calendar/type=file:text/calendar:2.0",
"--datastore-property", "addressbook/type=file:text/vcard:3.0",
"--datastore-property", "calendar/type=file:text/calendar:2.0",
"syncevo@syncevo",
NULL);
cmdline.doit();
@ -3969,7 +3971,7 @@ protected:
{
TestCmdline cmdline("--configure",
"--source-property", "sync = disabled",
"--datastore-property", "sync = disabled",
"scheduleworld",
NULL);
cmdline.doit();
@ -3985,7 +3987,7 @@ protected:
{
TestCmdline cmdline("--configure",
"--source-property", "sync = one-way-from-server",
"--datastore-property", "sync = one-way-from-server",
"scheduleworld",
"addressbook",
NULL);
@ -4007,7 +4009,7 @@ protected:
{
TestCmdline cmdline("--configure",
"--sync", "two-way",
"-z", "database=source",
"-z", "database=datastore",
// note priority of suffix: most specific wins
"--sync-property", "maxlogdirs@scheduleworld@default=20",
"--sync-property", "maxlogdirs@default=10",
@ -4026,10 +4028,10 @@ protected:
"sync = two-way");
boost::replace_all(expected,
"# database = ",
"database = source");
"database = datastore");
boost::replace_all(expected,
"database = xyz",
"database = source");
"database = datastore");
boost::replace_all(expected,
"# maxlogdirs = 10",
"maxlogdirs = 20");
@ -4501,7 +4503,7 @@ private:
CPPUNIT_ASSERT(out.find("\nOptions:\n") == std::string::npos);
CPPUNIT_ASSERT(boost::ends_with(out,
"Remove item(s):\n"
" syncevolution --delete-items [--] <config> <source> (<luid> ... | '*')\n\n"));
" syncevolution --delete-items [--] <config> <store> (<luid> ... | '*')\n\n"));
// exact error message
CPPUNIT_ASSERT_EQUAL(error, err);

View File

@ -833,9 +833,9 @@ class LocalTransportAgentChild : public TransportAgent
if (!targetNodes.dataConfigExists()) {
if (targetName.empty()) {
Exception::throwError(SE_HERE, "missing URI for one of the sources");
Exception::throwError(SE_HERE, "missing URI for one of the datastores");
} else {
Exception::throwError(SE_HERE, StringPrintf("%s: source not configured",
Exception::throwError(SE_HERE, StringPrintf("%s: datastore not configured",
fullTargetName.c_str()));
}
}
@ -846,7 +846,7 @@ class LocalTransportAgentChild : public TransportAgent
// done before in this loop => error in original config.
if (!targetSource.isDisabled()) {
Exception::throwError(SE_HERE,
StringPrintf("%s: source targetted twice by %s",
StringPrintf("%s: datastore targetted twice by %s",
fullTargetName.c_str(),
serverConfig.first.c_str()));
}

View File

@ -1302,7 +1302,7 @@ static ConfigProperty syncPropSyncURL("syncURL",
"Identifies how to contact the peer,\n"
"best explained with some examples.\n\n"
"HTTP(S) SyncML servers::\n\n"
" http://example.com/sync\n"
" http://example.com/sync\n\n"
"OBEX over Bluetooth uses the MAC address, with\n"
"the channel chosen automatically::\n\n"
" obex-bt://00:0A:94:03:F3:7E\n\n"
@ -1427,7 +1427,7 @@ static BoolConfigProperty syncPropPreventSlowSync("preventSlowSync",
"side with a refresh-from-client/server sync instead of doing\n"
"a slow sync.\n"
"When this option is enabled, slow syncs that could cause problems\n"
"are not allowed to proceed. Instead, the affected sources are\n"
"are not allowed to proceed. Instead, the affected datastores are\n"
"skipped, allowing the user to choose a suitable sync mode in\n"
"the next run (slow sync selected explicitly, refresh sync).\n"
"The following situations are handled:\n\n"
@ -2007,7 +2007,7 @@ void PasswordConfigProperty::checkPassword(UserInterface &ui,
serverName.c_str(),
username.c_str());
} else {
SE_LOG_DEBUG(NULL, "checking password property '%s' in source '%s' of config '%s' with user identity '%s'",
SE_LOG_DEBUG(NULL, "checking password property '%s' in datastore '%s' of config '%s' with user identity '%s'",
getMainName().c_str(),
sourceName.c_str(),
serverName.c_str(),
@ -2154,7 +2154,7 @@ void PasswordConfigProperty::savePassword(UserInterface &ui,
serverName.c_str(),
username.c_str());
} else {
SE_LOG_DEBUG(NULL, "possibly saving password property '%s' in source '%s' of config '%s' with user identity '%s'",
SE_LOG_DEBUG(NULL, "possibly saving password property '%s' in datastore '%s' of config '%s' with user identity '%s'",
getMainName().c_str(),
sourceName.c_str(),
serverName.c_str(),
@ -2681,7 +2681,7 @@ StringConfigProperty SyncSourceConfig::m_sourcePropSync("sync",
"not always obvious.\n"
"\n"
"When accepting a sync session in a SyncML server (HTTP server), only\n"
"sources with sync != disabled are made available to the client,\n"
"datastores with sync != disabled are made available to the client,\n"
"which chooses the final sync mode based on its own configuration.\n"
"When accepting a sync session in a SyncML client (local sync with\n"
"the server contacting SyncEvolution on a device), the sync mode\n"
@ -2710,25 +2710,25 @@ public:
SourceBackendConfigProperty() :
StringConfigProperty("backend",
"Specifies the SyncEvolution backend and thus the\n"
"data which is synchronized by this source. Each\n"
"data which is synchronized by this datastore. Each\n"
"backend may support multiple databases (see 'database'\n"
"property), different formats inside that database (see\n"
"'databaseFormat'), and different formats when talking to\n"
"the sync peer (see 'syncFormat' and 'forceSyncFormat').\n"
"\n"
"A special 'virtual' backend combines several other\n"
"data sources and presents them as one set of items\n"
"datastores and presents them as one set of items\n"
"to the peer. For example, Nokia phones typically\n"
"exchange tasks and events as part of one set of\n"
"calendar items.\n"
"\n"
"Right now such a virtual backend is limited to\n"
"combining one calendar source with events and one\n"
"task source. They have to be specified in the\n"
"combining one calendar datastore with events and one\n"
"task datastore. They have to be specified in the\n"
"``database`` property, typically like this:\n"
"``calendar,todo``\n"
"\n"
"Different sources combined in one virtual source must\n"
"Different datastores combined in one virtual datastore must\n"
"have a common format. As with other backends,\n"
"the preferred format can be influenced via the 'syncFormat'\n"
"attribute.\n"
@ -2821,7 +2821,7 @@ static ConfigProperty sourcePropDatabaseID(Aliases("database") + "evolutionsourc
"like for example the system address book.\n"
"Not setting this property selects that default\n"
"database.\n\n"
"If the backend is a virtual data source,\n"
"If the backend is a virtual data datastore,\n"
"this field must contain comma seperated list of\n"
"sub datasources actually used to store data.\n"
"If your sub datastore has a comma in name, you\n"
@ -2833,8 +2833,8 @@ static ConfigProperty sourcePropDatabaseID(Aliases("database") + "evolutionsourc
"run ``syncevolution --print-databases``. The name\n"
"is printed in front of the colon, followed by\n"
"an identifier in brackets. Usually the name is unique and can be\n"
"used to reference the data source. The default\n"
"data source is marked with <default> at the end\n"
"used to reference the data datastore. The default\n"
"data datastore is marked with <default> at the end\n"
"of the line, if there is a default.\n");
static StringConfigProperty sourcePropDatabaseFormat("databaseFormat",
@ -2845,11 +2845,11 @@ static StringConfigProperty sourcePropDatabaseFormat("databaseFormat",
static ConfigProperty sourcePropURI("uri",
"this is appended to the server's URL to identify the\n"
"server's database; if unset, the source name is used as\n"
"server's database; if unset, the datastore name is used as\n"
"fallback");
static ConfigProperty sourcePropUser(Aliases("databaseUser") + "evolutionuser",
"authentication for backend data source; password can be specified\n"
"authentication for backend data datastore; password can be specified\n"
"in multiple ways, see SyncML server password for details\n"
"\n"
"Warning: setting database user/password in cases where it is not\n"
@ -2889,7 +2889,7 @@ public:
key.object += " ";
key.object += sourceName;
key.object += " backend";
key.description = StringPrintf("databasePassword for %s in source %s",
key.description = StringPrintf("databasePassword for %s in datastore %s",
descr.c_str(), sourceName.c_str());
return key;
}
@ -3004,11 +3004,11 @@ SyncSourceNodes::getNode(const ConfigProperty &prop) const
{
switch (prop.getSharing()) {
case ConfigProperty::GLOBAL_SHARING:
return boost::shared_ptr<FilterConfigNode>(new FilterConfigNode(boost::shared_ptr<ConfigNode>(new DevNullConfigNode("no global source properties"))));
return boost::shared_ptr<FilterConfigNode>(new FilterConfigNode(boost::shared_ptr<ConfigNode>(new DevNullConfigNode("no global datastore properties"))));
break;
case ConfigProperty::SOURCE_SET_SHARING:
if (prop.isHidden()) {
return boost::shared_ptr<FilterConfigNode>(new FilterConfigNode(boost::shared_ptr<ConfigNode>(new DevNullConfigNode("no hidden source set properties"))));
return boost::shared_ptr<FilterConfigNode>(new FilterConfigNode(boost::shared_ptr<ConfigNode>(new DevNullConfigNode("no hidden datastore set properties"))));
} else {
return m_sharedNode;
}

View File

@ -1407,7 +1407,7 @@ public:
m_doLogging &&
(m_client.getDumpData() || m_client.getPrintChanges())) {
// dump initial databases
SE_LOG_INFO(NULL, "creating complete data backup of source %s before sync (%s)",
SE_LOG_INFO(NULL, "creating complete data backup of datastore %s before sync (%s)",
sourceName.c_str(),
(m_client.getDumpData() && m_client.getPrintChanges()) ? "enabled with dumpData and needed for printChanges" :
m_client.getDumpData() ? "because it was enabled with dumpData" :
@ -2224,12 +2224,12 @@ void SyncContext::initSources(SourceList &sourceList)
= getSyncSourceConfig(source);
if (!source_config || !source_config->exists()) {
Exception::throwError(SE_HERE,
StringPrintf("Virtual data source \"%s\" references a nonexistent datasource \"%s\".", name.c_str(), source.c_str()));
StringPrintf("Virtual datastore \"%s\" references a nonexistent datasource \"%s\".", name.c_str(), source.c_str()));
}
pair< map<string, string>::iterator, bool > res = subSources.insert(make_pair(source, name));
if (!res.second) {
Exception::throwError(SE_HERE,
StringPrintf("Data source \"%s\" included in the virtual sources \"%s\" and \"%s\". It can only be included in one virtual source at a time.",
StringPrintf("Datastore \"%s\" included in the virtual datastores \"%s\" and \"%s\". It can only be included in one virtual datastore at a time.",
source.c_str(), res.first->second.c_str(), name.c_str()));
}
@ -2865,13 +2865,13 @@ void SyncContext::getConfigXML(string &xml, string &configname)
sourceType.m_format != subType.m_format ||
sourceType.m_forceFormat != subType.m_forceFormat)) {
SE_LOG_WARNING(NULL,
"Virtual data source \"%s\" and sub data source \"%s\" have different data format. Will use the format in virtual data source.",
"Virtual datastore \"%s\" and sub datastore \"%s\" have different data format. Will use the format in virtual datastore.",
vSource->getDisplayName().c_str(), source.c_str());
}
}
if (mappedSources.size() !=2) {
vSource->throwError(SE_HERE, "virtual data source currently only supports events+tasks combinations");
vSource->throwError(SE_HERE, "virtual datastore currently only supports events+tasks combinations");
}
string name = vSource->getName();
@ -3379,7 +3379,7 @@ SyncMLStatus SyncContext::sync(SyncReport *report)
// instantiate backends, but do not open them yet
initSources(sourceList);
if (sourceList.empty()) {
Exception::throwError(SE_HERE, "no sources active, check configuration");
Exception::throwError(SE_HERE, "no datastores active, check configuration");
}
// request all config properties once: throwing exceptions
@ -3555,7 +3555,7 @@ bool SyncContext::sendSAN(uint16_t version)
mode = SA_TWO_WAY;
}
if (mode < SA_FIRST || mode > SA_LAST) {
SE_LOG_DEV(NULL, "Ignoring data source %s with an invalid sync mode", name.c_str());
SE_LOG_DEV(NULL, "Ignoring datastore %s with an invalid sync mode", name.c_str());
continue;
}
syncMode = mode;
@ -3576,7 +3576,7 @@ bool SyncContext::sendSAN(uint16_t version)
contentTypeB = 0;
SE_LOG_DEBUG(NULL, "Unknown datasource mimetype, use 0 as default");
}
SE_LOG_DEBUG(NULL, "SAN source %s uri %s type %u mode %d",
SE_LOG_DEBUG(NULL, "SAN datastore %s uri %s type %u mode %d",
name.c_str(),
uri.c_str(),
contentTypeB,
@ -3586,7 +3586,7 @@ bool SyncContext::sendSAN(uint16_t version)
};
} else {
string mimetype = GetLegacyMIMEType(sourceType.m_format, sourceType.m_forceFormat);
SE_LOG_DEBUG(NULL, "SAN source %s uri %s type %s",
SE_LOG_DEBUG(NULL, "SAN datastore %s uri %s type %s",
name.c_str(),
uri.c_str(),
mimetype.c_str());
@ -3595,7 +3595,7 @@ bool SyncContext::sendSAN(uint16_t version)
}
if (!hasSource) {
SE_THROW ("No source enabled for server alerted sync!");
SE_THROW ("No datastore enabled for server alerted sync!");
}
/* Generate the SAN Package */
@ -3709,7 +3709,7 @@ bool SyncContext::setFreeze(bool freeze)
}
if (m_sourceListPtr) {
BOOST_FOREACH (SyncSource *source, *m_sourceListPtr) {
SE_LOG_DEBUG(NULL, "SyncContext::setFreeze(): source %s", source->getDisplayName().c_str());
SE_LOG_DEBUG(NULL, "SyncContext::setFreeze(): datastore %s", source->getDisplayName().c_str());
source->setFreeze(freeze);
}
}
@ -4054,7 +4054,7 @@ SyncMLStatus SyncContext::doSync()
if (!explanation.empty()) {
string sourceparam = boost::join(sources, " ");
SE_LOG_ERROR(NULL,
"Aborting because of unexpected slow sync for source(s): %s",
"Aborting because of unexpected slow sync for datastore(s): %s",
sourceparam.c_str());
SE_LOG_INFO(NULL, "%s", explanation.c_str());
} else {

View File

@ -438,7 +438,7 @@ SyncSource *SyncSource::createSource(const SyncSourceParams &params, bool error,
SyncSource *source = NULL;
source = new VirtualSyncSource(params, config);
if (error && !source) {
Exception::throwError(SE_HERE, params.getDisplayName() + ": virtual source cannot be instantiated");
Exception::throwError(SE_HERE, params.getDisplayName() + ": virtual datastore cannot be instantiated");
}
return source;
}
@ -507,7 +507,7 @@ VirtualSyncSource::VirtualSyncSource(const SyncSourceParams &params, SyncConfig
std::string evoSyncSource = getDatabaseID();
BOOST_FOREACH(std::string name, getMappedSources()) {
if (name.empty()) {
throwError(SE_HERE, StringPrintf("configuration of underlying sources contains empty source name: database = '%s'",
throwError(SE_HERE, StringPrintf("configuration of underlying datastores contains empty datastore name: database = '%s'",
evoSyncSource.c_str()));
}
SyncSourceNodes source = config->getSyncSourceNodes(name);
@ -516,7 +516,7 @@ VirtualSyncSource::VirtualSyncSource(const SyncSourceParams &params, SyncConfig
m_sources.push_back(syncSource);
}
if (m_sources.size() != 2) {
throwError(SE_HERE, StringPrintf("configuration of underlying sources must contain exactly one calendar and one todo source (like calendar+todo): database = '%s'",
throwError(SE_HERE, StringPrintf("configuration of underlying datastores must contain exactly one calendar and one todo datastore (like calendar+todo): database = '%s'",
evoSyncSource.c_str()));
}
}

View File

@ -2299,7 +2299,7 @@ class TestSessionAPIsEmptyName(DBusUtil, unittest.TestCase):
self.session.CheckSource("", utf8_strings=True)
except dbus.DBusException, ex:
self.assertEqual(str(ex),
"org.syncevolution.NoSuchSource: '' has no '' source")
"org.syncevolution.NoSuchSource: '' has no '' datastore")
else:
self.fail("no exception thrown")
@ -2309,7 +2309,7 @@ class TestSessionAPIsEmptyName(DBusUtil, unittest.TestCase):
self.session.GetDatabases("", utf8_strings=True)
except dbus.DBusException, ex:
self.assertEqual(str(ex),
"org.syncevolution.NoSuchSource: '' has no '' source")
"org.syncevolution.NoSuchSource: '' has no '' datastore")
else:
self.fail("no exception thrown")
@ -2567,19 +2567,19 @@ class TestSessionAPIsDummy(DBusUtil, unittest.TestCase):
self.session.CheckSource("", utf8_strings=True)
except dbus.DBusException, ex:
self.assertEqual(str(ex),
"org.syncevolution.NoSuchSource: 'dummy-test' has no '' source")
"org.syncevolution.NoSuchSource: 'dummy-test' has no '' datastore")
else:
self.fail("no exception thrown")
def testCheckSourceNoSourceName(self):
"""TestSessionAPIsDummy.testCheckSourceNoSourceName - test the right error is reported when the source doesn't exist """
"""TestSessionAPIsDummy.testCheckSourceNoSourceName - test the right error is reported when the datastore doesn't exist """
self.setupConfig()
try:
self.session.CheckSource("dummy", utf8_strings=True)
except dbus.DBusException, ex:
self.assertEqual(str(ex),
"org.syncevolution.NoSuchSource: 'dummy-test' "
"has no 'dummy' source")
"has no 'dummy' datastore")
else:
self.fail("no exception thrown")
@ -2592,7 +2592,7 @@ class TestSessionAPIsDummy(DBusUtil, unittest.TestCase):
self.session.CheckSource("memo", utf8_strings=True)
except dbus.DBusException, ex:
self.assertEqual(str(ex),
"org.syncevolution.SourceUnusable: The source 'memo' is not usable")
"org.syncevolution.SourceUnusable: The datastore 'memo' is not usable")
else:
self.fail("no exception thrown")
@ -2609,7 +2609,7 @@ class TestSessionAPIsDummy(DBusUtil, unittest.TestCase):
self.fail("no exception thrown")
def testCheckSourceNoBackend(self):
"""TestSessionAPIsDummy.testCheckSourceNoBackend - test the right error is reported when the source is unusable"""
"""TestSessionAPIsDummy.testCheckSourceNoBackend - test the right error is reported when the datastore is unusable"""
self.setupConfig()
config = { "source/memo" : { "backend" : "file",
"databaseFormat" : "text/calendar",
@ -2619,12 +2619,12 @@ class TestSessionAPIsDummy(DBusUtil, unittest.TestCase):
self.session.CheckSource("memo", utf8_strings=True)
except dbus.DBusException, ex:
self.assertEqual(str(ex),
"org.syncevolution.SourceUnusable: The source 'memo' is not usable")
"org.syncevolution.SourceUnusable: The datastore 'memo' is not usable")
else:
self.fail("no exception thrown")
def testCheckSource(self):
"""TestSessionAPIsDummy.testCheckSource - testCheckSource - test all sources are okay"""
"""TestSessionAPIsDummy.testCheckSource - testCheckSource - test all datastores are okay"""
self.setupConfig()
try:
for source in self.sources:
@ -2646,18 +2646,18 @@ class TestSessionAPIsDummy(DBusUtil, unittest.TestCase):
self.session.GetDatabases("", utf8_strings=True)
except dbus.DBusException, ex:
self.assertEqual(str(ex),
"org.syncevolution.NoSuchSource: 'dummy-test' has no '' source")
"org.syncevolution.NoSuchSource: 'dummy-test' has no '' datastore")
else:
self.fail("no exception thrown")
def testGetDatabasesEmpty(self):
"""TestSessionAPIsDummy.testGetDatabasesEmpty - test the right error is reported for non-existing source"""
"""TestSessionAPIsDummy.testGetDatabasesEmpty - test the right error is reported for non-existing datastore"""
self.setupConfig()
try:
databases = self.session.GetDatabases("never_use_this_source_name", utf8_strings=True)
except dbus.DBusException, ex:
self.assertEqual(str(ex),
"org.syncevolution.NoSuchSource: 'dummy-test' has no 'never_use_this_source_name' source")
"org.syncevolution.NoSuchSource: 'dummy-test' has no 'never_use_this_source_name' datastore")
else:
self.fail("no exception thrown")
@ -6195,7 +6195,7 @@ spds/sources/todo/config.txt:# evolutionpassword =
self.assertTrue(out.startswith("List and manipulate databases:\n"))
self.assertEqual(out.find("\nOptions:\n"), -1)
self.assertTrue(out.endswith("Remove item(s):\n" \
" syncevolution --delete-items [--] <config> <source> (<luid> ... | '*')\n\n"))
" syncevolution --delete-items [--] <config> <store> (<luid> ... | '*')\n\n"))
self.assertEqualDiff(specific_error, stripOutput(err))
@property('debug', False)
@ -6855,7 +6855,7 @@ sources/xyz/config.ini:# databasePassword = """)
not always obvious.
When accepting a sync session in a SyncML server (HTTP server), only
sources with sync != disabled are made available to the client,
datastores with sync != disabled are made available to the client,
which chooses the final sync mode based on its own configuration.
When accepting a sync session in a SyncML client (local sync with
the server contacting SyncEvolution on a device), the sync mode
@ -7341,7 +7341,7 @@ syncevolution/default/sources/eds_event/config.ini:backend = calendar
expectSuccess = False)
self.assertEqualDiff('', out)
err = stripOutput(err)
self.assertEqualDiff('[ERROR] error code from SyncEvolution fatal error (local, status 10500): no such source(s): eds_event\n', err)
self.assertEqualDiff('[ERROR] error code from SyncEvolution fatal error (local, status 10500): no such datastore(s): eds_event\n', err)
shutil.rmtree(self.configdir, True)
# allow user to proceed if they wish and possible: here
@ -7350,7 +7350,7 @@ syncevolution/default/sources/eds_event/config.ini:backend = calendar
expectSuccess = False)
self.assertEqualDiff('', out)
err = stripOutput(err)
self.assertEqualDiff('[ERROR] error code from SyncEvolution fatal error (local, status 10500): no such source(s): eds_event\n', err)
self.assertEqualDiff('[ERROR] error code from SyncEvolution fatal error (local, status 10500): no such datastore(s): eds_event\n', err)
shutil.rmtree(self.configdir, True)
# allow user to proceed if they wish: configure exactly the
@ -7961,20 +7961,20 @@ sources/memo/config.ini:type = todo
expectSuccess = False)
# Information about supported modules is optional, depends on compilation of
# SyncEvolution.
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): bar: backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] configuration 'foo' does not exist\n\[ERROR\] source 'bar' does not exist\n\[ERROR\] backend property not set\n''')
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): bar: backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] configuration 'foo' does not exist\n\[ERROR\] datastore 'bar' does not exist\n\[ERROR\] backend property not set\n''')
self.assertEqualDiff('', out)
# "foo" not configured, no source named
out, err, code = self.runCmdline(["--print-items",
"foo"],
expectSuccess = False)
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] configuration 'foo' does not exist\n\[ERROR\] no source selected\n\[ERROR\] backend property not set\n''')
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] configuration 'foo' does not exist\n\[ERROR\] no datastore selected\n\[ERROR\] backend property not set\n''')
self.assertEqualDiff('', out)
# nothing known about source
out, err, code = self.runCmdline(["--print-items"],
expectSuccess = False)
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] no source selected\n\[ERROR\] backend property not set\n''')
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] no datastore selected\n\[ERROR\] backend property not set\n''')
self.assertEqualDiff('', out)
# now create "foo"
@ -7987,7 +7987,7 @@ sources/memo/config.ini:type = todo
out, err, code = self.runCmdline(["--print-items",
"foo"],
expectSuccess = False)
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] no source selected\n\[ERROR\] backend property not set\n''')
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] no datastore selected\n\[ERROR\] backend property not set\n''')
self.assertEqualDiff('', out)
# "foo" configured, but "bar" is not
@ -7995,7 +7995,7 @@ sources/memo/config.ini:type = todo
"foo",
"bar"],
expectSuccess = False)
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): bar: backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] source 'bar' does not exist\n\[ERROR\] backend property not set\n''')
self.assertRegexpMatches(err, r'''\[ERROR\] error code from SyncEvolution error parsing config file \(local, status 20010\): bar: backend not supported (by any of the backend modules \((\S+, )+\S+\) )?or not correctly configured \(backend=select backend databaseFormat= syncFormat=\)\n\[ERROR\] datastore 'bar' does not exist\n\[ERROR\] backend property not set\n''')
self.assertEqualDiff('', out)
# add "bar" source, using file backend
@ -8367,13 +8367,13 @@ END:VCARD''')
out = self.stripSyncTime(out)
self.assertEqualDiff('''[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/addressbook: starting first time sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
Comparison was impossible.
[INFO] @default/addressbook: starting first time sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
Comparison was impossible.
@ -8462,13 +8462,13 @@ no changes
out = self.stripSyncTime(out)
self.assertEqualDiff('''[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/addressbook: starting normal sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
no changes
[INFO] @default/addressbook: starting normal sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
no changes
@ -8544,13 +8544,13 @@ END:VCARD''')
out = self.stripSyncTime(out)
self.assertEqualDiff('''[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/addressbook: starting normal sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
no changes
[INFO] @default/addressbook: starting normal sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
after last sync | current data
@ -8640,13 +8640,13 @@ no changes
out = self.stripSyncTime(out)
self.assertEqualDiff('''[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/addressbook: starting normal sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
no changes
[INFO] @default/addressbook: starting normal sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
after last sync | current data
@ -8751,24 +8751,24 @@ END:VCARD''')
self.assertEqualDiff('''[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/addressbook: starting first time sync, two-way (peer is server)
[INFO remote@client] @client/calendar: starting first time sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
Comparison was impossible.
[INFO remote@client] creating complete data backup of source calendar before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore calendar before sync (enabled with dumpData and needed for printChanges)
*** @client/calendar ***
Comparison was impossible.
[INFO] @default/addressbook: starting first time sync, two-way (peer is client)
[INFO] @default/calendar: starting first time sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
Comparison was impossible.
[INFO] @default/addressbook: started
[INFO] creating complete data backup of source calendar before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore calendar before sync (enabled with dumpData and needed for printChanges)
*** @default/calendar ***
Comparison was impossible.
@ -8867,24 +8867,24 @@ no changes
self.assertEqualDiff('''[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/addressbook: starting normal sync, two-way (peer is server)
[INFO remote@client] @client/calendar: starting normal sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
no changes
[INFO remote@client] creating complete data backup of source calendar before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore calendar before sync (enabled with dumpData and needed for printChanges)
*** @client/calendar ***
no changes
[INFO] @default/addressbook: starting normal sync, two-way (peer is client)
[INFO] @default/calendar: starting normal sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
no changes
[INFO] @default/addressbook: started
[INFO] creating complete data backup of source calendar before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore calendar before sync (enabled with dumpData and needed for printChanges)
*** @default/calendar ***
no changes
@ -8975,18 +8975,18 @@ END:VCARD''')
self.assertEqualDiff('''[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/addressbook: starting normal sync, two-way (peer is server)
[INFO remote@client] @client/calendar: starting normal sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
no changes
[INFO remote@client] creating complete data backup of source calendar before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore calendar before sync (enabled with dumpData and needed for printChanges)
*** @client/calendar ***
no changes
[INFO] @default/addressbook: starting normal sync, two-way (peer is client)
[INFO] @default/calendar: starting normal sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
after last sync | current data
@ -9001,7 +9001,7 @@ END:VCARD END:VCARD
-------------------------------------------------------------------------------
[INFO] @default/addressbook: started
[INFO] creating complete data backup of source calendar before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore calendar before sync (enabled with dumpData and needed for printChanges)
*** @default/calendar ***
no changes
@ -9097,18 +9097,18 @@ no changes
self.assertEqualDiff('''[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/addressbook: starting normal sync, two-way (peer is server)
[INFO remote@client] @client/calendar: starting normal sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
no changes
[INFO remote@client] creating complete data backup of source calendar before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore calendar before sync (enabled with dumpData and needed for printChanges)
*** @client/calendar ***
no changes
[INFO] @default/addressbook: starting normal sync, two-way (peer is client)
[INFO] @default/calendar: starting normal sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
after last sync | current data
@ -9123,7 +9123,7 @@ END:VCARD <
-------------------------------------------------------------------------------
[INFO] @default/addressbook: started
[INFO] creating complete data backup of source calendar before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore calendar before sync (enabled with dumpData and needed for printChanges)
*** @default/calendar ***
no changes
@ -9219,13 +9219,13 @@ no changes
[INFO remote@client] target side of local sync ready
[INFO remote@client] @client/calendar: inactive
[INFO remote@client] @client/addressbook: starting normal sync, two-way (peer is server)
[INFO remote@client] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO remote@client] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@client data changes to be applied during synchronization:
*** @client/addressbook ***
no changes
[INFO] @default/addressbook: starting normal sync, two-way (peer is client)
[INFO] creating complete data backup of source addressbook before sync (enabled with dumpData and needed for printChanges)
[INFO] creating complete data backup of datastore addressbook before sync (enabled with dumpData and needed for printChanges)
@default data changes to be applied during synchronization:
*** @default/addressbook ***
no changes