Merge lp:unity-scopes-api/staging into lp:unity-scopes-api
- staging
- Merge into trunk
Proposed by
Marcus Tomlinson
Status: | Merged |
---|---|
Approved by: | James Henstridge |
Approved revision: | 332 |
Merged at revision: | 369 |
Proposed branch: | lp:unity-scopes-api/staging |
Merge into: | lp:unity-scopes-api |
Diff against target: |
895 lines (+200/-146) 33 files modified
CONFIGFILES (+5/-5) HACKING (+22/-40) RELEASE_NOTES.md (+11/-0) STRUCTS (+2/-3) debian/LAST_ABI_ADDITION_QT-VERSION (+1/-0) debian/LAST_ABI_ADDITION_VERSION (+1/-0) debian/VERSION (+1/-1) debian/bileto_pre_release_hook (+8/-3) debian/changelog (+19/-0) debian/control (+5/-5) debian/control.in (+5/-5) debian/libunity-scopes-qt.shlibs.in (+1/-1) debian/libunity-scopes.shlibs.in (+1/-1) debian/source/format (+1/-1) include/unity/scopes/SearchListenerBase.h (+9/-0) include/unity/scopes/SearchReply.h (+8/-1) include/unity/scopes/internal/SearchReplyImpl.h (+2/-1) include/unity/scopes/testing/MockScope.h (+2/-0) include/unity/scopes/testing/MockSearchReply.h (+1/-0) include/unity/scopes/utility/internal/BufferedSearchReplyImpl.h (+1/-0) src/scopes/SearchListenerBase.cpp (+5/-0) src/scopes/internal/OnlineAccountClientImpl.cpp (+13/-1) src/scopes/internal/RegistryConfig.cpp (+2/-2) src/scopes/internal/ResultReplyObject.cpp (+5/-10) src/scopes/internal/SearchReplyImpl.cpp (+7/-14) src/scopes/internal/zmq_middleware/ZmqConfig.cpp (+6/-6) src/scopes/testing/InProcessBenchmark.cpp (+5/-0) src/scopes/utility/internal/BufferedSearchReplyImpl.cpp (+5/-0) test/gtest/scopes/Filters/Filters_test.cpp (+21/-10) test/gtest/scopes/Filters/TestScope.h (+19/-2) test/gtest/scopes/ResultCache/ResultCache_test.cpp (+1/-32) test/gtest/scopes/ResultCache/no_filter_state_cache (+0/-1) test/gtest/scopes/internal/smartscopes/CMakeLists.txt (+5/-1) |
To merge this branch: | bzr merge lp:unity-scopes-api/staging |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
James Henstridge | Approve | ||
Review via email: mp+305177@code.launchpad.net |
Commit message
* Deprecated push(Filters const&, FilterState const&) method.
* Fixed potential login deadlock in OnlineAccountCl
* Increased upper timeout limits to 60s to assist scope-harness testing on slow builders.
* Fixes for building with Florian Boucault's crossbuilder.
* Fixed incorrect generation of shlib files.
* Fixed Yakkety build by adding missing #includes.
* Fixed arm64 build by temporarily disabling SmartScopesClie
Description of the change
To post a comment you must log in.
Revision history for this message
Michi Henning (michihenning) wrote : | # |
lp:unity-scopes-api/staging
updated
- 331. By Marcus Tomlinson
-
Merged devel
- 332. By Marcus Tomlinson
-
Update RELEASE_NOTES.md
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'CONFIGFILES' |
2 | --- CONFIGFILES 2016-02-22 01:29:01 +0000 |
3 | +++ CONFIGFILES 2016-09-09 12:41:03 +0000 |
4 | @@ -189,11 +189,11 @@ |
5 | in Registry.ini, otherwise invocations on a scope that needs to be activated |
6 | first can fail, even though the activation succeeded. |
7 | |
8 | - Only values in the range 10 to 15000 milliseconds are accepted. (Values outside |
9 | + Only values in the range 10 to 60000 milliseconds are accepted. (Values outside |
10 | this range would either cause locate() to falsely conclude that a scope |
11 | could not be started, or cause an unacceptably long wait time.) |
12 | |
13 | - Only values in the range 10 to 15000 milliseconds are accepted. |
14 | + Only values in the range 10 to 60000 milliseconds are accepted. |
15 | |
16 | The default value is 5000 milliseconds. |
17 | |
18 | @@ -202,7 +202,7 @@ |
19 | The timeout to be used when invoking a twoway operation on the registry other |
20 | than locate(). |
21 | |
22 | - Only values in the range 10 to 15000 milliseconds are accepted. |
23 | + Only values in the range 10 to 60000 milliseconds are accepted. |
24 | |
25 | The default value is 5000 milliseconds. |
26 | |
27 | @@ -212,7 +212,7 @@ |
28 | on a scope. These methods require more time to execute than other scope methods |
29 | as they read from and write to disk. |
30 | |
31 | - Only values in the range 10 to 15000 milliseconds are accepted. |
32 | + Only values in the range 10 to 60000 milliseconds are accepted. |
33 | |
34 | The default value is 2000 milliseconds. |
35 | |
36 | @@ -269,7 +269,7 @@ |
37 | or terminate correctly. If a scope does not respond |
38 | within the allotted time, it is killed with SIGKILL. |
39 | |
40 | - Only values in the range 10 to 15000 milliseconds are accepted. |
41 | + Only values in the range 10 to 60000 milliseconds are accepted. |
42 | |
43 | The default value is 4000 milliseconds. |
44 | |
45 | |
46 | === modified file 'HACKING' |
47 | --- HACKING 2016-03-31 23:48:56 +0000 |
48 | +++ HACKING 2016-09-09 12:41:03 +0000 |
49 | @@ -182,41 +182,6 @@ |
50 | #endif |
51 | #endif |
52 | |
53 | -Updating symbols files (only for Vivid) |
54 | ---------------------------------------- |
55 | - |
56 | -On Vivid only, we maintain symbols files, using the gcc 4.9 ABI names. |
57 | -On Wily, there is no symbols file because we don't care whether we |
58 | -use the gcc 4.9 or 5.x ABI. (The code is the same either way.) Instead, |
59 | -we use a shlibs file. |
60 | - |
61 | -For Vivid, the symbols files are generated from debian/libunity-scopes.symbols.in |
62 | -and debian/libunity-scopes-qt.symbols.in. (The soversion is substituted |
63 | -automatically into the files.) |
64 | - |
65 | -To easily spot new/removed/changed symbols in the library, the debian |
66 | -package maintains a .symbols file that lists all exported symbols |
67 | -present in a library .so. If you add new public symbols to the library, |
68 | -it's necessary to refresh the symbols file, otherwise the package will |
69 | -fail to build. The easiest way to do that is using bzr-builddeb: |
70 | - |
71 | - $ bzr bd -- -us -uc -j8 # Don't sign source package or changes file, 8 compiles in parallel |
72 | - $ # this will exit with an error if symbols file isn't up-to-date |
73 | - $ cd ../build-area/unity-scopes-api-[version] |
74 | - $ ./obj-[arch]/tools/symbol_diff |
75 | - |
76 | -This creates a diff of the symbols in /tmp/symbols.diff. |
77 | -(The demangled symbols from the debian build are in ./new_symbols.) |
78 | - |
79 | -Review any changes in /tmp/symbols.diff. If they are OK: |
80 | - |
81 | - $ cd - |
82 | - $ patch -p0 debian/libunity-scopes.symbols.in < /tmp/symbols.diff |
83 | - |
84 | -For changes in the qt library symbols file, use |
85 | - |
86 | - $ patch -p0 debian/libunity-scopes-qt.symbols.in < /tmp/symbols.diff |
87 | - |
88 | ABI compatibility |
89 | ----------------- |
90 | |
91 | @@ -251,15 +216,25 @@ |
92 | if the soname of the Qt library changes, in which case |
93 | bileto_pre_release_hook needs a corresponding update. |
94 | |
95 | -The version files have the format |
96 | + - LAST_ABI_ADDITION_VERSION |
97 | + |
98 | + The micro version at which we last added something |
99 | + new to the libunity-scopes ABI (without breaking anything). |
100 | + |
101 | + - LAST_ABI_ADDITION_QT-VERSION |
102 | + |
103 | + The micro version at which we last added something |
104 | + new to the libunity-scopes-qt ABI (without breaking anything). |
105 | + |
106 | + The version files have the format |
107 | |
108 | <major>.<minor>.<micro> |
109 | |
110 | -All three numbers must be present. |
111 | + All three numbers must be present. |
112 | |
113 | -The soversion for each library is derived from the corresponding |
114 | -version file so, unless the soversion changes, you don't need to |
115 | -do anything special. |
116 | + The soversion for each library is derived from the corresponding |
117 | + version file so, unless the soversion changes, you don't need to |
118 | + do anything special. |
119 | |
120 | Versioning rules: |
121 | |
122 | @@ -269,6 +244,13 @@ |
123 | is in this build or not.) The best time to update the micro |
124 | version is when creating a silo for landing in the archives. |
125 | |
126 | +For changes in behavior that do *not* add anything new to the ABI, you must |
127 | +increment the micro version in VERSION or QT-VERSION, but *not* the |
128 | +version in LAST_ABI_ADDITION_VERSION or LAST_ABI_ADDITION_QT-VERSION. |
129 | +For changes that add something to the ABI (without breaking it), you *must* |
130 | +increment *both* VERSION and LAST_ABI_ADDITION_VERSION (or |
131 | +QT-VERSION and LAST_ABI_ADDITION_QT-VERSION). |
132 | + |
133 | For ABI incompatible changes, either minor or major must be |
134 | incremented, and the lower-order version numbers must be reset to zero. |
135 | |
136 | |
137 | === modified file 'RELEASE_NOTES.md' |
138 | --- RELEASE_NOTES.md 2016-05-23 07:55:39 +0000 |
139 | +++ RELEASE_NOTES.md 2016-09-09 12:41:03 +0000 |
140 | @@ -1,6 +1,17 @@ |
141 | Release notes |
142 | ============= |
143 | |
144 | +Changes in version 1.0.7 |
145 | +======================== |
146 | + - Fixed potential login deadlock in OnlineAccountClient. |
147 | + - Increased upper timeout limits to 60s to assist scope-harness testing on slow builders. |
148 | + - Fixes for building with Florian Boucault's crossbuilder. |
149 | + - Fixed incorrect generation of shlib files. |
150 | + - Marked the push(Filters const&, FilterState const&) method of SearchReply and SearchListenerBase |
151 | + as deprecated and provided push methods which take the Filters argument only. |
152 | + - Fixed Yakkety build by adding missing #includes |
153 | + - Fixed arm64 build by temporarily disabling SmartScopesClient_test |
154 | + |
155 | Changes in version 1.0.6 |
156 | ======================== |
157 | - Got rid of category header background, as per design (Bug #1446216). |
158 | |
159 | === modified file 'STRUCTS' |
160 | --- STRUCTS 2016-02-25 16:26:09 +0000 |
161 | +++ STRUCTS 2016-09-09 12:41:03 +0000 |
162 | @@ -142,10 +142,9 @@ |
163 | 'central_label' : string |
164 | 'filter_group' : string, optional |
165 | |
166 | -Filters + FilterState |
167 | -===================== |
168 | +Filters |
169 | +======= |
170 | 'filter' : array of filters (implementations of FilterBase) |
171 | - 'filter_state' : FilterState |
172 | |
173 | PreviewResult (returned by serialize()) |
174 | ======================================= |
175 | |
176 | === added file 'debian/LAST_ABI_ADDITION_QT-VERSION' |
177 | --- debian/LAST_ABI_ADDITION_QT-VERSION 1970-01-01 00:00:00 +0000 |
178 | +++ debian/LAST_ABI_ADDITION_QT-VERSION 2016-09-09 12:41:03 +0000 |
179 | @@ -0,0 +1,1 @@ |
180 | +0.6.15 |
181 | |
182 | === added file 'debian/LAST_ABI_ADDITION_VERSION' |
183 | --- debian/LAST_ABI_ADDITION_VERSION 1970-01-01 00:00:00 +0000 |
184 | +++ debian/LAST_ABI_ADDITION_VERSION 2016-09-09 12:41:03 +0000 |
185 | @@ -0,0 +1,1 @@ |
186 | +1.0.7 |
187 | |
188 | === modified file 'debian/VERSION' |
189 | --- debian/VERSION 2016-05-23 07:56:41 +0000 |
190 | +++ debian/VERSION 2016-09-09 12:41:03 +0000 |
191 | @@ -1,1 +1,1 @@ |
192 | -1.0.6 |
193 | +1.0.7 |
194 | |
195 | === modified file 'debian/bileto_pre_release_hook' |
196 | --- debian/bileto_pre_release_hook 2016-03-31 23:48:56 +0000 |
197 | +++ debian/bileto_pre_release_hook 2016-09-09 12:41:03 +0000 |
198 | @@ -80,6 +80,10 @@ |
199 | [ -n "$UNITY_SCOPES_SOVERSION" ] |
200 | [ -n "$UNITY_SCOPES_QT_SOVERSION" ] |
201 | |
202 | +export LAST_ABI_ADDITION_VERSION=$(cat "$dir/LAST_ABI_ADDITION_VERSION") |
203 | +export LAST_ABI_ADDITION_QT_VERSION=$(cat "$dir/LAST_ABI_ADDITION_QT-VERSION") |
204 | +[ -n "$LAST_ABI_ADDITION_VERSION" ] |
205 | +[ -n "$LAST_ABI_ADDITION_QT_VERSION" ] |
206 | |
207 | process() |
208 | { |
209 | @@ -106,7 +110,7 @@ |
210 | "$dir/control" |
211 | } |
212 | |
213 | -# Generate the install files, naming them according to the soversion. |
214 | +# Generate the install files. |
215 | |
216 | # Install file for binary package |
217 | process "$dir/libunity-scopes.install.in" \ |
218 | @@ -118,10 +122,11 @@ |
219 | |
220 | # Shlibs file |
221 | process "$dir/libunity-scopes.shlibs.in" \ |
222 | - >"$dir/libunity-scopes-${UNITY_SCOPES_FULL_VERSION}.shlibs" |
223 | + >"$dir/libunity-scopes-${UNITY_SCOPES_MAJOR_MINOR}.shlibs" |
224 | |
225 | +# Shlibs file for qt |
226 | process "$dir/libunity-scopes-qt.shlibs.in" \ |
227 | - >"$dir/libunity-scopes-qt${UNITY_SCOPES_QT_FULL_VERSION}.shlibs" |
228 | + >"$dir/libunity-scopes-qt${UNITY_SCOPES_QT_MAJOR_MINOR}.shlibs" |
229 | |
230 | # Install file for qt binary package |
231 | process "$dir/libunity-scopes-qt.install.in" \ |
232 | |
233 | === modified file 'debian/changelog' |
234 | --- debian/changelog 2016-06-17 07:27:25 +0000 |
235 | +++ debian/changelog 2016-09-09 12:41:03 +0000 |
236 | @@ -1,3 +1,22 @@ |
237 | +unity-scopes-api (1.0.7-0ubuntu1) UNRELEASED; urgency=medium |
238 | + |
239 | + [ Marcus Tomlinson ] |
240 | + * Fixed potential login deadlock in OnlineAccountClient. |
241 | + * Increased upper timeout limits to 60s to assist scope-harness testing on slow builders. |
242 | + |
243 | + [ Michi Henning ] |
244 | + * Fixes for building with Florian Boucault's crossbuilder. |
245 | + * Fix for bug #1548718: Need to update micro version in shlibs file when symbols are added |
246 | + |
247 | + [ Pawel Stolowski ] |
248 | + * Marked the push(Filters const&, FilterState const&) method of SearchReply |
249 | + and SearchListenerBase as deprecated and provided push methods which take |
250 | + the Filters argument only. |
251 | + * Fixed Yakkety build by adding missing #includes |
252 | + * Fixed arm64 build by temporarily disabling SmartScopesClient_test |
253 | + |
254 | + -- Pawel Stolowski <pawel.stolowski@canonical.com> Tue, 28 Jun 2016 10:11:22 +0200 |
255 | + |
256 | unity-scopes-api (1.0.6+16.10.20160617-0ubuntu1) yakkety; urgency=medium |
257 | |
258 | [ Marcus Tomlinson ] |
259 | |
260 | === modified file 'debian/control' |
261 | --- debian/control 2016-06-17 07:27:25 +0000 |
262 | +++ debian/control 2016-09-09 12:41:03 +0000 |
263 | @@ -6,8 +6,8 @@ |
264 | Source: unity-scopes-api |
265 | Priority: optional |
266 | Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> |
267 | -Build-Depends: abigail-tools | libabigail-tools, |
268 | - binutils, |
269 | +Build-Depends: abigail-tools <!nocheck> | libabigail-tools <!nocheck>, |
270 | + binutils:native, |
271 | capnproto, |
272 | click-dev (>= 0.2.2), |
273 | cmake, |
274 | @@ -37,9 +37,9 @@ |
275 | lsb-release, |
276 | lttng-tools, |
277 | pkg-config, |
278 | - python3:any, |
279 | - python3-dbusmock, |
280 | - python-tornado, |
281 | + python3 <!nocheck>, |
282 | + python3-dbusmock <!nocheck>, |
283 | + python-tornado <!nocheck>, |
284 | valgrind, |
285 | Standards-Version: 3.9.6 |
286 | XS-Testsuite: autopkgtest |
287 | |
288 | === modified file 'debian/control.in' |
289 | --- debian/control.in 2016-04-06 23:27:51 +0000 |
290 | +++ debian/control.in 2016-09-09 12:41:03 +0000 |
291 | @@ -1,8 +1,8 @@ |
292 | Source: unity-scopes-api |
293 | Priority: optional |
294 | Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> |
295 | -Build-Depends: abigail-tools | libabigail-tools, |
296 | - binutils, |
297 | +Build-Depends: abigail-tools <!nocheck> | libabigail-tools <!nocheck>, |
298 | + binutils:native, |
299 | capnproto, |
300 | click-dev (>= 0.2.2), |
301 | cmake, |
302 | @@ -32,9 +32,9 @@ |
303 | lsb-release, |
304 | lttng-tools, |
305 | pkg-config, |
306 | - python3:any, |
307 | - python3-dbusmock, |
308 | - python-tornado, |
309 | + python3 <!nocheck>, |
310 | + python3-dbusmock <!nocheck>, |
311 | + python-tornado <!nocheck>, |
312 | valgrind, |
313 | Standards-Version: 3.9.6 |
314 | XS-Testsuite: autopkgtest |
315 | |
316 | === modified file 'debian/libunity-scopes-qt.shlibs.in' |
317 | --- debian/libunity-scopes-qt.shlibs.in 2015-09-23 05:44:42 +0000 |
318 | +++ debian/libunity-scopes-qt.shlibs.in 2016-09-09 12:41:03 +0000 |
319 | @@ -1,1 +1,1 @@ |
320 | -libunity-scopes-qt @UNITY_SCOPES_QT_SOVERSION@ libunity-scopes-qt@UNITY_SCOPES_QT_SOVERSION@ (>= @UNITY_SCOPES_QT_MAJOR_MINOR@) |
321 | +libunity-scopes-qt @UNITY_SCOPES_QT_SOVERSION@ libunity-scopes-qt@UNITY_SCOPES_QT_SOVERSION@ (>= @LAST_ABI_ADDITION_QT_VERSION@) |
322 | |
323 | === modified file 'debian/libunity-scopes.shlibs.in' |
324 | --- debian/libunity-scopes.shlibs.in 2015-09-23 05:44:42 +0000 |
325 | +++ debian/libunity-scopes.shlibs.in 2016-09-09 12:41:03 +0000 |
326 | @@ -1,1 +1,1 @@ |
327 | -libunity-scopes @UNITY_SCOPES_SOVERSION@ libunity-scopes@UNITY_SCOPES_SOVERSION@ (>= @UNITY_SCOPES_MAJOR_MINOR@) |
328 | +libunity-scopes @UNITY_SCOPES_SOVERSION@ libunity-scopes@UNITY_SCOPES_SOVERSION@ (>= @LAST_ABI_ADDITION_VERSION@) |
329 | |
330 | === modified file 'debian/source/format' |
331 | --- debian/source/format 2015-09-08 02:29:27 +0000 |
332 | +++ debian/source/format 2016-09-09 12:41:03 +0000 |
333 | @@ -1,1 +1,1 @@ |
334 | -3.0 (quilt) |
335 | +3.0 (native) |
336 | |
337 | === modified file 'include/unity/scopes/SearchListenerBase.h' |
338 | --- include/unity/scopes/SearchListenerBase.h 2015-09-01 22:19:45 +0000 |
339 | +++ include/unity/scopes/SearchListenerBase.h 2016-09-09 12:41:03 +0000 |
340 | @@ -96,10 +96,19 @@ |
341 | /** |
342 | \brief Called once by the scopes to send all the filters and their state. |
343 | |
344 | + \deprecated Please override the push(Filters& const) method instead. This method will be removed from future releases. |
345 | + |
346 | The default implementation does nothing. |
347 | */ |
348 | virtual void push(Filters const& filters, FilterState const& filter_state); |
349 | |
350 | + /** |
351 | + \brief Called once by the scope to send all filters and their states. |
352 | + |
353 | + The default implementation does nothing. |
354 | + */ |
355 | + virtual void push(Filters const& filters); |
356 | + |
357 | protected: |
358 | /// @cond |
359 | SearchListenerBase(); |
360 | |
361 | === modified file 'include/unity/scopes/SearchReply.h' |
362 | --- include/unity/scopes/SearchReply.h 2015-10-29 02:35:50 +0000 |
363 | +++ include/unity/scopes/SearchReply.h 2016-09-09 12:41:03 +0000 |
364 | @@ -139,7 +139,8 @@ |
365 | virtual bool push(experimental::Annotation const& annotation) = 0; |
366 | |
367 | /** |
368 | - \brief Sends all filters and their state to the source of a query. |
369 | + \brief Sends all filters and their states to the source of a query. |
370 | + \deprecated Sending filter state back to the UI is deprecated and will be removed from future releases. Please use the push(Filters const&) method instead. |
371 | \return True if the filters were accepted, false otherwise. |
372 | */ |
373 | virtual bool push(Filters const& filters, FilterState const& filter_state) = 0; |
374 | @@ -190,6 +191,12 @@ |
375 | */ |
376 | virtual void push_surfacing_results_from_cache() = 0; |
377 | |
378 | + /** |
379 | + \brief Sends all filter definitions to the source of a query. |
380 | + \return True if the filters were accepted, false otherwise. |
381 | + */ |
382 | + virtual bool push(Filters const& filters) = 0; |
383 | + |
384 | protected: |
385 | /// @cond |
386 | SearchReply(); |
387 | |
388 | === modified file 'include/unity/scopes/internal/SearchReplyImpl.h' |
389 | --- include/unity/scopes/internal/SearchReplyImpl.h 2015-02-27 05:28:09 +0000 |
390 | +++ include/unity/scopes/internal/SearchReplyImpl.h 2016-09-09 12:41:03 +0000 |
391 | @@ -80,6 +80,8 @@ |
392 | |
393 | virtual void push_surfacing_results_from_cache() noexcept override; |
394 | |
395 | + virtual bool push(unity::scopes::Filters const& filters) override; |
396 | + |
397 | private: |
398 | bool push(Category::SCPtr category); |
399 | void write_cached_results() noexcept; |
400 | @@ -94,7 +96,6 @@ |
401 | |
402 | Department::SCPtr cached_departments_; |
403 | unity::scopes::Filters cached_filters_; |
404 | - unity::scopes::FilterState cached_filter_state_; |
405 | std::vector<unity::scopes::CategorisedResult> cached_results_; |
406 | std::mutex mutex_; |
407 | }; |
408 | |
409 | === modified file 'include/unity/scopes/testing/MockScope.h' |
410 | --- include/unity/scopes/testing/MockScope.h 2015-05-29 10:17:42 +0000 |
411 | +++ include/unity/scopes/testing/MockScope.h 2016-09-09 12:41:03 +0000 |
412 | @@ -19,6 +19,8 @@ |
413 | #pragma once |
414 | |
415 | #include <unity/scopes/Scope.h> |
416 | +#include <unity/scopes/SearchMetadata.h> |
417 | +#include <unity/scopes/ActionMetadata.h> |
418 | |
419 | #include <unity/scopes/testing/MockObject.h> |
420 | |
421 | |
422 | === modified file 'include/unity/scopes/testing/MockSearchReply.h' |
423 | --- include/unity/scopes/testing/MockSearchReply.h 2015-04-10 10:10:06 +0000 |
424 | +++ include/unity/scopes/testing/MockSearchReply.h 2016-09-09 12:41:03 +0000 |
425 | @@ -66,6 +66,7 @@ |
426 | MOCK_METHOD1(lookup_category, Category::SCPtr(std::string const&)); |
427 | MOCK_METHOD1(push, bool(CategorisedResult const&)); |
428 | MOCK_METHOD2(push, bool(Filters const&, FilterState const&)); |
429 | + MOCK_METHOD1(push, bool(Filters const&)); |
430 | MOCK_METHOD1(push, bool(experimental::Annotation const& annotation)); |
431 | MOCK_METHOD0(push_surfacing_results_from_cache, void()); |
432 | |
433 | |
434 | === modified file 'include/unity/scopes/utility/internal/BufferedSearchReplyImpl.h' |
435 | --- include/unity/scopes/utility/internal/BufferedSearchReplyImpl.h 2015-02-27 05:28:09 +0000 |
436 | +++ include/unity/scopes/utility/internal/BufferedSearchReplyImpl.h 2016-09-09 12:41:03 +0000 |
437 | @@ -78,6 +78,7 @@ |
438 | std::string to_string() override; |
439 | |
440 | void flush(); |
441 | + bool push(unity::scopes::Filters const& filters) override; |
442 | |
443 | private: |
444 | std::mutex mutex_; |
445 | |
446 | === modified file 'src/scopes/SearchListenerBase.cpp' |
447 | --- src/scopes/SearchListenerBase.cpp 2014-06-17 15:07:13 +0000 |
448 | +++ src/scopes/SearchListenerBase.cpp 2016-09-09 12:41:03 +0000 |
449 | @@ -44,6 +44,11 @@ |
450 | // Intentionally empty: "do nothing" default implementation. |
451 | } |
452 | |
453 | +void SearchListenerBase::push(Filters const& /* filters */) |
454 | +{ |
455 | + // Intentionally empty: "do nothing" default implementation. |
456 | +} |
457 | + |
458 | void SearchListenerBase::push(Category::SCPtr const& /* category */) |
459 | { |
460 | // Intentionally empty: "do nothing" default implementation. |
461 | |
462 | === modified file 'src/scopes/internal/OnlineAccountClientImpl.cpp' |
463 | --- src/scopes/internal/OnlineAccountClientImpl.cpp 2016-03-16 12:08:16 +0000 |
464 | +++ src/scopes/internal/OnlineAccountClientImpl.cpp 2016-09-09 12:41:03 +0000 |
465 | @@ -545,12 +545,15 @@ |
466 | // (ensures that accounts_ is up to date) |
467 | std::shared_ptr<GMainLoop> event_loop; |
468 | event_loop.reset(g_main_loop_new(main_loop_context_.get(), true), g_main_loop_unref); |
469 | - while(info->session) |
470 | + |
471 | + int ms_elapsed = 0; |
472 | + while (info->session && ms_elapsed < 5000) |
473 | { |
474 | // We need to wait inside an event loop to allow for the main application loop to |
475 | // process its pending events |
476 | std::shared_ptr<GSource> source; |
477 | source.reset(g_timeout_source_new(10), g_source_unref); |
478 | + ms_elapsed += 10; |
479 | g_source_set_callback(source.get(), wake_up_event_loop_cb, event_loop.get(), NULL); |
480 | g_source_attach(source.get(), main_loop_context_.get()); |
481 | |
482 | @@ -560,6 +563,15 @@ |
483 | lock.lock(); |
484 | info_lock.lock(); |
485 | } |
486 | + |
487 | + // If the login session is still not responding, we cancel it |
488 | + if (info->session) |
489 | + { |
490 | + std::cerr << "OnlineAccountClientImpl::flush_pending_session(): login for account: " |
491 | + << info->account_id << " is not responding. Canceling session." << std::endl; |
492 | + signon_auth_session_cancel(info->session.get()); |
493 | + info->session = nullptr; |
494 | + } |
495 | } |
496 | |
497 | void OnlineAccountClientImpl::main_loop_state_notify(bool is_running) |
498 | |
499 | === modified file 'src/scopes/internal/RegistryConfig.cpp' |
500 | --- src/scopes/internal/RegistryConfig.cpp 2015-08-04 04:56:01 +0000 |
501 | +++ src/scopes/internal/RegistryConfig.cpp 2016-09-09 12:41:03 +0000 |
502 | @@ -71,9 +71,9 @@ |
503 | throw ConfigException(configfile + ": " + scoperunner_path_key + " must be an absolute path"); |
504 | } |
505 | process_timeout_ = get_optional_int(registry_config_group, process_timeout_key, DFLT_PROCESS_TIMEOUT); |
506 | - if (process_timeout_ < 10 || process_timeout_ > 15000) |
507 | + if (process_timeout_ < 10 || process_timeout_ > 60000) |
508 | { |
509 | - throw_ex("Illegal value (" + to_string(process_timeout_) + ") for " + process_timeout_key + ": value must be 10-15000 ms"); |
510 | + throw_ex("Illegal value (" + to_string(process_timeout_) + ") for " + process_timeout_key + ": value must be 10-60000 ms"); |
511 | } |
512 | |
513 | KnownEntries const known_entries = { |
514 | |
515 | === modified file 'src/scopes/internal/ResultReplyObject.cpp' |
516 | --- src/scopes/internal/ResultReplyObject.cpp 2016-02-24 16:49:34 +0000 |
517 | +++ src/scopes/internal/ResultReplyObject.cpp 2016-09-09 12:41:03 +0000 |
518 | @@ -74,16 +74,11 @@ |
519 | } |
520 | |
521 | Filters const filters = FilterBaseImpl::deserialize_filters(it->second.get_array(), groups); |
522 | - it = data.find("filter_state"); |
523 | - if (it != data.end()) |
524 | - { |
525 | - auto filter_state = FilterStateImpl::deserialize(it->second.get_dict()); |
526 | - receiver_->push(filters, filter_state); |
527 | - } |
528 | - else |
529 | - { |
530 | - throw InvalidArgumentException("ResultReplyObject::push(): filters present but missing filter_state data"); |
531 | - } |
532 | + |
533 | + // temporarily support both variants of push until the one supporting filter state gets dropped. |
534 | + FilterState filter_state; |
535 | + receiver_->push(filters, filter_state); |
536 | + receiver_->push(filters); |
537 | } |
538 | |
539 | it = data.find("category"); |
540 | |
541 | === modified file 'src/scopes/internal/SearchReplyImpl.cpp' |
542 | --- src/scopes/internal/SearchReplyImpl.cpp 2016-02-25 16:08:01 +0000 |
543 | +++ src/scopes/internal/SearchReplyImpl.cpp 2016-09-09 12:41:03 +0000 |
544 | @@ -170,7 +170,12 @@ |
545 | return true; |
546 | } |
547 | |
548 | -bool SearchReplyImpl::push(unity::scopes::Filters const& filters, unity::scopes::FilterState const& filter_state) |
549 | +bool SearchReplyImpl::push(unity::scopes::Filters const& filters, unity::scopes::FilterState const&) |
550 | +{ |
551 | + return push(filters); |
552 | +} |
553 | + |
554 | +bool SearchReplyImpl::push(unity::scopes::Filters const& filters) |
555 | { |
556 | // basic consistency check |
557 | try |
558 | @@ -186,7 +191,6 @@ |
559 | { |
560 | lock_guard<mutex> lock(mutex_); |
561 | cached_filters_ = filters; |
562 | - cached_filter_state_ = filter_state; |
563 | } |
564 | |
565 | VariantMap var; |
566 | @@ -196,7 +200,6 @@ |
567 | var["filter_groups"] = filter_groups; |
568 | } |
569 | var["filters"] = internal::FilterBaseImpl::serialize_filters(filters); |
570 | - var["filter_state"] = filter_state.serialize(); |
571 | return ReplyImpl::push(var); |
572 | } |
573 | |
574 | @@ -260,7 +263,6 @@ |
575 | departments = cached_departments_->serialize(); |
576 | } |
577 | auto filters = internal::FilterBaseImpl::serialize_filters(cached_filters_); |
578 | - auto filter_state = cached_filter_state_.serialize(); |
579 | VariantArray categories = cat_registry_->serialize(); |
580 | VariantArray results; |
581 | for (auto const& r : cached_results_) |
582 | @@ -279,7 +281,6 @@ |
583 | } |
584 | |
585 | vm["filters"] = move(filters); |
586 | - vm["filter_state"] = move(filter_state); |
587 | |
588 | vm["results"] = move(results); |
589 | string const json = Variant(move(vm)).serialize_json(); |
590 | @@ -371,13 +372,6 @@ |
591 | } |
592 | auto filter_array = it->second.get_array(); |
593 | |
594 | - it = vm.find("filter_state"); |
595 | - if (it == vm.end()) |
596 | - { |
597 | - throw unity::scopes::NotFoundException("malformed cache file", "filter_state"); |
598 | - } |
599 | - auto filter_state_dict = it->second.get_dict(); |
600 | - |
601 | it = vm.find("results"); |
602 | if (it == vm.end()) |
603 | { |
604 | @@ -408,8 +402,7 @@ |
605 | } |
606 | |
607 | auto filters = FilterBaseImpl::deserialize_filters(move(filter_array), groups); |
608 | - auto filter_state = FilterStateImpl::deserialize(move(filter_state_dict)); |
609 | - push(filters, filter_state); |
610 | + push(filters); |
611 | |
612 | for (auto const& r : result_array) |
613 | { |
614 | |
615 | === modified file 'src/scopes/internal/zmq_middleware/ZmqConfig.cpp' |
616 | --- src/scopes/internal/zmq_middleware/ZmqConfig.cpp 2015-07-01 10:59:49 +0000 |
617 | +++ src/scopes/internal/zmq_middleware/ZmqConfig.cpp 2016-09-09 12:41:03 +0000 |
618 | @@ -80,21 +80,21 @@ |
619 | } |
620 | |
621 | registry_timeout_ = get_optional_int(zmq_config_group, registry_timeout_key, DFLT_ZMQ_REGISTRY_TIMEOUT); |
622 | - if (registry_timeout_ < 10 || registry_timeout_ > 15000) |
623 | + if (registry_timeout_ < 10 || registry_timeout_ > 60000) |
624 | { |
625 | - throw_ex("Illegal value (" + to_string(registry_timeout_) + ") for " + registry_timeout_key + ": value must be 10-15000"); |
626 | + throw_ex("Illegal value (" + to_string(registry_timeout_) + ") for " + registry_timeout_key + ": value must be 10-60000"); |
627 | } |
628 | |
629 | locate_timeout_ = get_optional_int(zmq_config_group, locate_timeout_key, DFLT_ZMQ_LOCATE_TIMEOUT); |
630 | - if (locate_timeout_ < 10 || locate_timeout_ > 15000) |
631 | + if (locate_timeout_ < 10 || locate_timeout_ > 60000) |
632 | { |
633 | - throw_ex("Illegal value (" + to_string(locate_timeout_) + ") for " + locate_timeout_key + ": value must be 10-15000"); |
634 | + throw_ex("Illegal value (" + to_string(locate_timeout_) + ") for " + locate_timeout_key + ": value must be 10-60000"); |
635 | } |
636 | |
637 | child_scopes_timeout_ = get_optional_int(zmq_config_group, child_scopes_timeout_key, DFLT_ZMQ_CHILDSCOPES_TIMEOUT); |
638 | - if (child_scopes_timeout_ < 10 || child_scopes_timeout_ > 15000) |
639 | + if (child_scopes_timeout_ < 10 || child_scopes_timeout_ > 60000) |
640 | { |
641 | - throw_ex("Illegal value (" + to_string(child_scopes_timeout_) + ") for " + child_scopes_timeout_key + ": value must be 10-15000"); |
642 | + throw_ex("Illegal value (" + to_string(child_scopes_timeout_) + ") for " + child_scopes_timeout_key + ": value must be 10-60000"); |
643 | } |
644 | |
645 | registry_endpoint_dir_ = get_optional_string(zmq_config_group, registry_endpoint_dir_key); |
646 | |
647 | === modified file 'src/scopes/testing/InProcessBenchmark.cpp' |
648 | --- src/scopes/testing/InProcessBenchmark.cpp 2015-01-09 07:10:07 +0000 |
649 | +++ src/scopes/testing/InProcessBenchmark.cpp 2016-09-09 12:41:03 +0000 |
650 | @@ -204,6 +204,11 @@ |
651 | return true; |
652 | } |
653 | |
654 | + bool push(unity::scopes::Filters const&) override |
655 | + { |
656 | + return true; |
657 | + } |
658 | + |
659 | bool push(unity::scopes::experimental::Annotation const&) override |
660 | { |
661 | return true; |
662 | |
663 | === modified file 'src/scopes/utility/internal/BufferedSearchReplyImpl.cpp' |
664 | --- src/scopes/utility/internal/BufferedSearchReplyImpl.cpp 2015-02-27 05:28:09 +0000 |
665 | +++ src/scopes/utility/internal/BufferedSearchReplyImpl.cpp 2016-09-09 12:41:03 +0000 |
666 | @@ -92,6 +92,11 @@ |
667 | return upstream_->push(filters, filter_state); |
668 | } |
669 | |
670 | +bool BufferedSearchReplyImpl::push(unity::scopes::Filters const& filters) |
671 | +{ |
672 | + return upstream_->push(filters); |
673 | +} |
674 | + |
675 | void BufferedSearchReplyImpl::push_surfacing_results_from_cache() noexcept |
676 | { |
677 | upstream_->push_surfacing_results_from_cache(); |
678 | |
679 | === modified file 'test/gtest/scopes/Filters/Filters_test.cpp' |
680 | --- test/gtest/scopes/Filters/Filters_test.cpp 2016-03-03 11:46:25 +0000 |
681 | +++ test/gtest/scopes/Filters/Filters_test.cpp 2016-09-09 12:41:03 +0000 |
682 | @@ -66,12 +66,19 @@ |
683 | class SearchReceiver : public SearchListenerBase, public WaitUntilFinished |
684 | { |
685 | public: |
686 | - virtual void push(CategorisedResult /* result */) override {} |
687 | - |
688 | - virtual void push(Filters const& filters, FilterState const& filter_state) override |
689 | + virtual void push(CategorisedResult result) override |
690 | + { |
691 | + result_uri = result.uri(); |
692 | + } |
693 | + |
694 | + virtual void push(Filters const& filters, FilterState const&) override |
695 | + { |
696 | + this->filters2 = filters; |
697 | + } |
698 | + |
699 | + virtual void push(Filters const& filters) override |
700 | { |
701 | this->filters = filters; |
702 | - this->filter_state = filter_state; |
703 | } |
704 | |
705 | virtual void finished(CompletionDetails const& details) override |
706 | @@ -81,7 +88,8 @@ |
707 | } |
708 | |
709 | Filters filters; |
710 | - FilterState filter_state; |
711 | + Filters filters2; |
712 | + std::string result_uri; |
713 | }; |
714 | |
715 | template <typename ScopeType> |
716 | @@ -135,8 +143,13 @@ |
717 | auto ctrl = scope->search("test", hints, receiver); |
718 | receiver->wait_until_finished(); |
719 | |
720 | - auto filter_state = receiver->filter_state; // copy filter state, it will be sent with 2nd query |
721 | + EXPECT_EQ("no options active", receiver->result_uri); |
722 | + |
723 | + FilterState filter_state; |
724 | { |
725 | + // make sure the deprecated API push method for filters still works |
726 | + ASSERT_EQ(1u, receiver->filters2.size()); |
727 | + |
728 | auto filters = receiver->filters; |
729 | ASSERT_EQ(1u, filters.size()); |
730 | EXPECT_EQ("f1", filters.front()->id()); |
731 | @@ -159,11 +172,9 @@ |
732 | receiver->wait_until_finished(); |
733 | { |
734 | auto filters = receiver->filters; |
735 | - auto filter_state2 = receiver->filter_state; |
736 | + ASSERT_EQ(1u, filters.size()); |
737 | auto selector = std::dynamic_pointer_cast<const OptionSelectorFilter>(filters.front()); |
738 | - ASSERT_EQ(1u, selector->active_options(filter_state2).size()); |
739 | - auto option1 = *(selector->active_options(filter_state2).begin()); |
740 | - EXPECT_EQ("o1", option1->id()); |
741 | + EXPECT_EQ("option o1 active", receiver->result_uri); |
742 | } |
743 | } |
744 | |
745 | |
746 | === modified file 'test/gtest/scopes/Filters/TestScope.h' |
747 | --- test/gtest/scopes/Filters/TestScope.h 2016-02-25 16:08:01 +0000 |
748 | +++ test/gtest/scopes/Filters/TestScope.h 2016-09-09 12:41:03 +0000 |
749 | @@ -21,6 +21,7 @@ |
750 | #include <unity/scopes/CategorisedResult.h> |
751 | #include <unity/scopes/Category.h> |
752 | #include <unity/scopes/FilterGroup.h> |
753 | +#include <unity/scopes/FilterOption.h> |
754 | #include <unity/scopes/OptionSelectorFilter.h> |
755 | #include <unity/scopes/ScopeBase.h> |
756 | #include <unity/scopes/SearchReply.h> |
757 | @@ -49,11 +50,27 @@ |
758 | filter->add_option("o2", "Option 2"); |
759 | filters.push_back(filter); |
760 | auto active_opts = filter->active_options(query().filter_state()); |
761 | - reply->push(filters, query().filter_state()); // send unmodified state back |
762 | + |
763 | + if (query().query_string() == "test") |
764 | + { |
765 | + reply->push(filters); |
766 | + } |
767 | + else |
768 | + { |
769 | + // use the deprecated push call |
770 | + reply->push(filters, query().filter_state()); |
771 | + } |
772 | |
773 | auto cat = reply->register_category("cat1", "Category 1", ""); |
774 | CategorisedResult res(cat); |
775 | - res.set_uri("uri"); |
776 | + if (active_opts.size() == 1) |
777 | + { |
778 | + res.set_uri("option " + (*(active_opts.begin()))->id() + " active"); |
779 | + } |
780 | + else |
781 | + { |
782 | + res.set_uri("no options active"); |
783 | + } |
784 | res.set_dnd_uri("dnd_uri"); |
785 | reply->push(res); |
786 | } |
787 | |
788 | === modified file 'test/gtest/scopes/ResultCache/ResultCache_test.cpp' |
789 | --- test/gtest/scopes/ResultCache/ResultCache_test.cpp 2016-02-25 17:28:22 +0000 |
790 | +++ test/gtest/scopes/ResultCache/ResultCache_test.cpp 2016-09-09 12:41:03 +0000 |
791 | @@ -46,11 +46,10 @@ |
792 | dept_ = parent; |
793 | } |
794 | |
795 | - virtual void push(Filters const& filters, FilterState const& filter_state) override |
796 | + virtual void push(Filters const& filters) override |
797 | { |
798 | lock_guard<mutex> lock(mutex_); |
799 | filters_ = filters; |
800 | - filter_state_ = filter_state; |
801 | } |
802 | |
803 | virtual void push(CategorisedResult result) override |
804 | @@ -86,12 +85,6 @@ |
805 | return filters_; |
806 | } |
807 | |
808 | - FilterState filter_state() const |
809 | - { |
810 | - lock_guard<mutex> lock(mutex_); |
811 | - return filter_state_; |
812 | - } |
813 | - |
814 | CategorisedResult::SCPtr result() const |
815 | { |
816 | lock_guard<mutex> lock(mutex_); |
817 | @@ -101,7 +94,6 @@ |
818 | private: |
819 | Department::SCPtr dept_; |
820 | Filters filters_; |
821 | - FilterState filter_state_; |
822 | CategorisedResult::SCPtr result_; |
823 | bool query_complete_; |
824 | mutable mutex mutex_; |
825 | @@ -248,9 +240,6 @@ |
826 | auto osf = dynamic_pointer_cast<OptionSelectorFilter const>(f); |
827 | ASSERT_TRUE(osf != nullptr); |
828 | EXPECT_EQ("Choose an option", osf->label()); |
829 | - auto fs = receiver->filter_state(); |
830 | - EXPECT_TRUE(fs.has_filter("f1")); |
831 | - EXPECT_TRUE(osf->has_active_option(fs)); |
832 | |
833 | // Cache file must still be there. |
834 | boost::system::error_code ec; |
835 | @@ -290,9 +279,6 @@ |
836 | auto osf = dynamic_pointer_cast<OptionSelectorFilter const>(f); |
837 | ASSERT_TRUE(osf != nullptr); |
838 | EXPECT_EQ("Choose an option", osf->label()); |
839 | - auto fs = receiver->filter_state(); |
840 | - EXPECT_TRUE(fs.has_filter("f1")); |
841 | - EXPECT_TRUE(osf->has_active_option(fs)); |
842 | |
843 | // Cache file must still be there. |
844 | boost::system::error_code ec; |
845 | @@ -344,9 +330,6 @@ |
846 | auto osf = dynamic_pointer_cast<OptionSelectorFilter const>(f); |
847 | ASSERT_TRUE(osf != nullptr); |
848 | EXPECT_EQ("Choose an option", osf->label()); |
849 | - auto fs = receiver->filter_state(); |
850 | - EXPECT_TRUE(fs.has_filter("f1")); |
851 | - EXPECT_TRUE(osf->has_active_option(fs)); |
852 | |
853 | // New cache file must have been created |
854 | boost::system::error_code ec; |
855 | @@ -414,20 +397,6 @@ |
856 | EXPECT_TRUE(boost::filesystem::exists(TEST_RUNTIME_PATH "/unconfined/CacheScope/.surfacing_cache", ec)); |
857 | } |
858 | |
859 | -TEST_F(CacheScopeTest, missing_filter_state) |
860 | -{ |
861 | - // Get coverage on missing filters_state entry |
862 | - system("cp " TEST_SOURCE_PATH "/no_filter_state_cache " TEST_RUNTIME_PATH "/unconfined/CacheScope/.surfacing_cache"); |
863 | - auto receiver = make_shared<Receiver>(); |
864 | - scope()->search("", SearchMetadata("unused", "unused"), receiver); |
865 | - receiver->wait_until_finished(); |
866 | - EXPECT_EQ(receiver->result(), nullptr); |
867 | - |
868 | - // Cache file must still be there, but decode will have failed. |
869 | - boost::system::error_code ec; |
870 | - EXPECT_TRUE(boost::filesystem::exists(TEST_RUNTIME_PATH "/unconfined/CacheScope/.surfacing_cache", ec)); |
871 | -} |
872 | - |
873 | TEST_F(CacheScopeTest, missing_results) |
874 | { |
875 | // Get coverage on missing results entry |
876 | |
877 | === removed file 'test/gtest/scopes/ResultCache/no_filter_state_cache' |
878 | --- test/gtest/scopes/ResultCache/no_filter_state_cache 2015-02-05 09:35:42 +0000 |
879 | +++ test/gtest/scopes/ResultCache/no_filter_state_cache 1970-01-01 00:00:00 +0000 |
880 | @@ -1,1 +0,0 @@ |
881 | -{"categories":[{"icon":"","id":"CacheScope","renderer_template":"\n {\n \"schema-version\":1,\n \"template\":\n {\n \"category-layout\":\"grid\"\n },\n \"components\":\n {\n \"title\":\"title\",\n \"art\":\"art\"\n }\n }\n ","title":""}],"departments":{"departments":[{"label":"Sub","query":{"department_id":"sub","filter_state":{},"query_string":"","scope":"CacheScope"}}],"label":"Top","query":{"department_id":"","filter_state":{},"query_string":"","scope":"CacheScope"}},"filters":[{"filter_type":"option_selector","id":"f1","label":"Choose an option","multi_select":false,"options":[{"id":"o1","label":"Option 1"},{"id":"o2","label":"Option 2"}]}],"results":[{"attrs":{"title":"","uri":"uri"},"internal":{"cat_id":"CacheScope"}}]} |
882 | |
883 | === modified file 'test/gtest/scopes/internal/smartscopes/CMakeLists.txt' |
884 | --- test/gtest/scopes/internal/smartscopes/CMakeLists.txt 2014-08-28 11:18:44 +0000 |
885 | +++ test/gtest/scopes/internal/smartscopes/CMakeLists.txt 2016-09-09 12:41:03 +0000 |
886 | @@ -1,4 +1,8 @@ |
887 | add_subdirectory(HttpClient) |
888 | -add_subdirectory(SmartScopesClient) |
889 | +if (NOT ${CMAKE_LIBRARY_ARCHITECTURE} MATCHES "aarch64") |
890 | + add_subdirectory(SmartScopesClient) |
891 | +else() |
892 | + message("Skipping SmartScopesClient test on aarch64 - see LP #1615004") |
893 | +endif() |
894 | add_subdirectory(smartscopesproxy) |
895 | add_subdirectory(SSConfig) |
Would be nice to get rid of this warning:
/home/michi/ src/unity- scopes- api/staging/ RELEASE_ NOTES.md: 11: warning: explicit link request to 'includes' could not be resolved
Also, could we include https:/ /code.launchpad .net/~michihenn ing/unity- scopes- api/shlib- fix/+merge/ 305297
This will be needed for the MIR.