# Generated by configure. Do no edit.
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * NEWS:
+ * configure-pre.in:
+
+ NEWS, configure: SyncEvolution 1.1
+
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/sys.supp:
+
+ nightly testing: ignore valgrind report in libsynthesis
+
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * test/evo.supp:
+
+ nightly testing: relaxed leak checking for ecal/ebook (BMC #1007)
+
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSource.cpp:
+
+ KCalExtended: workaround for importing custom time zones
+
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSource.cpp:
+
+ KCalExtended: avoid partial loading to work around issues with it
+
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSource.cpp:
+
+ KCalExtended: ignore request to remove non-existant event
+
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSourceRegister.cpp:
+
+ KCalExtended: disable unsupported linked item tests
+
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/SyncSource.h:
+ * test/ClientTest.cpp:
+
+ client-test: replaced compile-time LINKED_ITEMS_RELAXED_SEMANTIC
+ with ClientTestConfig::linkedItemsRelaxedSemantic
+
+2010-10-26 Patrick Ohly <patrick.ohly@intel.com>
+
+ * README.rst:
+ * src/syncevo/Cmdline.cpp:
+ * src/syncevo/readme2c.pl:
+
+ command line: --delete-items ... * deletes all items
+
+2010-10-20 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo-dbus-server.cpp:
+
+ syncevo-dbus-server: incorrect Presence status after config
+ change (BMC #8453)
+
+2010-10-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/syncevo/SmartPtr.h:
+ * src/syncevo/SoupTransportAgent.cpp:
+
+ fixed compiler warnings
+
+2010-10-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSourceRegister.cpp:
+
+ KCalExtended: updated mkcal backend description
+
+2010-10-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSource.cpp:
+
+ KCalExtended: fixed compiler warning
+
+2010-10-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSource.cpp:
+
+ KCalExtended: do not use Tracker for custom database file
+
+2010-09-28 Qiankun Miao <qiankun.miao@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSource.cpp:
+ * src/backends/kcalextended/KCalExtendedSourceRegister.cpp:
+
+ KCalExtended: select notebook (BMC #6898)
+
+2010-10-04 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/kcalextended/KCalExtendedSource.cpp:
+
+ KCalExtended: comment clarification for created()/CREATED
+
+2010-10-01 Patrick Ohly <patrick.ohly@intel.com>
+
+ * NEWS:
+
+ NEWS: fixed bug numbers, added BMC #7091
+
+2010-10-01 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/backends/qtcontacts/configure-sub.in:
+
+ autotools: fixed QtContacts compilation
+
+2010-10-01 Patrick Ohly <patrick.ohly@intel.com>
+
+ * configure-post.in:
+
+ autotools: added missing quotation marks
+
2010-09-30 Patrick Ohly <patrick.ohly@intel.com>
* NEWS:
-SyncEvolution 1.0.1 -> 1.1, xxxxxxxxxx
+SyncEvolution 1.0.1 -> 1.1, 26.10.2010
======================================
An incremental update, resolving issues where the fixes would have
been too intrusive for a 1.0.x release. In particular compatibility
-with Nokia phones was improved. Some new features were also included.
+with Nokia phones was improved. Some new features were also included
+(command line options for manipulating items, backends for MeeGo PIM
+storages).
Details:
-* Nokia phones: avoid data loss in two-way sync due to X-EVOLUTION-UI-SLOT (MBC #2566)
+* bug fix in sync-ui: wrong direction of one-way data transfers with devices (BMC #7091)
+* bug fix in syncevo-dbus-server: incorrect Presence status after config change (BMC #8453)
+ Shows up in sync-ui as "'Sync Now' button active after creating a config while offline".
+* sync-ui (GTK version): app is now listed as "SyncEvolution (GTK)" under "Office"
+* Nokia phones: avoid data loss in two-way sync due to X-EVOLUTION-UI-SLOT (BMC #2566)
* Nokia phones: alarm times in UTC, sending PHOTO (BMC #1657, #5860)
* included all phone templates submitted to syncevolution.org Wiki (BMC #5727)
* syncevo-phone-config: set consumerReady in output, more useful for Wiki (BMC #3803)
-* workaround for D-Bus timeouts in EDS libecal/libebook (MBC #4026)
-* sync-ui (GTK version): app is now listed as "SyncEvolution (GTK)" under "Office"
+* workaround for D-Bus timeouts in EDS libecal/libebook (BMC #4026)
* added generic command line options for importing, exporting, updating, listing
and deleting items in the different backends (http://syncevolution.org/blogs/pohly/2010/manipulate-evolution-kcalextendedmkcal-qtcontacts-pim-items-uniform-command-line)
* added backends for mKCal and QtContacts (MeeGo PIM storage),
* creating and configuring sources in a context (without peer-specific
properties) is now supported
* improved documentation: README.rst, man page, and --help output
-* fixed some compile issues (MBC #6367), improved nightly testing
+* fixed some compile issues (BMC #6367), improved nightly testing
SyncEvolution 1.0 -> 1.0.1, 16.07.2010
* compile fix for FC 13 (and possibly others): use private copy of gdbus (BMC #3556)
-* sync-ui: prevent overwriting device configs by accident (MBC #3566,1194)
+* sync-ui: prevent overwriting device configs by accident (BMC #3566,1194)
Setting up a phone used the template name as config name and overwrote
an existing configuration of another phone that was created using that
same template. Now the code uses the Bluetooth device name as set on the
properties before importing them (MB #10458)
* desknow.com works when switching to SyncMLVersion = 1.1
* Funambol, Memotoo (and probably others): preserve meeting series when
- receiving update for detached recurrence (MBC #1916)
+ receiving update for detached recurrence (BMC #1916)
Evolution:
* addressbook backend: avoid picking CouchDB, second try (MB #7877)
* message resending helps under unreliable network connectivity ("RetryInterval")
* full support for suspend&resume in SyncEvolution client to SyncEvolution or
Synthesis server syncs
-* better handling of certain third-party time zone definitions (MBC #1332)
+* better handling of certain third-party time zone definitions (BMC #1332)
Improved GTK sync-UI:
* revised config screen: all in one list where entries can be expanded,
operations done by other clients; for testing purposes (like
running a client which talks to a local server in the daemon) it is
still possible to ignore the daemon (--daemon=no, MB #5043)
-* revised README, now also available as man page (MBC #690)
+* revised README, now also available as man page (BMC #690)
Redesigned and reimplemented D-Bus API, used by sync-UI and command line:
* central syncevo-dbus-server controls configurations and sync sessions:
Bug fixes and new features:
-* Configuration templates are stored in a single file (MBC #1208).
+* Configuration templates are stored in a single file (BMC #1208).
New templates (like something downloaded from http://syncevolution.org/wiki)
can be dropped into $HOME/.config/syncevolution-templates using an arbitrary
file name.
* Progress and per-source status are now also reported and recorded when
- running in server mode (MBC #1359). There are still several limitations
+ running in server mode (BMC #1359). There are still several limitations
(sync mode not reported, no information about sent/received/processed items
- while the sync runs, see MBC #2786).
-* Better handling of certain third-party time zone definitions (MBC #1332).
+ while the sync runs, see BMC #2786).
+* Better handling of certain third-party time zone definitions (BMC #1332).
Better logging to track down such problems.
-* D-Bus server + command line: return error code when failed (MBC #2193)
+* D-Bus server + command line: return error code when failed (BMC #2193)
* syncevo-phone-config: simplified command line options, several bug fixes
- (syntax error, incorrect handling of calendar+todo, MBC #1197)
-* Revised README, now also available as man page (MBC #690). Conversion of D-Bus API
- documentation into .html page (MBC #1745).
+ (syntax error, incorrect handling of calendar+todo, BMC #1197)
+* Revised README, now also available as man page (BMC #690). Conversion of D-Bus API
+ documentation into .html page (BMC #1745).
* Funambol, Memotoo (and probably others): preserve meeting series when
- receiving update for detached recurrence (MBC #1916)
-* Fix for potential out-of-bounds memory access (MBC #1007).
+ receiving update for detached recurrence (BMC #1916)
+* Fix for potential out-of-bounds memory access (BMC #1007).
* HTTP server: fix for potential crash when second session was requested while an
older one was still running, initial sync was done without libical time zone
- information and thus may have mismatched times (MBC #2435)
-* Nokia E55: convert alarm times (MBC #1657). This is done via a new remote rule
+ information and thus may have mismatched times (BMC #2435)
+* Nokia E55: convert alarm times (BMC #1657). This is done via a new remote rule
in /usr/share/syncevolution/xml/remoterules/server/46_E55.xml
If another phone needs the same treatment, then copy that file to
~/.config/syncevolution-xml/remoterules/server and edit the <model> element.
-* GTK GUI: styling fix (MBC #1372), updated toolbar for MeeGo 1.0 (MBC #1970),
+* GTK GUI: styling fix (BMC #1372), updated toolbar for MeeGo 1.0 (BMC #1970),
avoid duplicating configs when selecting a config created by syncevo-phone-config
- or the command line (MBC #1266), scroll bars for emergency window (MBC #1296),
+ or the command line (BMC #1266), scroll bars for emergency window (BMC #1296),
avoid compile problem on Fedora Core 13 due to name collision with system sync()
call, updated translations.
------------------------------------------------
:Manual section: 1
-:Version: 1.0.99.7
-:Date: 2010-09-30
+:Version: 1.1
+:Date: 2010-10-26
SYNOPSIS
========
syncevolution [--delimiter <string>|none] --update <file>|- <config> <source> <luid> ...
Remove item(s):
- syncevolution --delete-items <config> <source> <luid> ...
+ syncevolution --delete-items <config> <source> (<luid> ... | \*)
DESCRIPTION
===========
syncevolution [--delimiter <string>|none] --import <dir>|<file>|- <config> <source>
syncevolution --update <dir> <config> <source>
syncevolution [--delimiter <string>|none] --update <file>|- <config> <source> <luid> ...
- syncevolution --delete-items <config> <source> <luid> ...
+ syncevolution --delete-items <config> <source> (<luid> ... | *)
Restore depends on the specific format of the automatic backups
created by SyncEvolution. Arbitrary access to item data is provided
with additional options. <luid> here is the unique local identifier
assigned to each item in the source, transformed so that it contains
-only alphanumeric characters, dash and underscore.
+only alphanumeric characters, dash and underscore. A star * in
+--delete-items selects all items for deletion.
<config> and <source> must be given, but they do not have to refer to
existing configurations. In that case, the desired backend and must be
typically leads to an ERROR message, but is not reflected in a
non-zero result of the command line invocation itself because the
situation is not reported as an error by backends (removal of
- non-existent items is not an error in SyncML).
+ non-existent items is not an error in SyncML). Use a star \* instead
+ or in addition to listing individual luids to delete all items.
--sync-property|-y <property>=<value>|<property>=?|?
Overrides a source-independent configuration property for the
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
<title>SyncEvolution</title>
-<meta name="date" content="2010-09-30" />
+<meta name="date" content="2010-10-26" />
<style type="text/css">
/*
<tr class="field"><th class="docinfo-name">Manual section:</th><td class="field-body">1</td>
</tr>
<tr><th class="docinfo-name">Version:</th>
-<td>1.0.99.7</td></tr>
+<td>1.1</td></tr>
<tr><th class="docinfo-name">Date:</th>
-<td>2010-09-30</td></tr>
+<td>2010-10-26</td></tr>
</tbody>
</table>
<div class="section" id="synopsis">
<dd>syncevolution --update <dir> <config> <source>
syncevolution [--delimiter <string>|none] --update <file>|- <config> <source> <luid> ...</dd>
<dt>Remove item(s):</dt>
-<dd>syncevolution --delete-items <config> <source> <luid> ...</dd>
+<dd>syncevolution --delete-items <config> <source> (<luid> ... | *)</dd>
</dl>
</div>
<div class="section" id="description">
syncevolution [--delimiter <string>|none] --import <dir>|<file>|- <config> <source>
syncevolution --update <dir> <config> <source>
syncevolution [--delimiter <string>|none] --update <file>|- <config> <source> <luid> ...
-syncevolution --delete-items <config> <source> <luid> ...
+syncevolution --delete-items <config> <source> (<luid> ... | *)
</pre>
<p>Restore depends on the specific format of the automatic backups
created by SyncEvolution. Arbitrary access to item data is provided
with additional options. <luid> here is the unique local identifier
assigned to each item in the source, transformed so that it contains
-only alphanumeric characters, dash and underscore.</p>
+only alphanumeric characters, dash and underscore. A star * in
+--delete-items selects all items for deletion.</p>
<p><config> and <source> must be given, but they do not have to refer to
existing configurations. In that case, the desired backend and must be
give via "--source-property type=<backend>", like this:</p>
typically leads to an ERROR message, but is not reflected in a
non-zero result of the command line invocation itself because the
situation is not reported as an error by backends (removal of
-non-existent items is not an error in SyncML).</dd>
+non-existent items is not an error in SyncML). Use a star * instead
+or in addition to listing individual luids to delete all items.</dd>
<dt>--sync-property|-y <property>=<value>|<property>=?|?</dt>
<dd><p class="first">Overrides a source-independent configuration property for the
current synchronization run or permanently when --configure is used
syncevolution [--delimiter <string>|none] --update <file>|- <config> <source> <luid> ...
Remove item(s):
- syncevolution --delete-items <config> <source> <luid> ...
+ syncevolution --delete-items <config> <source> (<luid> ... | \*)
DESCRIPTION
===========
syncevolution [--delimiter <string>|none] --import <dir>|<file>|- <config> <source>
syncevolution --update <dir> <config> <source>
syncevolution [--delimiter <string>|none] --update <file>|- <config> <source> <luid> ...
- syncevolution --delete-items <config> <source> <luid> ...
+ syncevolution --delete-items <config> <source> (<luid> ... | *)
Restore depends on the specific format of the automatic backups
created by SyncEvolution. Arbitrary access to item data is provided
with additional options. <luid> here is the unique local identifier
assigned to each item in the source, transformed so that it contains
-only alphanumeric characters, dash and underscore.
+only alphanumeric characters, dash and underscore. A star * in
+--delete-items selects all items for deletion.
<config> and <source> must be given, but they do not have to refer to
existing configurations. In that case, the desired backend and must be
typically leads to an ERROR message, but is not reflected in a
non-zero result of the command line invocation itself because the
situation is not reported as an error by backends (removal of
- non-existent items is not an error in SyncML).
+ non-existent items is not an error in SyncML). Use a star \* instead
+ or in addition to listing individual luids to delete all items.
--sync-property|-y <property>=<value>|<property>=?|?
Overrides a source-independent configuration property for the
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for syncevolution 1.0.99.7.
+# Generated by GNU Autoconf 2.61 for syncevolution 1.1.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# Identity of this package.
PACKAGE_NAME='syncevolution'
PACKAGE_TARNAME='syncevolution'
-PACKAGE_VERSION='1.0.99.7'
-PACKAGE_STRING='syncevolution 1.0.99.7'
+PACKAGE_VERSION='1.1'
+PACKAGE_STRING='syncevolution 1.1'
PACKAGE_BUGREPORT=''
# Factoring default headers for most tests.
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures syncevolution 1.0.99.7 to adapt to many kinds of systems.
+\`configure' configures syncevolution 1.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of syncevolution 1.0.99.7:";;
+ short | recursive ) echo "Configuration of syncevolution 1.1:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-syncevolution configure 1.0.99.7
+syncevolution configure 1.1
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by syncevolution $as_me 1.0.99.7, which was
+It was created by syncevolution $as_me 1.1, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
# Define the identity of the package.
PACKAGE='syncevolution'
- VERSION='1.0.99.7'
+ VERSION='1.1'
cat >>confdefs.h <<_ACEOF
# AC_WITH_QT() will be called in configure-post if need_qt_modules is not empty,
# setting QT_* flags.
+ need_qt_modules="$need_qt_modules +gui" # GUI needed for QVersit
qt_config="$qt_config +mobility"
qt_misc="$qt_misc
MOBILITY += contacts versit"
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 13148 "configure"' > conftest.$ac_ext
+ echo '#line 13149 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15253: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:15254: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:15257: \$? = $ac_status" >&5
+ echo "$as_me:15258: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15543: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:15544: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:15547: \$? = $ac_status" >&5
+ echo "$as_me:15548: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15647: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:15648: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:15651: \$? = $ac_status" >&5
+ echo "$as_me:15652: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 18024 "configure"
+#line 18025 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 18124 "configure"
+#line 18125 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:20525: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:20526: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:20529: \$? = $ac_status" >&5
+ echo "$as_me:20530: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:20629: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:20630: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:20633: \$? = $ac_status" >&5
+ echo "$as_me:20634: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:22227: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:22228: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:22231: \$? = $ac_status" >&5
+ echo "$as_me:22232: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:22331: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:22332: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:22335: \$? = $ac_status" >&5
+ echo "$as_me:22336: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:24551: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:24552: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:24555: \$? = $ac_status" >&5
+ echo "$as_me:24556: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:24841: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:24842: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:24845: \$? = $ac_status" >&5
+ echo "$as_me:24846: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:24945: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:24946: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:24949: \$? = $ac_status" >&5
+ echo "$as_me:24950: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
fi
fi
-if test $enable_dbus_timeout_hack = "yes"; then
+if test "$enable_dbus_timeout_hack" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define ENABLE_DBUS_TIMEOUT_HACK 1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by syncevolution $as_me 1.0.99.7, which was
+This file was extended by syncevolution $as_me 1.1, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-syncevolution config.status 1.0.99.7
+syncevolution config.status 1.1
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
[if test $enable_ebook = "yes" || test $enable_ecal = "yes"; then
enable_dbus_timeout_hack="yes"
fi])
-if test $enable_dbus_timeout_hack = "yes"; then
+if test "$enable_dbus_timeout_hack" = "yes"; then
AC_DEFINE(ENABLE_DBUS_TIMEOUT_HACK, 1, [overrides the default D-Bus timeout so that synchronous calls never time out])
fi
#
# Starting with the 1.1 release cycle, the rpm-style
# .99 pseudo-version number is used to mark a pre-release.
-AC_INIT([syncevolution], [1.0.99.7])
+AC_INIT([syncevolution], [1.1])
# STABLE_VERSION=1.0.1+
AC_SUBST(STABLE_VERSION)
#
# Starting with the 1.1 release cycle, the rpm-style
# .99 pseudo-version number is used to mark a pre-release.
-AC_INIT([syncevolution], [1.0.99.7])
+AC_INIT([syncevolution], [1.1])
# STABLE_VERSION=1.0.1+
AC_SUBST(STABLE_VERSION)
AC_DEFINE(ENABLE_QTCONTACTS, 1, [QtContacts available])
# AC_WITH_QT() will be called in configure-post if need_qt_modules is not empty,
# setting QT_* flags.
+ need_qt_modules="$need_qt_modules +gui" # GUI needed for QVersit
qt_config="$qt_config +mobility"
qt_misc="$qt_misc
MOBILITY += contacts versit"
[if test $enable_ebook = "yes" || test $enable_ecal = "yes"; then
enable_dbus_timeout_hack="yes"
fi])
-if test $enable_dbus_timeout_hack = "yes"; then
+if test "$enable_dbus_timeout_hack" = "yes"; then
AC_DEFINE(ENABLE_DBUS_TIMEOUT_HACK, 1, [overrides the default D-Bus timeout so that synchronous calls never time out])
fi
#include <journal.h>
#include <extendedcalendar.h>
#include <extendedstorage.h>
+#include <sqlitestorage.h>
#include <icalformat.h>
#include <memorycalendar.h>
ItemID id(luid);
QString uid = id.getIDString();
KDateTime rid = id.getDateTime();
- if (!m_storage->load(uid, rid)) {
- m_parent->throwError(string("failed to load incidence ") + luid);
- }
+ // if (!m_storage->load(uid, rid)) {
+ // m_parent->throwError(string("failed to load incidence ") + luid);
+ // }
KCalCore::Incidence::Ptr incidence = m_calendar->incidence(uid, rid);
return incidence;
}
m_data = new KCalExtendedData(this, getDatabaseID(),
KCalCore::IncidenceBase::TypeEvent);
m_data->m_calendar = mKCal::ExtendedCalendar::Ptr(new mKCal::ExtendedCalendar(KDateTime::Spec::LocalZone()));
- m_data->m_storage = mKCal::ExtendedCalendar::defaultStorage(m_data->m_calendar);
- if (!m_data->m_storage->open()) {
- throwError("failed to open storage");
- }
- mKCal::Notebook::Ptr defaultNotebook = m_data->m_storage->defaultNotebook();
- if (!defaultNotebook) {
- throwError("no default Notebook");
+ // read specified database name from evolutionsource property
+ const char *databaseID = getDatabaseID();
+
+ if ( strcmp(databaseID, "" ) == 0 || boost::starts_with(databaseID, "file://") ) {
+ // if databaseID is empty, create default storage at default location
+ // else if databaseID has a "file://" prefix, create storage at the specified place
+ // use default notebook in default storage
+ if ( boost::starts_with(databaseID, "file://") ) {
+ mKCal::SqliteStorage::Ptr ss(new mKCal::SqliteStorage(m_data->m_calendar, QString(databaseID + 7), false));
+ m_data->m_storage = ss.staticCast<mKCal::ExtendedStorage>();
+ } else {
+ m_data->m_storage = mKCal::ExtendedCalendar::defaultStorage(m_data->m_calendar);
+ }
+ if (!m_data->m_storage->open()) {
+ throwError("failed to open storage");
+ }
+ if (!m_data->m_storage->load()) {
+ throwError("failed to load calendar");
+ }
+ mKCal::Notebook::Ptr defaultNotebook = m_data->m_storage->defaultNotebook();
+ if (!defaultNotebook) {
+ throwError("no default Notebook");
+ }
+ m_data->m_notebookUID = defaultNotebook->uid();
+ } else {
+ // use databaseID as notebook name to search for an existing notebook
+ // if found use it, otherwise:
+ // 1) with "SyncEvolution_Test_" prefix, create a new notebook with given name and add it to default storage
+ // 2) without a special prefix, throw an error
+ m_data->m_storage = mKCal::ExtendedCalendar::defaultStorage(m_data->m_calendar);
+ if (!m_data->m_storage->open()) {
+ throwError("failed to open storage");
+ }
+ QString name = databaseID;
+ mKCal::Notebook::Ptr notebook;
+ mKCal::Notebook::List notebookList = m_data->m_storage->notebooks();
+ mKCal::Notebook::List::Iterator it;
+
+ for ( it = notebookList.begin(); it != notebookList.end(); ++it ) {
+ if ( name == (*it)->name() ) {
+ break;
+ }
+ }
+ if ( it == notebookList.end() ) {
+ if ( boost::starts_with(databaseID, "SyncEvolution_Test_") ) {
+ notebook = mKCal::Notebook::Ptr ( new mKCal::Notebook(QString(), name, QString(), QString(), false, true, false, false,true) );
+ if ( !notebook ) {
+ throwError("failed to create notebook");
+ }
+ m_data->m_storage->addNotebook(notebook, false);
+ } else {
+ throwError(string("no such notebook with name \"") + string(databaseID) + string("\" in default storage"));
+ }
+ } else {
+ notebook = *it;
+ }
+ m_data->m_notebookUID = notebook->uid();
}
- m_data->m_notebookUID = defaultNotebook->uid();
}
bool KCalExtendedSource::isEmpty()
{
Databases result;
- result.push_back(Database("select database via Notebook name",
- ""));
+ m_data = new KCalExtendedData(this, getDatabaseID(),
+ KCalCore::IncidenceBase::TypeEvent);
+ m_data->m_calendar = mKCal::ExtendedCalendar::Ptr(new mKCal::ExtendedCalendar(KDateTime::Spec::LocalZone()));
+ m_data->m_storage = mKCal::ExtendedCalendar::defaultStorage(m_data->m_calendar);
+ if (!m_data->m_storage->open()) {
+ throwError("failed to open storage");
+ }
+ mKCal::Notebook::List notebookList = m_data->m_storage->notebooks();
+ mKCal::Notebook::List::Iterator it;
+ for ( it = notebookList.begin(); it != notebookList.end(); ++it ) {
+ bool isDefault = (*it)->isDefault();
+ result.push_back(Database( (*it)->name().toStdString(),
+ (m_data->m_storage).staticCast<mKCal::SqliteStorage>()->databaseName().toStdString(),
+ isDefault));
+ }
+ m_data->m_storage->close();
+ m_data->m_calendar->close();
return result;
}
QString id = incidences[0]->uid();
KDateTime rid = incidences[0]->recurrenceId();
if (!id.isEmpty()) {
- m_data->m_storage->load(id, rid);
+ // m_data->m_storage->load(id, rid);
KCalCore::Incidence::Ptr incidence = m_data->m_calendar->incidence(id, rid);
if (incidence) {
oldUID = m_data->getItemID(incidence).getLUID();
}
}
+ // Brute-force copying of all time zone definitions. Ignores name
+ // conflicts, which is something better handled in a generic mKCal
+ // API function (BMC #8604).
+ KCalCore::ICalTimeZones *source = calendar->timeZones();
+ if (source) {
+ KCalCore::ICalTimeZones *target = m_data->m_calendar->timeZones();
+ if (target) {
+ BOOST_FOREACH(const KCalCore::ICalTimeZone &zone, source->zones().values()) {
+ target->add(zone);
+ }
+ }
+ }
+
if (oldUID.empty()) {
KCalCore::Incidence::Ptr incidence = incidences[0];
incidence->setRecurrenceId(original->recurrenceId());
}
- // also preserve original creation time, unless explicitly
- // set in update
- // TODO: if created() == CREATED, then preserving it
- // unconditionally is right. If created() == DTSTAMP,
- // then it has to be conditionally.
- // TODO: handle both DTSTAMP and CREATED
- if (true || !incidence->created().isValid()) {
- incidence->setCreated(original->created());
- }
+ // created() corresponds to the CREATED property (= time when
+ // item was created in the local storage for the first time),
+ // so it can never be modified by our peer and must be
+ // preserved unconditionally in updates.
+ incidence->setCreated(original->created());
// now overwrite item in calendar
(KCalCore::IncidenceBase &)*original = (KCalCore::IncidenceBase &)*incidence;
{
KCalCore::Incidence::Ptr incidence = m_data->findIncidence(uid);
if (!incidence) {
- throwError(string("incidence ") + uid + " not found");
+ // throwError(string("incidence ") + uid + " not found");
+ // don't treat this as error, it can happen, for example
+ // when the master event was removed before (MBC #6061)
+ return;
}
if (!m_data->m_calendar->deleteIncidence(incidence)) {
throwError(string("could not delete incidence") + uid);
#endif
createSource,
"mkcal = KCalExtended = calendar\n"
- " iCalendar 2.0 = text/calendar\n",
+ " iCalendar 2.0 = text/calendar\n"
+ " \"evolutionsource\" normally is the name of a calendar\n"
+ " inside the default calendar storage. If it starts\n"
+ " with the \"SyncEvolution_Test_\" prefix, it will be\n"
+ " created as needed, otherwise it must exist.\n"
+ " If it starts with the \"file://\" prefix, the default\n"
+ " calendar in the specified SQLite storage file will\n"
+ " created (if needed) and used.\n",
Values() +
(Aliases("mkcal") + "KCalExtended" + "MeeGo Calendar"));
virtual void updateConfig(ClientTestConfig &config) const
{
config.type = "KCalExtended:text/calendar";
+ // currently removing the parent also removes the child (BMC #6061)
+ // with no workaround in our code
+ config.linkedItemsRelaxedSemantic = false;
}
} iCal20Test;
AC_DEFINE(ENABLE_QTCONTACTS, 1, [QtContacts available])
# AC_WITH_QT() will be called in configure-post if need_qt_modules is not empty,
# setting QT_* flags.
+ need_qt_modules="$need_qt_modules +gui" # GUI needed for QVersit
qt_config="$qt_config +mobility"
qt_misc="$qt_misc
MOBILITY += contacts versit"
vector<string> urls = config.getSyncURL();
m_peers[server.first].clear();
BOOST_FOREACH (const string &url, urls) {
- m_peers[server.first].push_back(make_pair(url,MIGHTWORK));
+ // take current status into account,
+ // PresenceStatus::checkPresence() calls init() and
+ // expects up-to-date information
+ PeerStatus status;
+ if ((boost::starts_with(url, "obex-bt") && m_btPresence) ||
+ (boost::starts_with (url, "http") && m_httpPresence)) {
+ status = MIGHTWORK;
+ } else {
+ status = NOTRANSPORT;
+ }
+ m_peers[server.first].push_back(make_pair(url, status));
}
}
m_initiated = true;
void PresenceStatus::updatePresenceStatus (bool httpPresence, bool btPresence) {
bool httpChanged = (m_httpPresence != httpPresence);
bool btChanged = (m_btPresence != btPresence);
- m_httpPresence = httpPresence;
- m_btPresence = btPresence;
if(httpChanged) {
m_httpTimer.reset();
}
return;
}
- //initialize the configured peer list
+ //initialize the configured peer list using old presence status
bool initiated = m_initiated;
if (!m_initiated) {
init();
}
+ // switch to new status
+ m_httpPresence = httpPresence;
+ m_btPresence = btPresence;
+
//iterate all configured peers and fire singals
BOOST_FOREACH (StatusPair &peer, m_peers) {
//iterate all possible transports
if (!ops.m_deleteItem) {
source->throwError("deleting items not supported");
}
+ list<string> luids;
+ bool deleteAll = std::find(m_luids.begin(), m_luids.end(), "*") != m_luids.end();
err = ops.m_startDataRead("", "");
CHECK_ERROR("reading items");
+ if (deleteAll) {
+ readLUIDs(source, luids);
+ } else {
+ luids = m_luids;
+ }
if (ops.m_endDataRead) {
err = ops.m_endDataRead();
CHECK_ERROR("stop reading items");
err = ops.m_startDataWrite();
CHECK_ERROR("writing items");
}
- BOOST_FOREACH(const string &luid, m_luids) {
+ BOOST_FOREACH(const string &luid, luids) {
sysync::ItemIDType id;
id.item = (char *)luid.c_str();
err = ops.m_deleteItem(&id);
};
~SmartPtr()
{
- set( NULL );
+ set(0);
}
/** assignment and copy construction transfer ownership to the copy */
"Soup main loop"),
m_status(INACTIVE),
m_cb(NULL),
- m_response(NULL)
+ m_response(0)
{
#ifdef HAVE_LIBSOUP_SOUP_GNOME_FEATURES_H
// use default GNOME proxy settings
* both items independently. However, operations which violate
* the semantic of the related items (like deleting the parent, but
* not the child) may have unspecified results (like also deleting
- * the child). See LINKED_ITEMS_RELAXED_SEMANTIC.
+ * the child). See linkedItemsRelaxedSemantic and sourceKnowsItemSemantic.
*
* One example for main and subordinate items are a recurring
* iCalendar 2.0 event and a detached recurrence.
bool atomicModification;
/**
- * define to 0 to disable tests which slightly violate the
+ * set to false to disable tests which slightly violate the
* semantic of linked items by inserting children
* before/without their parent
*/
-#ifndef LINKED_ITEMS_RELAXED_SEMANTIC
-# define LINKED_ITEMS_RELAXED_SEMANTIC 1
-#endif
+ bool linkedItemsRelaxedSemantic;
/**
* setting this to false disables tests which depend
# avoid special \-- which was necessary for some options
s/^\\--/--/gm;
+# remove escape sequence
+s/\\\*/*/g;
+
# extract parts
/SYNOPSIS\n===+\n\n(.*?)\nDESCRIPTION/s || die "no synopsis";
my $synopsis = $1;
# Generated by configure. Do no edit.
-# git revision c3a18d8e0bc97fc663f5da4f45228ff7a85f0039
-# git tag libsynthesis_3.4.0.6+syncevolution-1-0-99-7
+# git revision 2a247a4a9752d939eb68d2d629ddb8d988fccc89
+# git tag libsynthesis_3.4.0.6+syncevolution-1-1
+
+2010-10-19 Patrick Ohly <patrick.ohly@intel.com>
+
+ * src/sysync/itemfield.cpp:
+
+ newItemField(): incorrect parameters
2010-09-29 Patrick Ohly <patrick.ohly@intel.com>
fldP = fArray[aArrIdx];
if (fldP==NULL) {
// but element does not exist yet, create field for it
- fldP=newItemField(fLeafFieldType,false);
+ fldP=newItemField(fLeafFieldType,NULL,false);
fArray[aArrIdx]=fldP;
}
}
fArray.push_back(NULL);
}
// actually create last field only
- fldP=newItemField(fLeafFieldType,false);
+ fldP=newItemField(fLeafFieldType,NULL,false);
fArray[aArrIdx]=fldP;
}
// return field
if (config.parentItem &&
config.childItem) {
ADD_TEST(LocalTests, testLinkedItemsParent);
- ADD_TEST(LocalTests, testLinkedItemsChild);
+ if (config.linkedItemsRelaxedSemantic) {
+ ADD_TEST(LocalTests, testLinkedItemsChild);
+ }
ADD_TEST(LocalTests, testLinkedItemsParentChild);
- ADD_TEST(LocalTests, testLinkedItemsChildParent);
- ADD_TEST(LocalTests, testLinkedItemsChildChangesParent);
- ADD_TEST(LocalTests, testLinkedItemsRemoveParentFirst);
+ if (config.linkedItemsRelaxedSemantic) {
+ ADD_TEST(LocalTests, testLinkedItemsChildParent);
+ }
+ if (config.linkedItemsRelaxedSemantic) {
+ ADD_TEST(LocalTests, testLinkedItemsChildChangesParent);
+ }
+ if (config.linkedItemsRelaxedSemantic) {
+ ADD_TEST(LocalTests, testLinkedItemsRemoveParentFirst);
+ }
ADD_TEST(LocalTests, testLinkedItemsRemoveNormal);
if (config.sourceKnowsItemSemantic) {
ADD_TEST(LocalTests, testLinkedItemsInsertParentTwice);
- ADD_TEST(LocalTests, testLinkedItemsInsertChildTwice);
+ if (config.linkedItemsRelaxedSemantic) {
+ ADD_TEST(LocalTests, testLinkedItemsInsertChildTwice);
+ }
}
ADD_TEST(LocalTests, testLinkedItemsParentUpdate);
- ADD_TEST(LocalTests, testLinkedItemsUpdateChild);
+ if (config.linkedItemsRelaxedSemantic) {
+ ADD_TEST(LocalTests, testLinkedItemsUpdateChild);
+ }
ADD_TEST(LocalTests, testLinkedItemsInsertBothUpdateChild);
ADD_TEST(LocalTests, testLinkedItemsInsertBothUpdateParent);
}
// test inserting, removing and updating of parent + child item in
// various order plus change tracking
void LocalTests::testLinkedItemsChild() {
-#if LINKED_ITEMS_RELAXED_SEMANTIC
// check additional requirements
CPPUNIT_ASSERT(config.parentItem);
CPPUNIT_ASSERT(config.childItem);
SOURCE_ASSERT_EQUAL(copy.get(), 0, countUpdatedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countDeletedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countEqual(listDeletedItems(copy.get()), child));
-#endif
}
// test inserting, removing and updating of parent + child item in
// test inserting, removing and updating of parent + child item in
// various order plus change tracking
void LocalTests::testLinkedItemsChildParent() {
-#if LINKED_ITEMS_RELAXED_SEMANTIC
// check additional requirements
CPPUNIT_ASSERT(config.parentItem);
CPPUNIT_ASSERT(config.childItem);
SOURCE_ASSERT_EQUAL(copy.get(), 2, countDeletedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countEqual(listDeletedItems(copy.get()), child));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countEqual(listDeletedItems(copy.get()), parent));
-#endif
}
// test inserting, removing and updating of parent + child item in
// various order plus change tracking
void LocalTests::testLinkedItemsChildChangesParent() {
-#if LINKED_ITEMS_RELAXED_SEMANTIC
// check additional requirements
CPPUNIT_ASSERT(config.parentItem);
CPPUNIT_ASSERT(config.childItem);
SOURCE_ASSERT_EQUAL(copy.get(), 2, countDeletedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countEqual(listDeletedItems(copy.get()), child));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countEqual(listDeletedItems(copy.get()), parent));
-#endif
}
// test inserting, removing and updating of parent + child item in
// various order plus change tracking
void LocalTests::testLinkedItemsRemoveParentFirst() {
-#if LINKED_ITEMS_RELAXED_SEMANTIC
// check additional requirements
CPPUNIT_ASSERT(config.parentItem);
CPPUNIT_ASSERT(config.childItem);
SOURCE_ASSERT_EQUAL(copy.get(), 1, countDeletedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countEqual(listDeletedItems(copy.get()), child));
CPPUNIT_ASSERT_NO_THROW(copy.reset());
-#endif
}
// test inserting, removing and updating of parent + child item in
SOURCE_ASSERT_EQUAL(copy.get(), 0, countItems(copy.get()));
CPPUNIT_ASSERT_NO_THROW(copy.reset());
-#if LINKED_ITEMS_RELAXED_SEMANTIC
// add child twice (should be turned into update)
child = insert(createSourceA, config.childItem);
SOURCE_ASSERT_EQUAL(copy.get(), 0, countUpdatedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countDeletedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countEqual(listDeletedItems(copy.get()), child));
-#endif
}
// test inserting, removing and updating of parent + child item in
// test inserting, removing and updating of parent + child item in
// various order plus change tracking
void LocalTests::testLinkedItemsUpdateChild() {
-#if LINKED_ITEMS_RELAXED_SEMANTIC
// check additional requirements
CPPUNIT_ASSERT(config.parentItem);
CPPUNIT_ASSERT(config.childItem);
SOURCE_ASSERT_EQUAL(copy.get(), 0, countUpdatedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countDeletedItems(copy.get()));
SOURCE_ASSERT_EQUAL(copy.get(), 1, countEqual(listDeletedItems(copy.get()), child));
- CPPUNIT_ASSERT_NO_THROW(copy.reset());
-#endif
}
// test inserting, removing and updating of parent + child item in
env = getenv("CLIENT_TEST_SUSPEND");
config.suspendSync = (env && !strcmp (env, "t")) ?true :false;
config.sourceKnowsItemSemantic = true;
+ config.linkedItemsRelaxedSemantic = true;
config.itemType = "";
config.import = import;
config.dump = dump;