Merge lp:~aacid/unity8/dash_activation_no_special_casing into lp:unity8
- dash_activation_no_special_casing
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Paweł Stołowski |
Approved revision: | 1859 |
Merged at revision: | 1905 |
Proposed branch: | lp:~aacid/unity8/dash_activation_no_special_casing |
Merge into: | lp:unity8 |
Diff against target: |
275 lines (+71/-38) 10 files modified
debian/changelog (+6/-0) debian/control (+2/-2) qml/Dash/GenericScopeView.qml (+50/-26) qml/Dash/PreviewListView.qml (+2/-1) qml/Dash/ScopesList.qml (+1/-1) tests/mocks/Unity/CMakeLists.txt (+1/-1) tests/mocks/Unity/fake_scope.cpp (+5/-3) tests/mocks/Unity/fake_scope.h (+2/-2) tests/mocks/Unity/fake_scopesoverview.cpp (+1/-1) tests/mocks/Unity/fake_scopesoverview.h (+1/-1) |
To merge this branch: | bzr merge lp:~aacid/unity8/dash_activation_no_special_casing |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Paweł Stołowski (community) | Approve | ||
Andrea Cimitan (community) | Approve | ||
PS Jenkins bot (community) | continuous-integration | Needs Fixing | |
Review via email: mp+264024@code.launchpad.net |
Commit message
Let the scopes/
Description of the change
* Are there any related MPs required for this MP to build/function as expected?
https:/
* Did you perform an exploratory manual test run of your code change and any related functionality?
Yes
* Did you make sure that your branch does not contain spurious tags?
Yes
* If you changed the packaging (debian), did you subscribe the ubuntu-unity team to this MP?
Not needed
* If you changed the UI, has there been a design review?
N/A
PS Jenkins bot (ps-jenkins) wrote : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1853
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1854
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1855
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1857
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
Andrea Cimitan (cimi) : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1858
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
Andrea Cimitan (cimi) wrote : | # |
* Did you perform an exploratory manual test run of the code change and any related functionality?
yes
* Did CI run pass? If not, please explain why.
unrelated
* Did you make sure that the branch does not contain spurious tags?
y
Preview Diff
1 | === modified file 'debian/changelog' | |||
2 | --- debian/changelog 2015-07-29 12:39:01 +0000 | |||
3 | +++ debian/changelog 2015-08-06 13:06:28 +0000 | |||
4 | @@ -1,3 +1,9 @@ | |||
5 | 1 | unity8 (8.11-0ubuntu1) UNRELEASED; urgency=medium | ||
6 | 2 | |||
7 | 3 | * Increase version because of new scopes shell communication protocol | ||
8 | 4 | |||
9 | 5 | -- Albert Astals Cid <albert.astals@canonical.com> Tue, 04 Aug 2015 17:16:32 +0200 | ||
10 | 6 | |||
11 | 1 | unity8 (8.10+15.10.20150729-0ubuntu1) wily; urgency=medium | 7 | unity8 (8.10+15.10.20150729-0ubuntu1) wily; urgency=medium |
12 | 2 | 8 | ||
13 | 3 | [ CI Train Bot ] | 9 | [ CI Train Bot ] |
14 | 4 | 10 | ||
15 | === modified file 'debian/control' | |||
16 | --- debian/control 2015-07-29 12:38:53 +0000 | |||
17 | +++ debian/control 2015-08-06 13:06:28 +0000 | |||
18 | @@ -28,7 +28,7 @@ | |||
19 | 28 | libqt5xmlpatterns5-dev, | 28 | libqt5xmlpatterns5-dev, |
20 | 29 | libsystemsettings-dev, | 29 | libsystemsettings-dev, |
21 | 30 | libudev-dev, | 30 | libudev-dev, |
23 | 31 | libunity-api-dev (>= 7.98), | 31 | libunity-api-dev (>= 7.99), |
24 | 32 | libusermetricsoutput1-dev, | 32 | libusermetricsoutput1-dev, |
25 | 33 | libxcb1-dev, | 33 | libxcb1-dev, |
26 | 34 | pkg-config, | 34 | pkg-config, |
27 | @@ -128,7 +128,7 @@ | |||
28 | 128 | unity-application-impl-6, | 128 | unity-application-impl-6, |
29 | 129 | unity-notifications-impl-3, | 129 | unity-notifications-impl-3, |
30 | 130 | unity-plugin-scopes | unity-scopes-impl, | 130 | unity-plugin-scopes | unity-scopes-impl, |
32 | 131 | unity-scopes-impl-6, | 131 | unity-scopes-impl-7, |
33 | 132 | unity8-fake-env | unity-application-impl, | 132 | unity8-fake-env | unity-application-impl, |
34 | 133 | ${misc:Depends}, | 133 | ${misc:Depends}, |
35 | 134 | Breaks: unity8 (<< 7.86), | 134 | Breaks: unity8 (<< 7.86), |
36 | 135 | 135 | ||
37 | === modified file 'qml/Dash/GenericScopeView.qml' | |||
38 | --- qml/Dash/GenericScopeView.qml 2015-07-20 07:38:41 +0000 | |||
39 | +++ qml/Dash/GenericScopeView.qml 2015-08-06 13:06:28 +0000 | |||
40 | @@ -72,28 +72,39 @@ | |||
41 | 72 | pageHeaderLoader.item.resetSearch() | 72 | pageHeaderLoader.item.resetSearch() |
42 | 73 | } | 73 | } |
43 | 74 | 74 | ||
66 | 75 | function itemClicked(index, result, item, itemModel, resultsModel, limitedCategoryItemCount, categoryId) { | 75 | property var maybePreviewResult; |
67 | 76 | if (itemModel.uri.indexOf("scope://") === 0 || scope.id === "clickscope" || (scope.id === "videoaggregator" && categoryId === "myvideos-getstarted")) { | 76 | property int maybePreviewIndex; |
68 | 77 | // TODO Technically it is possible that calling activate() will make the scope emit | 77 | property var maybePreviewResultsModel; |
69 | 78 | // previewRequested so that we show a preview but there's no scope that does that yet | 78 | property int maybePreviewLimitedCategoryItemCount; |
70 | 79 | // so it's not implemented | 79 | property string maybePreviewCategoryId; |
71 | 80 | scope.activate(result) | 80 | |
72 | 81 | } else { | 81 | function clearMaybePreviewData() { |
73 | 82 | if (scope.preview(result)) { | 82 | scopeView.maybePreviewResult = undefined; |
74 | 83 | openPreview(index, resultsModel, limitedCategoryItemCount); | 83 | scopeView.maybePreviewIndex = -1; |
75 | 84 | } | 84 | scopeView.maybePreviewResultsModel = undefined; |
76 | 85 | } | 85 | scopeView.maybePreviewLimitedCategoryItemCount = -1; |
77 | 86 | } | 86 | scopeView.maybePreviewCategoryId = ""; |
78 | 87 | 87 | } | |
79 | 88 | function itemPressedAndHeld(index, result, itemModel, resultsModel, limitedCategoryItemCount, categoryId) { | 88 | |
80 | 89 | if (itemModel.uri.indexOf("scope://") !== 0 && !(scope.id === "videoaggregator" && categoryId === "myvideos-getstarted")) { | 89 | function itemClicked(index, result, itemModel, resultsModel, limitedCategoryItemCount, categoryId) { |
81 | 90 | if (scope.preview(result)) { | 90 | scopeView.maybePreviewResult = result; |
82 | 91 | openPreview(index, resultsModel, limitedCategoryItemCount); | 91 | scopeView.maybePreviewIndex = index; |
83 | 92 | } | 92 | scopeView.maybePreviewResultsModel = resultsModel; |
84 | 93 | } | 93 | scopeView.maybePreviewLimitedCategoryItemCount = limitedCategoryItemCount; |
85 | 94 | } | 94 | scopeView.maybePreviewCategoryId = categoryId; |
86 | 95 | 95 | ||
87 | 96 | function openPreview(index, resultsModel, limitedCategoryItemCount) { | 96 | scope.activate(result, categoryId); |
88 | 97 | } | ||
89 | 98 | |||
90 | 99 | function itemPressedAndHeld(index, result, resultsModel, limitedCategoryItemCount, categoryId) { | ||
91 | 100 | clearMaybePreviewData(); | ||
92 | 101 | |||
93 | 102 | if (scope.preview(result, categoryId)) { | ||
94 | 103 | openPreview(index, resultsModel, limitedCategoryItemCount, categoryId); | ||
95 | 104 | } | ||
96 | 105 | } | ||
97 | 106 | |||
98 | 107 | function openPreview(index, resultsModel, limitedCategoryItemCount, categoryId) { | ||
99 | 97 | if (limitedCategoryItemCount > 0) { | 108 | if (limitedCategoryItemCount > 0) { |
100 | 98 | previewLimitModel.model = resultsModel; | 109 | previewLimitModel.model = resultsModel; |
101 | 99 | previewLimitModel.limit = limitedCategoryItemCount; | 110 | previewLimitModel.limit = limitedCategoryItemCount; |
102 | @@ -103,6 +114,7 @@ | |||
103 | 103 | } | 114 | } |
104 | 104 | subPageLoader.initialIndex = -1; | 115 | subPageLoader.initialIndex = -1; |
105 | 105 | subPageLoader.initialIndex = index; | 116 | subPageLoader.initialIndex = index; |
106 | 117 | subPageLoader.categoryId = categoryId; | ||
107 | 106 | subPageLoader.openSubPage("preview"); | 118 | subPageLoader.openSubPage("preview"); |
108 | 107 | } | 119 | } |
109 | 108 | 120 | ||
110 | @@ -149,6 +161,16 @@ | |||
111 | 149 | target: scopeView.scope | 161 | target: scopeView.scope |
112 | 150 | onShowDash: subPageLoader.closeSubPage() | 162 | onShowDash: subPageLoader.closeSubPage() |
113 | 151 | onHideDash: subPageLoader.closeSubPage() | 163 | onHideDash: subPageLoader.closeSubPage() |
114 | 164 | onPreviewRequested: { // (QVariant const& result) | ||
115 | 165 | if (result === scopeView.maybePreviewResult) { | ||
116 | 166 | openPreview(scopeView.maybePreviewIndex, | ||
117 | 167 | scopeView.maybePreviewResultsModel, | ||
118 | 168 | scopeView.maybePreviewLimitedCategoryItemCount, | ||
119 | 169 | scopeView.maybePreviewCategoryId); | ||
120 | 170 | |||
121 | 171 | clearMaybePreviewData(); | ||
122 | 172 | } | ||
123 | 173 | } | ||
124 | 152 | } | 174 | } |
125 | 153 | 175 | ||
126 | 154 | Connections { | 176 | Connections { |
127 | @@ -357,12 +379,12 @@ | |||
128 | 357 | 379 | ||
129 | 358 | Connections { | 380 | Connections { |
130 | 359 | target: rendererLoader.item | 381 | target: rendererLoader.item |
133 | 360 | onClicked: { | 382 | onClicked: { // (int index, var result, var item, var itemModel) |
134 | 361 | scopeView.itemClicked(index, result, item, itemModel, target.model, categoryItemCount(), baseItem.category); | 383 | scopeView.itemClicked(index, result, itemModel, target.model, categoryItemCount(), baseItem.category); |
135 | 362 | } | 384 | } |
136 | 363 | 385 | ||
139 | 364 | onPressAndHold: { | 386 | onPressAndHold: { // (int index, var result, var itemModel) |
140 | 365 | scopeView.itemPressedAndHeld(index, result, itemModel, target.model, categoryItemCount(), baseItem.category); | 387 | scopeView.itemPressedAndHeld(index, result, target.model, categoryItemCount(), baseItem.category); |
141 | 366 | } | 388 | } |
142 | 367 | 389 | ||
143 | 368 | function categoryItemCount() { | 390 | function categoryItemCount() { |
144 | @@ -736,6 +758,7 @@ | |||
145 | 736 | property var scope: scopeView.scope | 758 | property var scope: scopeView.scope |
146 | 737 | property var scopeStyle: scopeView.scopeStyle | 759 | property var scopeStyle: scopeView.scopeStyle |
147 | 738 | property int initialIndex: -1 | 760 | property int initialIndex: -1 |
148 | 761 | property string categoryId | ||
149 | 739 | property var model: null | 762 | property var model: null |
150 | 740 | 763 | ||
151 | 741 | readonly property bool processing: item && item.processing || false | 764 | readonly property bool processing: item && item.processing || false |
152 | @@ -767,6 +790,7 @@ | |||
153 | 767 | item.open = Qt.binding(function() { return subPageLoader.open; } ) | 790 | item.open = Qt.binding(function() { return subPageLoader.open; } ) |
154 | 768 | item.initialIndex = Qt.binding(function() { return subPageLoader.initialIndex; } ) | 791 | item.initialIndex = Qt.binding(function() { return subPageLoader.initialIndex; } ) |
155 | 769 | item.model = Qt.binding(function() { return subPageLoader.model; } ) | 792 | item.model = Qt.binding(function() { return subPageLoader.model; } ) |
156 | 793 | item.categoryId = Qt.binding(function() { return subPageLoader.categoryId; } ) | ||
157 | 770 | } | 794 | } |
158 | 771 | open = true; | 795 | open = true; |
159 | 772 | } | 796 | } |
160 | 773 | 797 | ||
161 | === modified file 'qml/Dash/PreviewListView.qml' | |||
162 | --- qml/Dash/PreviewListView.qml 2014-10-23 11:59:22 +0000 | |||
163 | +++ qml/Dash/PreviewListView.qml 2015-08-06 13:06:28 +0000 | |||
164 | @@ -26,6 +26,7 @@ | |||
165 | 26 | property int initialIndex: -1 | 26 | property int initialIndex: -1 |
166 | 27 | property var scope: null | 27 | property var scope: null |
167 | 28 | property var scopeStyle: null | 28 | property var scopeStyle: null |
168 | 29 | property string categoryId | ||
169 | 29 | 30 | ||
170 | 30 | property alias showSignatureLine: header.showSignatureLine | 31 | property alias showSignatureLine: header.showSignatureLine |
171 | 31 | 32 | ||
172 | @@ -99,7 +100,7 @@ | |||
173 | 99 | isCurrent: ListView.isCurrentItem | 100 | isCurrent: ListView.isCurrentItem |
174 | 100 | 101 | ||
175 | 101 | previewModel: { | 102 | previewModel: { |
177 | 102 | var previewStack = root.scope.preview(result); | 103 | var previewStack = root.scope.preview(result, root.categoryId); |
178 | 103 | return previewStack.getPreviewModel(0); | 104 | return previewStack.getPreviewModel(0); |
179 | 104 | } | 105 | } |
180 | 105 | scopeStyle: root.scopeStyle | 106 | scopeStyle: root.scopeStyle |
181 | 106 | 107 | ||
182 | === modified file 'qml/Dash/ScopesList.qml' | |||
183 | --- qml/Dash/ScopesList.qml 2015-04-24 07:33:59 +0000 | |||
184 | +++ qml/Dash/ScopesList.qml 2015-08-06 13:06:28 +0000 | |||
185 | @@ -124,7 +124,7 @@ | |||
186 | 124 | onRequestFavorite: root.requestFavorite(scopeId, favorite); | 124 | onRequestFavorite: root.requestFavorite(scopeId, favorite); |
187 | 125 | onRequestEditMode: root.state = "edit"; | 125 | onRequestEditMode: root.state = "edit"; |
188 | 126 | onRequestScopeMoveTo: root.requestFavoriteMoveTo(scopeId, index); | 126 | onRequestScopeMoveTo: root.requestFavoriteMoveTo(scopeId, index); |
190 | 127 | onRequestActivate: root.scope.activate(result); | 127 | onRequestActivate: root.scope.activate(result, categoryId); |
191 | 128 | onRequestRestore: root.requestRestore(scopeId); | 128 | onRequestRestore: root.requestRestore(scopeId); |
192 | 129 | } | 129 | } |
193 | 130 | } | 130 | } |
194 | 131 | 131 | ||
195 | === modified file 'tests/mocks/Unity/CMakeLists.txt' | |||
196 | --- tests/mocks/Unity/CMakeLists.txt 2015-06-23 13:56:06 +0000 | |||
197 | +++ tests/mocks/Unity/CMakeLists.txt 2015-08-06 13:06:28 +0000 | |||
198 | @@ -7,7 +7,7 @@ | |||
199 | 7 | add_subdirectory(DashCommunicator) | 7 | add_subdirectory(DashCommunicator) |
200 | 8 | 8 | ||
201 | 9 | pkg_search_module(GOBJECT gobject-2.0 REQUIRED) | 9 | pkg_search_module(GOBJECT gobject-2.0 REQUIRED) |
203 | 10 | pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=6) | 10 | pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=7) |
204 | 11 | 11 | ||
205 | 12 | include_directories( | 12 | include_directories( |
206 | 13 | ${CMAKE_CURRENT_BINARY_DIR} | 13 | ${CMAKE_CURRENT_BINARY_DIR} |
207 | 14 | 14 | ||
208 | === modified file 'tests/mocks/Unity/fake_scope.cpp' | |||
209 | --- tests/mocks/Unity/fake_scope.cpp 2015-04-09 13:59:41 +0000 | |||
210 | +++ tests/mocks/Unity/fake_scope.cpp 2015-08-06 13:06:28 +0000 | |||
211 | @@ -181,18 +181,20 @@ | |||
212 | 181 | } | 181 | } |
213 | 182 | } | 182 | } |
214 | 183 | 183 | ||
216 | 184 | void Scope::activate(QVariant const& result) | 184 | void Scope::activate(QVariant const& result, QString const& categoryId) |
217 | 185 | { | 185 | { |
219 | 186 | qDebug() << "Called activate on scope" << m_id << "with result" << result; | 186 | qDebug() << "Called activate on scope" << m_id << "with result" << result << "and category" << categoryId; |
220 | 187 | if (result.toString() == "Result.2.2") { | 187 | if (result.toString() == "Result.2.2") { |
221 | 188 | Scopes *scopes = dynamic_cast<Scopes*>(parent()); | 188 | Scopes *scopes = dynamic_cast<Scopes*>(parent()); |
222 | 189 | m_openScope = scopes->getScopeFromAll("MockScope9"); | 189 | m_openScope = scopes->getScopeFromAll("MockScope9"); |
223 | 190 | scopes->addTempScope(m_openScope); | 190 | scopes->addTempScope(m_openScope); |
224 | 191 | Q_EMIT openScope(m_openScope); | 191 | Q_EMIT openScope(m_openScope); |
225 | 192 | } else { | ||
226 | 193 | Q_EMIT previewRequested(result); | ||
227 | 192 | } | 194 | } |
228 | 193 | } | 195 | } |
229 | 194 | 196 | ||
231 | 195 | PreviewStack* Scope::preview(QVariant const& result) | 197 | PreviewStack* Scope::preview(QVariant const& result, QString const& /*categoryId*/) |
232 | 196 | { | 198 | { |
233 | 197 | Q_UNUSED(result); | 199 | Q_UNUSED(result); |
234 | 198 | 200 | ||
235 | 199 | 201 | ||
236 | === modified file 'tests/mocks/Unity/fake_scope.h' | |||
237 | --- tests/mocks/Unity/fake_scope.h 2015-03-27 12:30:24 +0000 | |||
238 | +++ tests/mocks/Unity/fake_scope.h 2015-08-06 13:06:28 +0000 | |||
239 | @@ -60,8 +60,8 @@ | |||
240 | 60 | Q_INVOKABLE void setName(const QString &name); // This is not invokable in the Interface, here for testing benefits | 60 | Q_INVOKABLE void setName(const QString &name); // This is not invokable in the Interface, here for testing benefits |
241 | 61 | Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits | 61 | Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits |
242 | 62 | 62 | ||
245 | 63 | Q_INVOKABLE void activate(QVariant const& result) override; | 63 | Q_INVOKABLE void activate(QVariant const& result, QString const& categoryId) override; |
246 | 64 | Q_INVOKABLE PreviewStack* preview(QVariant const& result) override; | 64 | Q_INVOKABLE PreviewStack* preview(QVariant const& result, QString const& categoryId) override; |
247 | 65 | Q_INVOKABLE void cancelActivation() override; | 65 | Q_INVOKABLE void cancelActivation() override; |
248 | 66 | Q_INVOKABLE void closeScope(unity::shell::scopes::ScopeInterface* scope) override; | 66 | Q_INVOKABLE void closeScope(unity::shell::scopes::ScopeInterface* scope) override; |
249 | 67 | 67 | ||
250 | 68 | 68 | ||
251 | === modified file 'tests/mocks/Unity/fake_scopesoverview.cpp' | |||
252 | --- tests/mocks/Unity/fake_scopesoverview.cpp 2015-02-12 10:33:05 +0000 | |||
253 | +++ tests/mocks/Unity/fake_scopesoverview.cpp 2015-08-06 13:06:28 +0000 | |||
254 | @@ -41,7 +41,7 @@ | |||
255 | 41 | Q_EMIT categoriesChanged(); | 41 | Q_EMIT categoriesChanged(); |
256 | 42 | } | 42 | } |
257 | 43 | 43 | ||
259 | 44 | Q_INVOKABLE void ScopesOverview::activate(QVariant const& result) | 44 | Q_INVOKABLE void ScopesOverview::activate(QVariant const& result, QString const& /*categoryId*/) |
260 | 45 | { | 45 | { |
261 | 46 | Scopes *scopes = dynamic_cast<Scopes*>(parent()); | 46 | Scopes *scopes = dynamic_cast<Scopes*>(parent()); |
262 | 47 | if (scopes->getScope(result.toString())) { | 47 | if (scopes->getScope(result.toString())) { |
263 | 48 | 48 | ||
264 | === modified file 'tests/mocks/Unity/fake_scopesoverview.h' | |||
265 | --- tests/mocks/Unity/fake_scopesoverview.h 2014-09-26 11:21:19 +0000 | |||
266 | +++ tests/mocks/Unity/fake_scopesoverview.h 2015-08-06 13:06:28 +0000 | |||
267 | @@ -32,7 +32,7 @@ | |||
268 | 32 | ScopesOverview(Scopes* parent = 0); | 32 | ScopesOverview(Scopes* parent = 0); |
269 | 33 | 33 | ||
270 | 34 | void setSearchQuery(const QString& search_query) override; | 34 | void setSearchQuery(const QString& search_query) override; |
272 | 35 | Q_INVOKABLE void activate(QVariant const& result) override; | 35 | Q_INVOKABLE void activate(QVariant const& result, QString const& categoryId) override; |
273 | 36 | 36 | ||
274 | 37 | // This is implementation detail | 37 | // This is implementation detail |
275 | 38 | void setFavorite(Scope *scope, bool favorite); | 38 | void setFavorite(Scope *scope, bool favorite); |
FAILED: Continuous integration, rev:1852 jenkins. qa.ubuntu. com/job/ unity8- ci/5998/ jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- wily-touch/ 286/console jenkins. qa.ubuntu. com/job/ unity8- wily-amd64- ci/236/ console jenkins. qa.ubuntu. com/job/ unity8- wily-i386- ci/237/ console jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- wily-armhf/ 286/console
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/unity8- ci/5998/ rebuild
http://