Merge branch 'FREMANTLE-1-2-99-4' into HARMATTAN-1-2-99-4
This commit is contained in:
commit
c821557d73
17 changed files with 518 additions and 49 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -10,6 +10,7 @@ Makefile
|
|||
Makefile.in
|
||||
|
||||
# top level
|
||||
/INSTALL
|
||||
/autom4te.cache
|
||||
/aclocal.m4
|
||||
/compile
|
||||
|
|
38
NEWS
38
NEWS
|
@ -1,3 +1,41 @@
|
|||
SyncEvolution 1.2.99.3 -> 1.2.99.4, 07.08.2012
|
||||
==============================================
|
||||
|
||||
Another release candidate for SyncEvolution 1.3. Lesson learned:
|
||||
declaring a snapshot as "final" is a good way of luring the hidden bugs
|
||||
into the light. Of course, then another snapshot is needed...
|
||||
|
||||
Details:
|
||||
|
||||
* D-Bus server: fix support for autoSyncDelay > 0
|
||||
|
||||
Auto syncing was not getting triggered when using an autoSyncDelay > 0;
|
||||
by default it is 5 minutes. Thanks to Vladimir Elisseev for reporting
|
||||
this problem.
|
||||
|
||||
* command line: fixed --export <file name>
|
||||
|
||||
When exporting items into a file, the delimiter between items
|
||||
was missing.
|
||||
|
||||
* config: improved 'maxlogdirs' documentation
|
||||
|
||||
The old explanation made it sound like nothing would get deleted by
|
||||
default ("If set, ..."). That's not correct, by default only 10
|
||||
sessions are kept.
|
||||
Also explain the behavior of deleting intermediate sessions first.
|
||||
|
||||
* developers: fixed D-Bus interface XML
|
||||
|
||||
Reverted to Qt 4.x compatible annotations and changed "templateName"
|
||||
to "getTemplate" to make it more obvious what the parameter does.
|
||||
Only relevant for the out-of-tree Qt UI.
|
||||
|
||||
Fixed accidental removal of the "template" parameter in
|
||||
Session.GetNamedConfig(). Was not used in practice, but has to be
|
||||
correct in case that someone wants to use it.
|
||||
|
||||
|
||||
SyncEvolution 1.2.99.2 -> 1.2.99.3, 24.07.2012
|
||||
==============================================
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ dnl Invoke autogen.sh to produce a configure script.
|
|||
#
|
||||
# Starting with the 1.1 release cycle, the rpm-style
|
||||
# .99 pseudo-version number is used to mark a pre-release.
|
||||
AC_INIT([syncevolution], [m4_esyscmd([build/gen-git-version.sh 1.2.99.3])])
|
||||
AC_INIT([syncevolution], [m4_esyscmd([build/gen-git-version.sh 1.2.99.4])])
|
||||
# STABLE_VERSION=1.0.1+
|
||||
AC_SUBST(STABLE_VERSION)
|
||||
|
||||
|
|
|
@ -46,6 +46,26 @@ MaemoCalendarSource::MaemoCalendarSource(int EntryType, int EntryFormat,
|
|||
TrackingSyncSource(params),
|
||||
entry_type(EntryType), entry_format(EntryFormat)
|
||||
{
|
||||
switch (EntryType) {
|
||||
case EVENT:
|
||||
SyncSourceLogging::init(InitList<std::string>("SUMMARY") + "LOCATION",
|
||||
", ",
|
||||
m_operations);
|
||||
break;
|
||||
case TODO:
|
||||
SyncSourceLogging::init(InitList<std::string>("SUMMARY"),
|
||||
", ",
|
||||
m_operations);
|
||||
break;
|
||||
case JOURNAL:
|
||||
SyncSourceLogging::init(InitList<std::string>("SUBJECT"),
|
||||
", ",
|
||||
m_operations);
|
||||
break;
|
||||
default:
|
||||
throwError("invalid calendar type");
|
||||
break;
|
||||
}
|
||||
mc = CMulticalendar::MCInstance();
|
||||
cal = NULL;
|
||||
if (!mc) {
|
||||
|
@ -327,7 +347,20 @@ std::string MaemoCalendarSource::getDescription(const string &uid)
|
|||
int err;
|
||||
CComponent * c = cal->getEntry(uid, entry_type, err);
|
||||
if (c) {
|
||||
ret = c->getSummary();
|
||||
list<string> parts;
|
||||
string str;
|
||||
str = c->getSummary();
|
||||
if (!str.empty()) {
|
||||
parts.push_back(str);
|
||||
}
|
||||
if (entry_type == EVENT)
|
||||
{
|
||||
str = c->getLocation();
|
||||
if (!str.empty()) {
|
||||
parts.push_back(str);
|
||||
}
|
||||
}
|
||||
ret = boost::join(parts, ", ");
|
||||
delete c;
|
||||
}
|
||||
return ret;
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
"URL" - the URL for an HTTP POST.
|
||||
</doc:summary>
|
||||
</doc:doc>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In2" value="QStringMap"/>
|
||||
</arg>
|
||||
|
||||
<arg type="b" name="final">
|
||||
|
|
|
@ -129,7 +129,7 @@
|
|||
"system" - some plain text information about system libraries,
|
||||
"backends" - available backend libraries
|
||||
</doc:summary></doc:doc>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QStringMap"/>
|
||||
</arg>
|
||||
</method>
|
||||
|
||||
|
@ -234,7 +234,7 @@
|
|||
and thus can be used to find all templates refering to the same device.
|
||||
</doc:para>
|
||||
</doc:description></doc:doc>
|
||||
<arg type="b" name="templateName" direction="in">
|
||||
<arg type="b" name="getTemplate" direction="in">
|
||||
<doc:doc><doc:summary>
|
||||
if TRUE, will return template names, otherwise will return
|
||||
configured servers
|
||||
|
@ -331,7 +331,7 @@
|
|||
<arg type="s" name="server" direction="in">
|
||||
<doc:doc><doc:summary>server name</doc:summary></doc:doc>
|
||||
</arg>
|
||||
<arg type="b" name="templateName" direction="in">
|
||||
<arg type="b" name="getTemplate" direction="in">
|
||||
<doc:doc><doc:summary>
|
||||
if TRUE, will return a matching template configuration, otherwise
|
||||
will return a matching server configuration
|
||||
|
@ -342,7 +342,7 @@
|
|||
server (or template) configuration
|
||||
</doc:summary></doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QStringMultiMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QStringMultiMap"/>
|
||||
</method>
|
||||
|
||||
<method name="CheckPresence">
|
||||
|
@ -411,7 +411,7 @@
|
|||
its pair-value won't be included in the dictionary.
|
||||
</doc:description></doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QArrayOfStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QArrayOfStringMap"/>
|
||||
</method>
|
||||
|
||||
<method name="GetDatabases">
|
||||
|
@ -444,7 +444,7 @@
|
|||
</doc:description>
|
||||
</doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QArrayOfDatabases"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QArrayOfDatabases"/>
|
||||
</method>
|
||||
|
||||
<method name="CheckSource">
|
||||
|
@ -585,7 +585,7 @@
|
|||
version of the transport entity.
|
||||
</doc:summary>
|
||||
</doc:doc>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="QStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QStringMap"/>
|
||||
</arg>
|
||||
<arg type="b" name="must_authenticate" direction="in">
|
||||
<doc:doc>
|
||||
|
@ -824,7 +824,7 @@
|
|||
</doc:summary>
|
||||
</doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In5" value="QStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In5" value="QStringMap"/>
|
||||
</signal>
|
||||
|
||||
<method name="InfoResponse">
|
||||
|
@ -853,7 +853,7 @@
|
|||
</doc:summary>
|
||||
</doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In2" value="QStringMap"/>
|
||||
</method>
|
||||
|
||||
<signal name="LogOutput">
|
||||
|
|
|
@ -49,14 +49,14 @@
|
|||
|
||||
<method name="GetConfig">
|
||||
<doc:doc><doc:description>Get the configuration identified by the name given to StartSession()</doc:description></doc:doc>
|
||||
<arg type="b" name="templateName" direction="in">
|
||||
<arg type="b" name="getTemplate" direction="in">
|
||||
<doc:doc><doc:summary>if TRUE, will return a matching template configuration, otherwise will return the stored configuration</doc:summary></doc:doc>
|
||||
</arg>
|
||||
<arg type="a{sa{ss}}" name="configuration" direction="out">
|
||||
<doc:doc><doc:summary>server configuration</doc:summary></doc:doc>
|
||||
<doc:doc><doc:description>See Server.GetConfig() for dictionary description.</doc:description></doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QStringMultiMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QStringMultiMap"/>
|
||||
</method>
|
||||
|
||||
<method name="SetConfig">
|
||||
|
@ -104,7 +104,7 @@
|
|||
<doc:doc><doc:summary>server configuration</doc:summary></doc:doc>
|
||||
<doc:doc><doc:description>See Server.GetConfig() for dictionary description.</doc:description></doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QStringMultiMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In2" value="QStringMultiMap"/>
|
||||
</method>
|
||||
|
||||
<method name="GetNamedConfig">
|
||||
|
@ -115,8 +115,9 @@
|
|||
<arg type="s" name="name" direction="in">
|
||||
<doc:doc><doc:summary>configuration name</doc:summary></doc:doc>
|
||||
</arg>
|
||||
<arg type="b" name="getTemplate" direction="in"/>
|
||||
<arg type="a{sa{ss}}" name="configuration" direction="out"/>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QStringMultiMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QStringMultiMap"/>
|
||||
</method>
|
||||
|
||||
<method name="SetNamedConfig">
|
||||
|
@ -129,7 +130,7 @@
|
|||
<doc:doc><doc:summary>temporary changes of the configuration are currently only supported for the configuration chosen when creating the session</doc:summary></doc:doc>
|
||||
</arg>
|
||||
<arg type="a{sa{ss}}" name="configuration" direction="in"/>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In3" value="QStringMultiMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In3" value="QStringMultiMap"/>
|
||||
</method>
|
||||
|
||||
<method name="GetReports">
|
||||
|
@ -144,7 +145,7 @@
|
|||
<doc:doc><doc:summary>synchronization reports</doc:summary></doc:doc>
|
||||
<doc:doc><doc:description>See Server.GetReports() for array description.</doc:description></doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QArrayOfStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QArrayOfStringMap"/>
|
||||
</method>
|
||||
|
||||
|
||||
|
@ -176,7 +177,7 @@
|
|||
</doc:description>
|
||||
</doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QArrayOfDatabases"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QArrayOfDatabases"/>
|
||||
</method>
|
||||
|
||||
<method name="CheckSource">
|
||||
|
@ -230,7 +231,7 @@
|
|||
<doc:doc><doc:summary>synchronization source modes</doc:summary></doc:doc>
|
||||
<doc:doc><doc:description>Source modes to override the 'mode' variable for specific sources. The dictionary key is source name, value is synchronization mode. Valid synchronization modes are all synchronization modes used in syncevolution server configuration files and the empty string.</doc:description></doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QStringMap"/>
|
||||
</method>
|
||||
|
||||
<method name="Abort">
|
||||
|
@ -317,7 +318,7 @@
|
|||
<doc:doc><doc:summary>Synchronization source status dictionary</doc:summary></doc:doc>
|
||||
<doc:doc><doc:description>Dictionary key is source name. The value structs contain synchronization mode, source status and error code. Valid values for status are the same as for status parameter above. "done" represents a synced source when the whole sync is not done yet.</doc:description></doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out2" value="QSyncStatusMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out2" value="QSyncStatusMap"/>
|
||||
</method>
|
||||
|
||||
<method name="GetProgress">
|
||||
|
@ -329,7 +330,7 @@
|
|||
<doc:doc><doc:summary>Synchronization source progress dictionary</doc:summary></doc:doc>
|
||||
<doc:doc><doc:description>Dictionary key is source name. The value structs contain phase (can be one of "", "preparing", "sending", "receiving"), prepare count, prepare total, send count, send total, receive count and receive total. -1 is used for unknown. Normally only the 'counts' increase but there are cases where the total will increase as well.</doc:description></doc:doc>
|
||||
</arg>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.Out1" value="QSyncProgressMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.Out1" value="QSyncProgressMap"/>
|
||||
</method>
|
||||
|
||||
<method name="Execute">
|
||||
|
@ -344,7 +345,7 @@
|
|||
</arg>
|
||||
<arg type="a{ss}" name="vars" direction="in">
|
||||
<doc:doc><doc:summary>Environment variables in clients</doc:summary></doc:doc>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QStringMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QStringMap"/>
|
||||
</arg>
|
||||
</method>
|
||||
|
||||
|
@ -353,14 +354,14 @@
|
|||
<arg type="s" name="status"/>
|
||||
<arg type="u" name="error"/>
|
||||
<arg type="a{s(ssu)}" name="sources"/>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In2" value="QSyncStatusMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In2" value="QSyncStatusMap"/>
|
||||
</signal>
|
||||
|
||||
<signal name="ProgressChanged">
|
||||
<doc:doc><doc:description>Synchronization progress change. See GetProgress() for argument descriptions.</doc:description></doc:doc>
|
||||
<arg type="i" name="progress"/>
|
||||
<arg type="a{s(siiiiii)}" name="sources"/>
|
||||
<annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="QSyncProgressMap"/>
|
||||
<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QSyncProgressMap"/>
|
||||
</signal>
|
||||
|
||||
</interface>
|
||||
|
|
|
@ -261,7 +261,10 @@ void AutoSyncManager::schedule(const std::string &reason)
|
|||
// Ran too recently, check again in the future. Always
|
||||
// reset timer, because both m_lastSyncTime and m_interval
|
||||
// may have changed.
|
||||
int seconds = (task->m_lastSyncTime + task->m_interval - now).seconds() + 1;
|
||||
//
|
||||
// Adds two seconds just to be on the safe side and not
|
||||
// wake up again too soon.
|
||||
int seconds = (task->m_lastSyncTime + task->m_interval - now).seconds() + 2;
|
||||
SE_LOG_DEBUG(NULL, NULL, "auto sync: %s: interval expires in %ds",
|
||||
configName.c_str(),
|
||||
seconds);
|
||||
|
@ -303,10 +306,12 @@ void AutoSyncManager::schedule(const std::string &reason)
|
|||
}
|
||||
if (!starttime || // some other transport, assumed to be online, use it
|
||||
(*starttime && // present
|
||||
(task->m_delay <= 0 || *starttime + task->m_delay > now))) { // present long enough
|
||||
SE_LOG_DEBUG(NULL, NULL, "auto sync: %s: ready to run via %s",
|
||||
(task->m_delay <= 0 || *starttime + task->m_delay <= now))) { // present long enough
|
||||
SE_LOG_DEBUG(NULL, NULL, "auto sync: %s: ready to run via %s (transport present for %lds > %ds auto sync delay)",
|
||||
configName.c_str(),
|
||||
urlinfo.second.c_str());
|
||||
urlinfo.second.c_str(),
|
||||
(long)(*starttime - now).seconds(),
|
||||
task->m_delay);
|
||||
readyURL = urlinfo.second;
|
||||
break;
|
||||
}
|
||||
|
@ -320,7 +325,7 @@ void AutoSyncManager::schedule(const std::string &reason)
|
|||
urlinfo.second.c_str());
|
||||
} else {
|
||||
// check again after waiting the requested amount of time
|
||||
int seconds = (*starttime + task->m_delay - now).seconds() + 1;
|
||||
int seconds = (*starttime + task->m_delay - now).seconds() + 2;
|
||||
SE_LOG_DEBUG(NULL, NULL, "auto sync: %s: presence delay of transport for %s expires in %ds",
|
||||
configName.c_str(),
|
||||
urlinfo.second.c_str(),
|
||||
|
|
|
@ -1772,7 +1772,7 @@ class Watch : private boost::noncopyable
|
|||
{
|
||||
}
|
||||
|
||||
virtual void setCallback(const boost::function<void (void)> &callback)
|
||||
void setCallback(const boost::function<void (void)> &callback)
|
||||
{
|
||||
m_callback = callback;
|
||||
if (m_called && m_callback) {
|
||||
|
|
|
@ -1521,7 +1521,7 @@ bool Cmdline::run() {
|
|||
haveNewline = true;
|
||||
} else {
|
||||
// write to file
|
||||
*out << item;
|
||||
*out << delimiter << item;
|
||||
haveNewline = boost::ends_with(item, "\n");
|
||||
}
|
||||
haveItem = true;
|
||||
|
|
|
@ -1263,12 +1263,14 @@ static ConfigProperty syncPropLogDir("logdir",
|
|||
"if \"none\", then no backups of the databases are made and any\n"
|
||||
"output is printed directly to the screen");
|
||||
static UIntConfigProperty syncPropMaxLogDirs("maxlogdirs",
|
||||
"Unless this option is set, SyncEvolution will never delete\n"
|
||||
"anything in the \"logdir\". If set, the oldest directories and\n"
|
||||
"all their content will be removed after a successful sync\n"
|
||||
"to prevent the number of log directories from growing beyond\n"
|
||||
"the given limit.",
|
||||
"10");
|
||||
"Controls how many session directories are kept at most in the logdir.\n"
|
||||
"Unless set to zero, SyncEvolution will remove old directories and\n"
|
||||
"all their content to prevent the number of log directories from\n"
|
||||
"growing beyond the given limit. It tries to be intelligent and will\n"
|
||||
"remove sessions in which nothing interesting happened (no errors,\n"
|
||||
"no data changes) in favor of keeping sessions where something\n"
|
||||
"happened, even if those sessions are older.",
|
||||
"10");
|
||||
static UIntConfigProperty syncPropLogLevel("loglevel",
|
||||
"level of detail for log messages:\n"
|
||||
"- 0 (or unset) = INFO messages without log file, DEBUG with log file\n"
|
||||
|
|
|
@ -39,7 +39,7 @@ trap atexit EXIT
|
|||
E_CAL_PID=
|
||||
E_BOOK_PID=
|
||||
case "$@" in *valgrind*) prefix=`echo $@ | perl -p -e 's;.*?(\S*/?valgrind\S*).*;$1;'`;;
|
||||
*syncevolution\ *|*client-test\ *|*bash*|*test-dbus.py\ *|*gdb\ *) prefix=env;;
|
||||
*setup-syncevolution.sh*|*syncevolution\ *|*client-test\ *|*bash*|*test-dbus.py\ *|*gdb\ *) prefix=env;;
|
||||
*) prefix=;; # don't start EDS
|
||||
esac
|
||||
akonadi=$prefix
|
||||
|
@ -64,7 +64,7 @@ else
|
|||
DBUS_SESSION_SH_EDS_BASE=
|
||||
fi
|
||||
|
||||
sleep $SLEEP
|
||||
[ "$SLEEP" ] && sleep $SLEEP
|
||||
|
||||
# run program
|
||||
"$@"
|
||||
|
|
|
@ -662,7 +662,7 @@ sub NormalizeItem {
|
|||
s/^(FN|X-EVOLUTION-FILE-AS|CATEGORIES)(;[^:;\n]*)*:.*\r?\n?//gm;
|
||||
}
|
||||
|
||||
if ($googleeas) {
|
||||
if ($googleeas || $exchange) {
|
||||
# temporarily ignore modified properties
|
||||
s/^(BDAY|X-ANNIVERSARY)(;[^:;\n]*)*:.*\r?\n?//gm;
|
||||
}
|
||||
|
|
32
test/test-dbus-concurrency.txt
Normal file
32
test/test-dbus-concurrency.txt
Normal file
|
@ -0,0 +1,32 @@
|
|||
master:
|
||||
|
||||
testConcurrency (__main__.TestLocalSync)
|
||||
TestLocalSync.testConcurrency - D-Bus server must remain responsive while sync runs ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 1 test in 7.814s
|
||||
|
||||
$ cat temp-test-dbus/cache/syncevolution/server-2012-01-21-20-44/status.ini
|
||||
status = 20017
|
||||
start = 1327175092, 2012-01-21 20:44:52 +0100
|
||||
end = 1327175094, 2012-01-21 20:44:54 +0100
|
||||
source-addressbook-mode = disabled
|
||||
source-addressbook-first = false
|
||||
source-addressbook-resume = false
|
||||
source-addressbook-status = 0
|
||||
source-addressbook-backup-before = -1
|
||||
source-addressbook-backup-after = -1
|
||||
|
||||
|
||||
[2012-01-21 20:44:52.365] parent: read select on message channel 0.000000000s
|
||||
[2012-01-21 20:44:54.111] quit transport as requested as part of GLib event loop
|
||||
[2012-01-21 20:44:54.111] aborting after TransportAgent::FAILED as requested by user
|
||||
|
||||
=> source not active, no error in it
|
||||
=> abort detected in loop, not in transport
|
||||
|
||||
|
||||
for-master/fork-local-sync:
|
||||
|
||||
sync *runs* ?!
|
||||
|
|
@ -2518,8 +2518,7 @@ class TestSessionAPIsDummy(DBusUtil, unittest.TestCase):
|
|||
Timeout.removeTimeout(timeout_handler)
|
||||
self.assertEqual(self.lastState, "done")
|
||||
|
||||
@timeout(60)
|
||||
def testAutoSyncNetworkFailure(self):
|
||||
def doAutoSyncNetworkFailure(self):
|
||||
"""TestSessionAPIsDummy.testAutoSyncNetworkFailure - test that auto-sync is triggered, fails due to (temporary?!) network error here"""
|
||||
self.setupConfig()
|
||||
# enable auto-sync
|
||||
|
@ -2529,7 +2528,7 @@ class TestSessionAPIsDummy(DBusUtil, unittest.TestCase):
|
|||
# or any other D-Bus test.
|
||||
config[""]["syncURL"] = "http://no-such-domain.foobar"
|
||||
config[""]["autoSync"] = "1"
|
||||
config[""]["autoSyncDelay"] = "0"
|
||||
config[""]["autoSyncDelay"] = "1"
|
||||
config[""]["autoSyncInterval"] = "10s"
|
||||
config[""]["password"] = "foobar"
|
||||
self.session.SetConfig(True, False, config, utf8_strings=True)
|
||||
|
@ -2599,6 +2598,17 @@ class TestSessionAPIsDummy(DBusUtil, unittest.TestCase):
|
|||
# done as part of post-processing in runTest()
|
||||
self.runTestDBusCheck = checkDBusLog
|
||||
|
||||
@timeout(60)
|
||||
def testAutoSyncNetworkFailure(self):
|
||||
"""TestSessionAPIsDummy.testAutoSyncNetworkFailure - test that auto-sync is triggered, fails due to (temporary?!) network error here"""
|
||||
self.doAutoSyncNetworkFailure()
|
||||
|
||||
@timeout(60)
|
||||
@property("ENV", "DBUS_TEST_CONNMAN=session DBUS_TEST_NETWORK_MANAGER=session")
|
||||
def testAutoSyncNoNetworkManager(self):
|
||||
"""TestSessionAPIsDummy.testAutoSyncNoNetworkManager - test that auto-sync is triggered despite having neither NetworkManager nor Connman, fails due to (temporary?!) network error here"""
|
||||
self.doAutoSyncNetworkFailure()
|
||||
|
||||
@timeout(60)
|
||||
def doAutoSyncLocalConfigError(self, notifyLevel):
|
||||
self.setupConfig()
|
||||
|
@ -6766,6 +6776,13 @@ END:VCARD
|
|||
self.assertNoErrors(err)
|
||||
self.assertEqualDiff(john + "\n" + joan, out)
|
||||
|
||||
# export all into file
|
||||
exportfile = xdg_root + "/export.vcf"
|
||||
out, err, code = self.runCmdline(["--export", exportfile,
|
||||
"foo", "bar"])
|
||||
self.assertNoErrors(err)
|
||||
self.assertEqualDiff(john + "\n" + joan, open(exportfile).read())
|
||||
|
||||
# export one
|
||||
out, err, code = self.runCmdline(["--export", "-",
|
||||
"backend=file",
|
||||
|
@ -6781,6 +6798,13 @@ END:VCARD
|
|||
self.assertNoErrors(err)
|
||||
self.assertEqualDiff(john, out)
|
||||
|
||||
# export one into file
|
||||
exportfile = xdg_root + "/export.vcf"
|
||||
out, err, code = self.runCmdline(["--export", exportfile,
|
||||
"foo", "bar", "1"])
|
||||
self.assertNoErrors(err)
|
||||
self.assertEqualDiff(john, open(exportfile).read())
|
||||
|
||||
# Copied from C++ test:
|
||||
# TODO: check configuration of just the source as @foo bar
|
||||
# without peer
|
||||
|
@ -6879,10 +6903,11 @@ END:VCARD
|
|||
# The error message is not particularly informative, but the error should
|
||||
# not occur, so let it be... Also, the "connection is closed" error only
|
||||
# occurs occasionally.
|
||||
out = out.replace('''[ERROR] The connection is closed
|
||||
''', '')
|
||||
self.assertEqualDiff(out, '''[ERROR syncevo-dbus-server] child process quit because of signal 9
|
||||
''')
|
||||
self.assertNotEqual(out, '')
|
||||
self.assertTrue('''[ERROR] The connection is closed
|
||||
''' in out or
|
||||
'''[ERROR syncevo-dbus-server] child process quit because of signal 9
|
||||
''' in out)
|
||||
|
||||
@property("debug", False)
|
||||
@property("ENV", "SYNCEVOLUTION_LOCAL_CHILD_DELAY2=60")
|
||||
|
@ -6937,7 +6962,7 @@ END:VCARD
|
|||
# occurs occasionally.
|
||||
if out.startswith('[ERROR] child process quit because of signal 9'):
|
||||
out = out.replace('''[ERROR] sending message to child failed: The connection is closed
|
||||
-''', '')
|
||||
''', '')
|
||||
self.assertEqualDiff(out, '''[ERROR] child process quit because of signal 9
|
||||
[ERROR] local transport failed: child process quit because of signal 9
|
||||
[INFO] Transport giving up after x retries and y:zzmin
|
||||
|
|
223
test/testcases/eds_event.ics.googleactivesync.tem.patch
Normal file
223
test/testcases/eds_event.ics.googleactivesync.tem.patch
Normal file
|
@ -0,0 +1,223 @@
|
|||
@@ -2,19 +2,16 @@
|
||||
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VTIMEZONE
|
||||
-TZID:/softwarestudio.org/Olson_20011030_5/Europe/Berlin
|
||||
-X-LIC-LOCATION:Europe/Berlin
|
||||
+TZID:Standard Timezone
|
||||
BEGIN:DAYLIGHT
|
||||
TZOFFSETFROM:+0100
|
||||
TZOFFSETTO:+0200
|
||||
-TZNAME:CEST
|
||||
DTSTART:19700329T020000
|
||||
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
|
||||
END:DAYLIGHT
|
||||
BEGIN:STANDARD
|
||||
TZOFFSETFROM:+0200
|
||||
TZOFFSETTO:+0100
|
||||
-TZNAME:CET
|
||||
DTSTART:19701025T030000
|
||||
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
|
||||
END:STANDARD
|
||||
@@ -23,9 +20,9 @@
|
||||
SUMMARY:phone meeting
|
||||
DESCRIPTION:let's talk
|
||||
CATEGORIES:MEETING
|
||||
-DTEND;TZID=/softwarestudio.org/Olson_20011030_5/Europe/Berlin:
|
||||
+DTEND;TZID=Standard Timezone:
|
||||
20060406T163000
|
||||
-DTSTART;TZID=/softwarestudio.org/Olson_20011030_5/Europe/Berlin:
|
||||
+DTSTART;TZID=Standard Timezone:
|
||||
20060406T160000
|
||||
UID:20060406T211449Z-4562-727-1-63@gollum
|
||||
DTSTAMP:20060406T211449Z
|
||||
@@ -35,6 +32,7 @@
|
||||
CLASS:PUBLIC
|
||||
TRANSP:OPAQUE
|
||||
SEQUENCE:1
|
||||
+RRULE:FREQ=DAILY;INTERVAL=1
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
|
||||
@@ -53,7 +51,7 @@
|
||||
CLASS:PUBLIC
|
||||
CREATED:20060416T203724Z
|
||||
LAST-MODIFIED:20060416T203758Z
|
||||
-RRULE:FREQ=WEEKLY;UNTIL=20060427T173000Z;INTERVAL=1;BYDAY=TH
|
||||
+RRULE:FREQ=WEEKLY;UNTIL=20060427T170000Z;INTERVAL=1;BYDAY=TH
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
|
||||
@@ -90,7 +88,7 @@
|
||||
CLASS:PUBLIC
|
||||
CREATED:20060416T203924Z
|
||||
LAST-MODIFIED:20060416T203949Z
|
||||
-RRULE:FREQ=MONTHLY;INTERVAL=1;UNTIL=20060606T173000Z
|
||||
+RRULE:BYMONTHDAY=6;FREQ=MONTHLY;INTERVAL=1;UNTIL=20060606T173000Z
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
|
||||
@@ -106,7 +104,7 @@
|
||||
SEQUENCE:2
|
||||
SUMMARY:recurrence\, yearly\, two times
|
||||
CLASS:PUBLIC
|
||||
-RRULE:FREQ=YEARLY;INTERVAL=1;UNTIL=20070406T180000Z
|
||||
+RRULE:BYMONTH=4;BYMONTHDAY=6;FREQ=YEARLY;INTERVAL=1;UNTIL=20070406T180000Z
|
||||
CREATED:20060416T204021Z
|
||||
LAST-MODIFIED:20060416T204021Z
|
||||
END:VEVENT
|
||||
@@ -193,11 +191,28 @@
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
VERSION:2.0
|
||||
+BEGIN:VTIMEZONE
|
||||
+TZID:(UTC-05:00) Eastern Time (US & C
|
||||
+BEGIN:STANDARD
|
||||
+DTSTART:19701101T020000
|
||||
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
|
||||
+TZOFFSETFROM:-0400
|
||||
+TZOFFSETTO:-0500
|
||||
+TZNAME:(UTC-05:00) Eastern Time (US & C
|
||||
+END:STANDARD
|
||||
+BEGIN:DAYLIGHT
|
||||
+DTSTART:19700308T020000
|
||||
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
|
||||
+TZOFFSETFROM:-0500
|
||||
+TZOFFSETTO:-0400
|
||||
+TZNAME:(UTC-05:00) Eastern Time (US & C
|
||||
+END:DAYLIGHT
|
||||
+END:VTIMEZONE
|
||||
BEGIN:VEVENT
|
||||
UID:20060416T204136Z-4272-727-1-247@gollum
|
||||
DTSTAMP:20060416T204136Z
|
||||
-DTSTART:20060406T190000Z
|
||||
-DTEND:20060406T193000Z
|
||||
+DTSTART;TZID="(UTC-05:00) Eastern Time (US & C":20060406T150000
|
||||
+DTEND;TZID="(UTC-05:00) Eastern Time (US & C":20060406T153000
|
||||
TRANSP:TRANSPARENT
|
||||
SEQUENCE:4
|
||||
SUMMARY:all fields
|
||||
@@ -218,7 +233,7 @@
|
||||
BEGIN:VALARM
|
||||
X-EVOLUTION-ALARM-UID:20060416T204833Z-4250-727-1-85@gollum
|
||||
ACTION:DISPLAY
|
||||
-DESCRIPTION:This is an event reminder
|
||||
+DESCRIPTION:Reminder
|
||||
TRIGGER;VALUE=DURATION;RELATED=START:-PT1H
|
||||
END:VALARM
|
||||
END:VEVENT
|
||||
@@ -228,29 +243,6 @@
|
||||
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
-UID:20060416T204922Z-4272-727-1-250@gollum
|
||||
-DTSTAMP:20060416T204922Z
|
||||
-DTSTART:20060406T193000Z
|
||||
-DTEND:20060406T200000Z
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:2
|
||||
-CATEGORIES:BUSINESS,MEETING
|
||||
-SUMMARY:meeting invitation
|
||||
-CLASS:PUBLIC
|
||||
-ORGANIZER;CN=Patrick Ohly:MAILTO:Patrick.Ohly@gmx.de
|
||||
-ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;
|
||||
- RSVP=TRUE;CN=Patrick Ohly;LANGUAGE=en:MAILTO:Patrick.Ohly@gmx.de
|
||||
-ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;
|
||||
- RSVP=TRUE;LANGUAGE=en:MAILTO:john@bar.com
|
||||
-CREATED:20060416T205003Z
|
||||
-LAST-MODIFIED:20060416T205003Z
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
||||
-
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VEVENT
|
||||
UID:20080407T193125Z-19554-727-1-50@gollum
|
||||
DTSTAMP:20080407T193125Z
|
||||
DTSTART:20080406T090000Z
|
||||
@@ -260,7 +252,7 @@
|
||||
SUMMARY:Recurring
|
||||
DESCRIPTION:recurs each Sonday\, 10 times
|
||||
CLASS:PUBLIC
|
||||
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU;UNTIL=20080608T090000Z
|
||||
+RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU;COUNT=10
|
||||
CREATED:20080407T193241Z
|
||||
LAST-MODIFIED:20080407T193241
|
||||
END:VEVENT
|
||||
@@ -341,75 +333,3 @@
|
||||
DESCRIPTION:second instance modified\, single detached recurrence
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
-
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VEVENT
|
||||
-UID:20080407T193125Z-19554-727-1-50-YY@gollum
|
||||
-DTSTAMP:20080407T193125Z
|
||||
-DTSTART:20080413T090000Z
|
||||
-DTEND:20080413T093000Z
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:7
|
||||
-SUMMARY:Recurring 3: Modified
|
||||
-CLASS:PUBLIC
|
||||
-CREATED:20080407T193241Z
|
||||
-LAST-MODIFIED:20080407T193647
|
||||
-RECURRENCE-ID:20080413T090000Z
|
||||
-DESCRIPTION:second instance modified
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
||||
-
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VEVENT
|
||||
-UID:20080407T193125Z-19554-727-1-50-YY@gollum
|
||||
-DTSTAMP:20080407T193125Z
|
||||
-DTSTART:20080420T100000Z
|
||||
-DTEND:20080420T103000Z
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:7
|
||||
-SUMMARY:Recurring 3: Modified II
|
||||
-CLASS:PUBLIC
|
||||
-CREATED:20080407T193241Z
|
||||
-LAST-MODIFIED:20080407T193647
|
||||
-RECURRENCE-ID:20080420T090000Z
|
||||
-DESCRIPTION:third instance modified\, different time
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
||||
-
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VTIMEZONE
|
||||
-TZID:EST/EDT
|
||||
-BEGIN:STANDARD
|
||||
-TZOFFSETFROM:-0400
|
||||
-TZOFFSETTO:-0500
|
||||
-TZNAME:EST
|
||||
-DTSTART:19671029T020000
|
||||
-RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=-1SU
|
||||
-END:STANDARD
|
||||
-BEGIN:DAYLIGHT
|
||||
-TZOFFSETFROM:-0500
|
||||
-TZOFFSETTO:-0400
|
||||
-TZNAME:EDT
|
||||
-DTSTART:19870405T020000
|
||||
-RRULE:FREQ=MONTHLY;INTERVAL=12;BYDAY=1SU
|
||||
-END:DAYLIGHT
|
||||
-END:VTIMEZONE
|
||||
-BEGIN:VEVENT
|
||||
-UID:20060416T205224Z-4272-727-1-251@gollum
|
||||
-DTSTAMP:20060416T205224Z
|
||||
-DTSTART;TZID=EST/EDT:20060406T140000
|
||||
-DTEND;TZID=EST/EDT:20060406T143000
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:2
|
||||
-SUMMARY:timezone New York with custom definition for 2006
|
||||
-CLASS:PUBLIC
|
||||
-CREATED:20060416T205301Z
|
||||
-LAST-MODIFIED:20060416T205301Z
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
109
test/testcases/eds_event.ics.radicale.tem.patch
Normal file
109
test/testcases/eds_event.ics.radicale.tem.patch
Normal file
|
@ -0,0 +1,109 @@
|
|||
@@ -270,44 +270,6 @@
|
||||
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
-UID:20080407T193125Z-19554-727-1-50@gollum
|
||||
-DTSTAMP:20080407T193125Z
|
||||
-DTSTART:20080413T090000Z
|
||||
-DTEND:20080413T093000Z
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:7
|
||||
-SUMMARY:Recurring: Modified
|
||||
-CLASS:PUBLIC
|
||||
-CREATED:20080407T193241Z
|
||||
-LAST-MODIFIED:20080407T193647
|
||||
-RECURRENCE-ID:20080413T090000Z
|
||||
-DESCRIPTION:second instance modified
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
||||
-
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VEVENT
|
||||
-UID:20080407T193125Z-19554-727-1-50@gollum
|
||||
-DTSTAMP:20080407T193125Z
|
||||
-DTSTART:20080420T100000Z
|
||||
-DTEND:20080420T103000Z
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:7
|
||||
-SUMMARY:Recurring: Modified II
|
||||
-CLASS:PUBLIC
|
||||
-CREATED:20080407T193241Z
|
||||
-LAST-MODIFIED:20080407T193647
|
||||
-RECURRENCE-ID:20080420T090000Z
|
||||
-DESCRIPTION:third instance modified\, different time
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
||||
-
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VEVENT
|
||||
UID:20080407T193125Z-19554-727-1-50-XX@gollum
|
||||
DTSTAMP:20080407T193125Z
|
||||
DTSTART:20080406T090000Z
|
||||
@@ -323,63 +285,6 @@
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VEVENT
|
||||
-UID:20080407T193125Z-19554-727-1-50-XX@gollum
|
||||
-DTSTAMP:20080407T193125Z
|
||||
-DTSTART:20080413T090000Z
|
||||
-DTEND:20080413T093000Z
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:7
|
||||
-SUMMARY:Recurring 2: Modified
|
||||
-CLASS:PUBLIC
|
||||
-CREATED:20080407T193241Z
|
||||
-LAST-MODIFIED:20080407T193647
|
||||
-RECURRENCE-ID:20080413T090000Z
|
||||
-DESCRIPTION:second instance modified\, single detached recurrence
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
||||
-
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VEVENT
|
||||
-UID:20080407T193125Z-19554-727-1-50-YY@gollum
|
||||
-DTSTAMP:20080407T193125Z
|
||||
-DTSTART:20080413T090000Z
|
||||
-DTEND:20080413T093000Z
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:7
|
||||
-SUMMARY:Recurring 3: Modified
|
||||
-CLASS:PUBLIC
|
||||
-CREATED:20080407T193241Z
|
||||
-LAST-MODIFIED:20080407T193647
|
||||
-RECURRENCE-ID:20080413T090000Z
|
||||
-DESCRIPTION:second instance modified
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
||||
-
|
||||
-BEGIN:VCALENDAR
|
||||
-PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
-VERSION:2.0
|
||||
-BEGIN:VEVENT
|
||||
-UID:20080407T193125Z-19554-727-1-50-YY@gollum
|
||||
-DTSTAMP:20080407T193125Z
|
||||
-DTSTART:20080420T100000Z
|
||||
-DTEND:20080420T103000Z
|
||||
-TRANSP:OPAQUE
|
||||
-SEQUENCE:7
|
||||
-SUMMARY:Recurring 3: Modified II
|
||||
-CLASS:PUBLIC
|
||||
-CREATED:20080407T193241Z
|
||||
-LAST-MODIFIED:20080407T193647
|
||||
-RECURRENCE-ID:20080420T090000Z
|
||||
-DESCRIPTION:third instance modified\, different time
|
||||
-END:VEVENT
|
||||
-END:VCALENDAR
|
||||
-
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
|
||||
VERSION:2.0
|
Loading…
Reference in a new issue