Merge lp:~larsu/gsettings-qt/lp1349787 into lp:gsettings-qt

Proposed by Lars Karlitski
Status: Merged
Approved by: Ken VanDine
Approved revision: 65
Merged at revision: 60
Proposed branch: lp:~larsu/gsettings-qt/lp1349787
Merge into: lp:gsettings-qt
Prerequisite: lp:~larsu/gsettings-qt/manual-test
Diff against target: 227 lines (+32/-133)
2 files modified
debian/libgsettings-qt1.symbols (+6/-3)
src/qconftypes.cpp (+26/-130)
To merge this branch: bzr merge lp:~larsu/gsettings-qt/lp1349787
Reviewer Review Type Date Requested Status
Ken VanDine Approve
Łukasz Zemczak Needs Fixing
Iain Lane Needs Fixing
Jonas G. Drange (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+228841@code.launchpad.net

This proposal supersedes a proposal from 2014-07-30.

Commit message

qconftypes: support a{ss}

We don't support a{sv} because gsettings is typed more strictly than javascript and qvariant.

Description of the change

qconftypes: support a{ss}

We don't support a{sv} because gsettings is typed more strictly than javascript and qvariant.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:64
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https://code.launchpad.net/~larsu/gsettings-qt/lp1349787/+merge/228841/+edit-commit-message

http://jenkins.qa.ubuntu.com/job/gsettings-qt-ci/30/
Executed test runs:
    FAILURE: http://jenkins.qa.ubuntu.com/job/gsettings-qt-utopic-amd64-ci/7/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/gsettings-qt-utopic-armhf-ci/7
        deb: http://jenkins.qa.ubuntu.com/job/gsettings-qt-utopic-armhf-ci/7/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/gsettings-qt-utopic-i386-ci/7/console

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/gsettings-qt-ci/30/rebuild

review: Needs Fixing (continuous-integration)
lp:~larsu/gsettings-qt/lp1349787 updated
65. By Lars Karlitski

symbols: make detach_helper_grow optional

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Jonas G. Drange (jonas-drange) wrote :
review: Approve
Revision history for this message
Iain Lane (laney) wrote :

Code looks fine, but a test would be nice please.

I'd have preferred the removals in another branch, but it's okay since they're here already. These weren't in a header file so I think it's fine to remove them despite being public. A symbols map would let you control the exported symbols.

review: Needs Fixing
Revision history for this message
Łukasz Zemczak (sil2100) wrote :

So, even though the symbols aren't completely crazy, it seems to get it building for ppc64el we would need to make one additional Qt symbol optional (as it's anyway something we shouldn't export), i.e.

- (c++)"QMap<QString, QVariant>::detach_helper()@Base" 0replaceme
+ (c++|optional=templinst)"QMap<QString, QVariant>::detach_helper()@Base" 0replaceme

The proper fix would be as Laney mentioned: a symbols map. I would have do read up qmake to see how we can do it through those files though. We might consider doing it in some later merge perhaps?

review: Needs Fixing
Revision history for this message
Ken VanDine (ken-vandine) wrote :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/libgsettings-qt1.symbols'
2--- debian/libgsettings-qt1.symbols 2014-04-10 17:27:58 +0000
3+++ debian/libgsettings-qt1.symbols 2014-07-30 13:42:43 +0000
4@@ -1,8 +1,6 @@
5 libgsettings-qt.so.1 libgsettings-qt1 #MINVER#
6 (c++)"qtify_name(char const*)@Base" 0.1+14.04.20140408
7 (c++)"unqtify_name(QString const&)@Base" 0.1+14.04.20140408
8- (c++)"qconf_types_unpack(_GVariant*, void*)@Base" 0.1+14.04.20140408
9- (c++)"qconf_types_collect(_GVariantType const*, void const*)@Base" 0.1+14.04.20140408
10 (c++)"qconf_types_convert(_GVariantType const*)@Base" 0.1+14.04.20140408
11 (c++)"qconf_types_to_qvariant(_GVariant*)@Base" 0.1+14.04.20140408
12 (c++)"qconf_types_collect_from_variant(_GVariantType const*, QVariant const&)@Base" 0.1+14.04.20140408
13@@ -22,7 +20,6 @@
14 (c++)"QGSettings::~QGSettings()@Base" 0.1+14.04.20140408
15 (c++)"QGSettings::~QGSettings()@Base" 0.1+14.04.20140408
16 (c++)"QGSettingsPrivate::settingChanged(_GSettings*, char const*, void*)@Base" 0.1+14.04.20140408
17- (c++|optional=templinst)"QList<QString>::detach_helper_grow(int, int)@Base" 0.1+14.04.20140408
18 (c++|optional=templinst)"QList<QString>::append(QString const&)@Base" 0.1+14.04.20140408
19 (c++|optional=templinst)"QList<QString>::QList(QList<QString> const&)@Base" 0.1+14.04.20140408
20 (c++|optional=templinst)"QList<QString>::QList(QList<QString> const&)@Base" 0.1+14.04.20140408
21@@ -34,6 +31,12 @@
22 (c++|optional=templinst)"QList<QVariant>::QList(QList<QVariant> const&)@Base" 0.1+14.04.20140408
23 (c++|optional=templinst)"QList<QVariant>::~QList()@Base" 0.1+14.04.20140408
24 (c++|optional=templinst)"QList<QVariant>::~QList()@Base" 0.1+14.04.20140408
25+ (c++|optional=templinst)"QList<QString>::detach_helper_grow(int, int)@Base" 0replaceme
26+ (c++)"QMap<QString, QVariant>::detach_helper()@Base" 0replaceme
27+ (c++)"QMap<QString, QVariant>::~QMap()@Base" 0replaceme
28+ (c++)"QMap<QString, QVariant>::~QMap()@Base" 0replaceme
29+ (c++)"QMapNode<QString, QVariant>::destroySubTree()@Base" 0replaceme
30+ (c++)"QMapNode<QString, QVariant>::copy(QMapData<QString, QVariant>*) const@Base" 0replaceme
31 (c++)"QString::~QString()@Base" 0.1+14.04.20140408
32 (c++)"QString::~QString()@Base" 0.1+14.04.20140408
33 (c++)"QGSettings::metaObject() const@Base" 0.1+14.04.20140408
34
35=== modified file 'src/qconftypes.cpp'
36--- src/qconftypes.cpp 2013-07-23 14:35:38 +0000
37+++ src/qconftypes.cpp 2014-07-30 13:42:43 +0000
38@@ -53,6 +53,7 @@
39 * string s QString QVariant::String
40 * string array* as QStringList QVariant::StringList
41 * byte array ay QByteArray QVariant::ByteArray
42+ * dictionary a{ss} QVariantMap QVariant::Map
43 *
44 * [*] not strictly an array, but called as such for sake of
45 * consistency with the 'a' appearing in the DBus type system
46@@ -106,142 +107,15 @@
47 else if (g_variant_type_equal(gtype, G_VARIANT_TYPE_BYTESTRING))
48 return QVariant::ByteArray;
49
50+ else if (g_variant_type_equal(gtype, G_VARIANT_TYPE ("a{ss}")))
51+ return QVariant::Map;
52+
53 // fall through
54 default:
55 return QVariant::Invalid;
56 }
57 }
58
59-GVariant *qconf_types_collect(const GVariantType *gtype, const void *argument)
60-{
61- switch (g_variant_type_peek_string(gtype)[0]) {
62- case G_VARIANT_CLASS_BOOLEAN:
63- return g_variant_new_boolean(*(const bool *) argument);
64-
65- case G_VARIANT_CLASS_BYTE:
66- return g_variant_new_byte(*(const char *) argument);
67-
68- case G_VARIANT_CLASS_INT16:
69- return g_variant_new_int16(*(const int *) argument);
70-
71- case G_VARIANT_CLASS_UINT16:
72- return g_variant_new_uint16(*(const unsigned int *) argument);
73-
74- case G_VARIANT_CLASS_INT32:
75- return g_variant_new_int32(*(const int *) argument);
76-
77- case G_VARIANT_CLASS_UINT32:
78- return g_variant_new_uint32(*(const unsigned int *) argument);
79-
80- case G_VARIANT_CLASS_INT64:
81- return g_variant_new_int64(*(const long long *) argument);
82-
83- case G_VARIANT_CLASS_UINT64:
84- return g_variant_new_int64(*(const unsigned long long *) argument);
85-
86- case G_VARIANT_CLASS_DOUBLE:
87- return g_variant_new_double(*(const double *) argument);
88-
89- case G_VARIANT_CLASS_STRING:
90- {
91- const QString& string = *(const QString *) argument;
92- return g_variant_new_string(string.toUtf8());
93- }
94-
95- case G_VARIANT_CLASS_ARRAY:
96- if (g_variant_type_equal(gtype, G_VARIANT_TYPE_STRING_ARRAY)) {
97- const QStringList& list = *(const QStringList *) argument;
98- GVariantBuilder builder;
99-
100- g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
101-
102- Q_FOREACH (const QString& string, list)
103- g_variant_builder_add(&builder, "s", string.toUtf8().constData());
104-
105- return g_variant_builder_end(&builder);
106- } else if (g_variant_type_equal(gtype, G_VARIANT_TYPE_BYTESTRING)) {
107- const QByteArray& array = *(const QByteArray *) argument;
108- gsize size = array.size();
109- gpointer data;
110-
111- data = g_memdup(array.data(), size);
112-
113- return g_variant_new_from_data(G_VARIANT_TYPE_BYTESTRING,
114- data, size, TRUE, g_free, data);
115- }
116-
117- // fall through
118- default:
119- g_assert_not_reached();
120- }
121-}
122-
123-void qconf_types_unpack(GVariant *value, void *argument)
124-{
125- switch (g_variant_classify(value)) {
126- case G_VARIANT_CLASS_BOOLEAN:
127- *(bool *) argument = g_variant_get_boolean(value);
128- break;
129-
130- case G_VARIANT_CLASS_BYTE:
131- *(char *) argument = g_variant_get_byte(value);
132- break;
133-
134- case G_VARIANT_CLASS_INT16:
135- *(int *) argument = g_variant_get_int16(value);
136- break;
137-
138- case G_VARIANT_CLASS_UINT16:
139- *(unsigned int *) argument = g_variant_get_uint16(value);
140- break;
141-
142- case G_VARIANT_CLASS_INT32:
143- *(int *) argument = g_variant_get_int32(value);
144- break;
145-
146- case G_VARIANT_CLASS_UINT32:
147- *(unsigned int *) argument = g_variant_get_uint32(value);
148- break;
149-
150- case G_VARIANT_CLASS_INT64:
151- *(long long *) argument = g_variant_get_int64(value);
152- break;
153-
154- case G_VARIANT_CLASS_UINT64:
155- *(unsigned long long *) argument = g_variant_get_uint64(value);
156- break;
157-
158- case G_VARIANT_CLASS_DOUBLE:
159- *(double *) argument = g_variant_get_double(value);
160- break;
161-
162- case G_VARIANT_CLASS_STRING:
163- *(QString *) argument = QString(g_variant_get_string(value, NULL));
164- break;
165-
166- case G_VARIANT_CLASS_ARRAY:
167- if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING_ARRAY)) {
168- GVariantIter iter;
169- QStringList list;
170- const gchar *str;
171-
172- g_variant_iter_init (&iter, value);
173- while (g_variant_iter_next (&iter, "&s", &str))
174- list.append (str);
175-
176- *(QStringList *) argument = list;
177- break;
178- } else if (g_variant_is_of_type(value, G_VARIANT_TYPE_BYTESTRING)) {
179- *(QByteArray *) argument = QByteArray(g_variant_get_bytestring(value));
180- break;
181- }
182-
183- // fall through
184- default:
185- g_assert_not_reached();
186- }
187-}
188-
189 QVariant qconf_types_to_qvariant(GVariant *value)
190 {
191 switch (g_variant_classify(value)) {
192@@ -288,6 +162,17 @@
193 return QVariant(list);
194 } else if (g_variant_is_of_type(value, G_VARIANT_TYPE_BYTESTRING)) {
195 return QVariant(QByteArray(g_variant_get_bytestring(value)));
196+ } else if (g_variant_is_of_type(value, G_VARIANT_TYPE("a{ss}"))) {
197+ GVariantIter iter;
198+ QMap<QString, QVariant> map;
199+ const gchar *key;
200+ const gchar *val;
201+
202+ g_variant_iter_init (&iter, value);
203+ while (g_variant_iter_next (&iter, "{&s&s}", &key, &val))
204+ map.insert(key, QVariant(val));
205+
206+ return map;
207 }
208
209 // fall through
210@@ -349,6 +234,17 @@
211
212 return g_variant_new_from_data(G_VARIANT_TYPE_BYTESTRING,
213 data, size, TRUE, g_free, data);
214+ } else if (g_variant_type_equal(gtype, G_VARIANT_TYPE("a{ss}"))) {
215+ GVariantBuilder builder;
216+ g_variant_builder_init(&builder, G_VARIANT_TYPE ("a{ss}"));
217+ QMapIterator<QString, QVariant> it(v.toMap());
218+ while (it.hasNext()) {
219+ it.next();
220+ QByteArray key = it.key().toUtf8();
221+ QByteArray val = it.value().toByteArray();
222+ g_variant_builder_add (&builder, "{ss}", key.constData(), val.constData());
223+ }
224+ return g_variant_builder_end (&builder);
225 }
226
227 // fall through

Subscribers

People subscribed via source and target branches

to all changes: