Merge lp:~mandel/ubuntu-system-settings/fix-pause-rtm into lp:ubuntu-system-settings/rtm-14.09
- fix-pause-rtm
- Merge into rtm-14.09
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Ken VanDine | ||||
Approved revision: | 964 | ||||
Merged at revision: | 965 | ||||
Proposed branch: | lp:~mandel/ubuntu-system-settings/fix-pause-rtm | ||||
Merge into: | lp:ubuntu-system-settings/rtm-14.09 | ||||
Diff against target: |
353 lines (+143/-68) 3 files modified
plugins/system-update/download_tracker.cpp (+75/-29) plugins/system-update/download_tracker.h (+8/-6) plugins/system-update/update.cpp (+60/-33) |
||||
To merge this branch: | bzr merge lp:~mandel/ubuntu-system-settings/fix-pause-rtm | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot | continuous-integration | Needs Fixing | |
Jonas G. Drange (community) | Needs Fixing | ||
Ken VanDine | Approve | ||
Review via email: mp+246410@code.launchpad.net |
Commit message
Fix click downloads pause by ensuring that the settings works accordingly.
Description of the change
Fix click downloads pause.
PS Jenkins bot (ps-jenkins) wrote : | # |
- 962. By Manuel de la Peña
-
Merged with rtm trunk.
- 963. By Manuel de la Peña
-
Update the changelog.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:963
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 964. By Manuel de la Peña
-
Fix code according to reviews.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:964
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
deb: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:964
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
deb: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Ken VanDine (ken-vandine) wrote : | # |
Looks good, and works great!
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:964
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
deb: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:964
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
deb: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Jonas G. Drange (jonas-drange) wrote : | # |
If this is not a real AP failure, maybe it would help merging Ken's AP fixes from trunk?
- 965. By Manuel de la Peña
-
Merged with trunk.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:965
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
deb: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Preview Diff
1 | === modified file 'plugins/system-update/download_tracker.cpp' | |||
2 | --- plugins/system-update/download_tracker.cpp 2014-09-30 02:05:36 +0000 | |||
3 | +++ plugins/system-update/download_tracker.cpp 2015-01-20 12:17:55 +0000 | |||
4 | @@ -18,22 +18,27 @@ | |||
5 | 18 | * Authored by: Diego Sarmentero <diego.sarmentero@canonical.com> | 18 | * Authored by: Diego Sarmentero <diego.sarmentero@canonical.com> |
6 | 19 | */ | 19 | */ |
7 | 20 | 20 | ||
8 | 21 | #include <QDebug> | ||
9 | 22 | #include <QProcessEnvironment> | ||
10 | 23 | |||
11 | 24 | #include <ubuntu/download_manager/download_struct.h> | ||
12 | 25 | #include <ubuntu/download_manager/error.h> | ||
13 | 26 | |||
14 | 21 | #include "download_tracker.h" | 27 | #include "download_tracker.h" |
15 | 22 | #include "network/network.h" | 28 | #include "network/network.h" |
16 | 23 | #include <ubuntu/download_manager/download_struct.h> | ||
17 | 24 | #include <ubuntu/download_manager/error.h> | ||
18 | 25 | #include <QProcessEnvironment> | ||
19 | 26 | 29 | ||
23 | 27 | #define DOWNLOAD_COMMAND "post-download-command" | 30 | namespace { |
24 | 28 | #define APP_ID "app_id" | 31 | const QString DOWNLOAD_COMMAND = "post-download-command"; |
25 | 29 | #define PKCON_COMMAND "pkcon" | 32 | const QString APP_ID = "app_id"; |
26 | 33 | const QString PKCON_COMMAND = "pkcon"; | ||
27 | 34 | } | ||
28 | 30 | 35 | ||
29 | 31 | namespace UpdatePlugin { | 36 | namespace UpdatePlugin { |
30 | 32 | 37 | ||
31 | 33 | DownloadTracker::DownloadTracker(QObject *parent) : | 38 | DownloadTracker::DownloadTracker(QObject *parent) : |
32 | 34 | QObject(parent), | 39 | QObject(parent), |
35 | 35 | m_clickToken(""), | 40 | m_clickToken(QString::null), |
36 | 36 | m_downloadUrl(""), | 41 | m_downloadUrl(QString::null), |
37 | 37 | m_download(nullptr), | 42 | m_download(nullptr), |
38 | 38 | m_manager(nullptr), | 43 | m_manager(nullptr), |
39 | 39 | m_progress(0) | 44 | m_progress(0) |
40 | @@ -42,7 +47,7 @@ | |||
41 | 42 | 47 | ||
42 | 43 | void DownloadTracker::setDownload(const QString& url) | 48 | void DownloadTracker::setDownload(const QString& url) |
43 | 44 | { | 49 | { |
45 | 45 | if (url != "") { | 50 | if (!url.isEmpty()) { |
46 | 46 | m_downloadUrl = url; | 51 | m_downloadUrl = url; |
47 | 47 | startService(); | 52 | startService(); |
48 | 48 | } | 53 | } |
49 | @@ -50,7 +55,7 @@ | |||
50 | 50 | 55 | ||
51 | 51 | void DownloadTracker::setClickToken(const QString& token) | 56 | void DownloadTracker::setClickToken(const QString& token) |
52 | 52 | { | 57 | { |
54 | 53 | if (token != "") { | 58 | if (!token.isEmpty()) { |
55 | 54 | m_clickToken = token; | 59 | m_clickToken = token; |
56 | 55 | startService(); | 60 | startService(); |
57 | 56 | } | 61 | } |
58 | @@ -58,7 +63,7 @@ | |||
59 | 58 | 63 | ||
60 | 59 | void DownloadTracker::setPackageName(const QString& package) | 64 | void DownloadTracker::setPackageName(const QString& package) |
61 | 60 | { | 65 | { |
63 | 61 | if (package != "") { | 66 | if (!package.isEmpty()) { |
64 | 62 | m_packageName = package; | 67 | m_packageName = package; |
65 | 63 | startService(); | 68 | startService(); |
66 | 64 | } | 69 | } |
67 | @@ -70,8 +75,10 @@ | |||
68 | 70 | if (m_manager == nullptr) { | 75 | if (m_manager == nullptr) { |
69 | 71 | m_manager = Manager::createSessionManager("", this); | 76 | m_manager = Manager::createSessionManager("", this); |
70 | 72 | 77 | ||
73 | 73 | QObject::connect(m_manager, SIGNAL(downloadCreated(Download*)), | 78 | if (!connect(m_manager, &Manager::downloadCreated, |
74 | 74 | this, SLOT(bindDownload(Download*))); | 79 | this, &DownloadTracker::bindDownload)) { |
75 | 80 | qWarning() << "Could not connect to Manager::downloadCreated!"; | ||
76 | 81 | } | ||
77 | 75 | } | 82 | } |
78 | 76 | QVariantMap vmap; | 83 | QVariantMap vmap; |
79 | 77 | QStringList args; | 84 | QStringList args; |
80 | @@ -89,22 +96,40 @@ | |||
81 | 89 | void DownloadTracker::bindDownload(Download* download) | 96 | void DownloadTracker::bindDownload(Download* download) |
82 | 90 | { | 97 | { |
83 | 91 | m_download = download; | 98 | m_download = download; |
100 | 92 | connect(m_download, SIGNAL(finished(const QString &)), this, | 99 | if (!connect(m_download, &Download::finished, |
101 | 93 | SIGNAL(finished(const QString &))); | 100 | this, &DownloadTracker::onDownloadFinished)) { |
102 | 94 | connect(m_download, SIGNAL(canceled(bool)), this, | 101 | qWarning() << "Could not connect to Download::finished"; |
103 | 95 | SIGNAL(canceled(bool))); | 102 | } |
104 | 96 | connect(m_download, SIGNAL(paused(bool)), this, | 103 | if (!connect(m_download, &Download::canceled, |
105 | 97 | SIGNAL(paused(bool))); | 104 | this, &DownloadTracker::onDownloadCanceled)) { |
106 | 98 | connect(m_download, SIGNAL(resumed(bool)), this, | 105 | qWarning() << "Could not connect to Download::canceled"; |
107 | 99 | SIGNAL(resumed(bool))); | 106 | } |
108 | 100 | connect(m_download, SIGNAL(started(bool)), this, | 107 | if (!connect(m_download, &Download::paused, |
109 | 101 | SIGNAL(started(bool))); | 108 | this, &DownloadTracker::paused)) { |
110 | 102 | connect(m_download, SIGNAL(error(Error*)), this, | 109 | qWarning() << "Could not connect to Download::paused"; |
111 | 103 | SLOT(registerError(Error*))); | 110 | } |
112 | 104 | connect(m_download, SIGNAL(progress(qulonglong, qulonglong)), this, | 111 | if (!connect(m_download, &Download::resumed, |
113 | 105 | SLOT(setProgress(qulonglong, qulonglong))); | 112 | this, &DownloadTracker::resumed)) { |
114 | 106 | connect(m_download, SIGNAL(processing(const QString &)), this, | 113 | qWarning() << "Could not connect to Download::resumed"; |
115 | 107 | SIGNAL(processing(const QString &))); | 114 | } |
116 | 115 | if (!connect(m_download, &Download::started, | ||
117 | 116 | this, &DownloadTracker::started)) { | ||
118 | 117 | qWarning() << "Could not connect to Download::started"; | ||
119 | 118 | } | ||
120 | 119 | if (!connect(m_download, static_cast<void(Download::*)(Error*)>(&Download::error), | ||
121 | 120 | this, &DownloadTracker::registerError)) { | ||
122 | 121 | qWarning() << "Could not connect to Download::error"; | ||
123 | 122 | } | ||
124 | 123 | |||
125 | 124 | if (!connect(m_download, static_cast<void(Download::*)(qulonglong, qulonglong)>(&Download::progress), | ||
126 | 125 | this, &DownloadTracker::setProgress)) { | ||
127 | 126 | qWarning() << "Could not connect to Download::progress"; | ||
128 | 127 | } | ||
129 | 128 | |||
130 | 129 | if (!connect(m_download, &Download::processing, | ||
131 | 130 | this, &DownloadTracker::processing)) { | ||
132 | 131 | qWarning() << "Could not connect to Download::processing"; | ||
133 | 132 | } | ||
134 | 108 | 133 | ||
135 | 109 | m_download->start(); | 134 | m_download->start(); |
136 | 110 | } | 135 | } |
137 | @@ -112,6 +137,27 @@ | |||
138 | 112 | void DownloadTracker::registerError(Error* error) | 137 | void DownloadTracker::registerError(Error* error) |
139 | 113 | { | 138 | { |
140 | 114 | Q_EMIT errorFound(error->errorString()); | 139 | Q_EMIT errorFound(error->errorString()); |
141 | 140 | |||
142 | 141 | // we need to ensure that the resources are cleaned | ||
143 | 142 | m_download->deleteLater(); | ||
144 | 143 | m_download = nullptr; | ||
145 | 144 | } | ||
146 | 145 | |||
147 | 146 | void DownloadTracker::onDownloadFinished(const QString& path) | ||
148 | 147 | { | ||
149 | 148 | // once a download is finished we need to clean the resources | ||
150 | 149 | m_download->deleteLater(); | ||
151 | 150 | m_download = nullptr; | ||
152 | 151 | Q_EMIT finished(path); | ||
153 | 152 | } | ||
154 | 153 | |||
155 | 154 | void DownloadTracker::onDownloadCanceled(bool wasCanceled) | ||
156 | 155 | { | ||
157 | 156 | if (wasCanceled) { | ||
158 | 157 | m_download->deleteLater(); | ||
159 | 158 | m_download = nullptr; | ||
160 | 159 | } | ||
161 | 160 | Q_EMIT canceled(wasCanceled); | ||
162 | 115 | } | 161 | } |
163 | 116 | 162 | ||
164 | 117 | void DownloadTracker::pause() | 163 | void DownloadTracker::pause() |
165 | 118 | 164 | ||
166 | === modified file 'plugins/system-update/download_tracker.h' | |||
167 | --- plugins/system-update/download_tracker.h 2014-09-30 02:05:36 +0000 | |||
168 | +++ plugins/system-update/download_tracker.h 2015-01-20 12:17:55 +0000 | |||
169 | @@ -63,6 +63,8 @@ | |||
170 | 63 | void bindDownload(Download* download); | 63 | void bindDownload(Download* download); |
171 | 64 | void setProgress(qulonglong received, qulonglong total); | 64 | void setProgress(qulonglong received, qulonglong total); |
172 | 65 | void registerError(Ubuntu::DownloadManager::Error* error); | 65 | void registerError(Ubuntu::DownloadManager::Error* error); |
173 | 66 | void onDownloadFinished(const QString& path); | ||
174 | 67 | void onDownloadCanceled(bool wasCanceled); | ||
175 | 66 | 68 | ||
176 | 67 | Q_SIGNALS: | 69 | Q_SIGNALS: |
177 | 68 | void error(const QString &errorMessage); | 70 | void error(const QString &errorMessage); |
178 | @@ -76,12 +78,12 @@ | |||
179 | 76 | void errorFound(const QString &error); | 78 | void errorFound(const QString &error); |
180 | 77 | 79 | ||
181 | 78 | private: | 80 | private: |
188 | 79 | QString m_clickToken; | 81 | QString m_clickToken = QString::null; |
189 | 80 | QString m_downloadUrl; | 82 | QString m_downloadUrl = QString::null; |
190 | 81 | QString m_packageName; | 83 | QString m_packageName = QString::null; |
191 | 82 | Download* m_download; | 84 | Download* m_download = nullptr; |
192 | 83 | Manager* m_manager; | 85 | Manager* m_manager = nullptr; |
193 | 84 | int m_progress; | 86 | int m_progress = 0; |
194 | 85 | 87 | ||
195 | 86 | void startService(); | 88 | void startService(); |
196 | 87 | QString getPkconCommand(); | 89 | QString getPkconCommand(); |
197 | 88 | 90 | ||
198 | === modified file 'plugins/system-update/update.cpp' | |||
199 | --- plugins/system-update/update.cpp 2014-09-12 23:47:39 +0000 | |||
200 | +++ plugins/system-update/update.cpp 2015-01-20 12:17:55 +0000 | |||
201 | @@ -18,10 +18,13 @@ | |||
202 | 18 | * | 18 | * |
203 | 19 | */ | 19 | */ |
204 | 20 | 20 | ||
205 | 21 | #include "update.h" | ||
206 | 22 | #include <QStringList> | ||
207 | 23 | #include <apt-pkg/debversion.h> | 21 | #include <apt-pkg/debversion.h> |
208 | 22 | |||
209 | 23 | #include <QDebug> | ||
210 | 24 | #include <QProcessEnvironment> | 24 | #include <QProcessEnvironment> |
211 | 25 | #include <QStringList> | ||
212 | 26 | |||
213 | 27 | #include "update.h" | ||
214 | 25 | 28 | ||
215 | 26 | namespace UpdatePlugin { | 29 | namespace UpdatePlugin { |
216 | 27 | 30 | ||
217 | @@ -64,81 +67,105 @@ | |||
218 | 64 | 67 | ||
219 | 65 | void Update::setRemoteVersion(QString& version) | 68 | void Update::setRemoteVersion(QString& version) |
220 | 66 | { | 69 | { |
229 | 67 | m_remote_version = version; | 70 | if (m_remote_version != version) { |
230 | 68 | if (!getIgnoreUpdates()) { | 71 | m_remote_version = version; |
231 | 69 | int result = debVS.CmpVersion(m_local_version.toUtf8().data(), | 72 | if (!getIgnoreUpdates()) { |
232 | 70 | m_remote_version.toUtf8().data()); | 73 | int result = debVS.CmpVersion(m_local_version.toUtf8().data(), |
233 | 71 | 74 | m_remote_version.toUtf8().data()); | |
234 | 72 | m_update = result < 0; | 75 | |
235 | 73 | } else { | 76 | m_update = result < 0; |
236 | 74 | m_update = false; | 77 | } else { |
237 | 78 | m_update = false; | ||
238 | 79 | } | ||
239 | 75 | } | 80 | } |
240 | 76 | } | 81 | } |
241 | 77 | 82 | ||
242 | 78 | void Update::setError(QString error) | 83 | void Update::setError(QString error) |
243 | 79 | { | 84 | { |
247 | 80 | m_error = error; | 85 | if (m_error != error) { |
248 | 81 | if (!m_error.isEmpty()) { | 86 | m_error = error; |
249 | 82 | Q_EMIT errorChanged(); | 87 | if (!m_error.isEmpty()) { |
250 | 88 | Q_EMIT errorChanged(); | ||
251 | 89 | } | ||
252 | 83 | } | 90 | } |
253 | 84 | } | 91 | } |
254 | 85 | 92 | ||
255 | 86 | void Update::setSystemUpdate(bool isSystem) | 93 | void Update::setSystemUpdate(bool isSystem) |
256 | 87 | { | 94 | { |
259 | 88 | m_systemUpdate = isSystem; | 95 | if (m_systemUpdate != isSystem) { |
260 | 89 | Q_EMIT systemUpdateChanged(); | 96 | m_systemUpdate = isSystem; |
261 | 97 | Q_EMIT systemUpdateChanged(); | ||
262 | 98 | } | ||
263 | 90 | } | 99 | } |
264 | 91 | 100 | ||
265 | 92 | void Update::setUpdateRequired(bool state) | 101 | void Update::setUpdateRequired(bool state) |
266 | 93 | { | 102 | { |
269 | 94 | m_update = state; | 103 | if (m_update != state) { |
270 | 95 | Q_EMIT updateRequiredChanged(); | 104 | m_update = state; |
271 | 105 | Q_EMIT updateRequiredChanged(); | ||
272 | 106 | } | ||
273 | 96 | } | 107 | } |
274 | 97 | 108 | ||
275 | 98 | void Update::setUpdateState(bool state) | 109 | void Update::setUpdateState(bool state) |
276 | 99 | { | 110 | { |
279 | 100 | m_update_state = state; | 111 | if (m_update_state != state) { |
280 | 101 | Q_EMIT updateStateChanged(); | 112 | m_update_state = state; |
281 | 113 | Q_EMIT updateStateChanged(); | ||
282 | 114 | } | ||
283 | 102 | } | 115 | } |
284 | 103 | 116 | ||
285 | 104 | void Update::setUpdateReady(bool ready) | 117 | void Update::setUpdateReady(bool ready) |
286 | 105 | { | 118 | { |
289 | 106 | m_update_ready = ready; | 119 | if (m_update_ready != ready) { |
290 | 107 | Q_EMIT updateReadyChanged(); | 120 | m_update_ready = ready; |
291 | 121 | Q_EMIT updateReadyChanged(); | ||
292 | 122 | } | ||
293 | 108 | } | 123 | } |
294 | 109 | 124 | ||
295 | 110 | void Update::setSelected(bool value) | 125 | void Update::setSelected(bool value) |
296 | 111 | { | 126 | { |
299 | 112 | m_selected = value; | 127 | if (m_selected != value) { |
300 | 113 | Q_EMIT selectedChanged(); | 128 | m_selected = value; |
301 | 129 | Q_EMIT selectedChanged(); | ||
302 | 130 | } | ||
303 | 114 | } | 131 | } |
304 | 115 | 132 | ||
305 | 116 | void Update::setBinaryFilesize(int size) | 133 | void Update::setBinaryFilesize(int size) |
306 | 117 | { | 134 | { |
309 | 118 | m_binary_filesize = size; | 135 | if (m_binary_filesize != size) { |
310 | 119 | Q_EMIT binaryFilesizeChanged(); | 136 | m_binary_filesize = size; |
311 | 137 | Q_EMIT binaryFilesizeChanged(); | ||
312 | 138 | } | ||
313 | 120 | } | 139 | } |
314 | 121 | 140 | ||
315 | 122 | void Update::setIconUrl(QString icon) { | 141 | void Update::setIconUrl(QString icon) { |
318 | 123 | m_icon_url = icon; | 142 | if (m_icon_url != icon) { |
319 | 124 | Q_EMIT iconUrlChanged(); | 143 | m_icon_url = icon; |
320 | 144 | Q_EMIT iconUrlChanged(); | ||
321 | 145 | } | ||
322 | 125 | } | 146 | } |
323 | 126 | 147 | ||
324 | 127 | void Update::setLastUpdateDate(const QString date) | 148 | void Update::setLastUpdateDate(const QString date) |
325 | 128 | { | 149 | { |
328 | 129 | m_lastUpdateDate = date; | 150 | if (m_lastUpdateDate != date) { |
329 | 130 | Q_EMIT lastUpdateDateChanged(); | 151 | m_lastUpdateDate = date; |
330 | 152 | Q_EMIT lastUpdateDateChanged(); | ||
331 | 153 | } | ||
332 | 131 | } | 154 | } |
333 | 132 | 155 | ||
334 | 133 | void Update::setDownloadProgress(int progress) | 156 | void Update::setDownloadProgress(int progress) |
335 | 134 | { | 157 | { |
338 | 135 | m_download_progress = progress; | 158 | if (m_download_progress != progress) { |
339 | 136 | Q_EMIT downloadProgressChanged(); | 159 | m_download_progress = progress; |
340 | 160 | Q_EMIT downloadProgressChanged(); | ||
341 | 161 | } | ||
342 | 137 | } | 162 | } |
343 | 138 | 163 | ||
344 | 139 | void Update::setDownloadUrl(const QString &url) { | 164 | void Update::setDownloadUrl(const QString &url) { |
347 | 140 | m_downloadUrl = url; | 165 | if (m_downloadUrl != url) { |
348 | 141 | Q_EMIT downloadUrlChanged(); | 166 | m_downloadUrl = url; |
349 | 167 | Q_EMIT downloadUrlChanged(); | ||
350 | 168 | } | ||
351 | 142 | } | 169 | } |
352 | 143 | 170 | ||
353 | 144 | bool Update::getIgnoreUpdates() | 171 | bool Update::getIgnoreUpdates() |
PASSED: Continuous integration, rev:961 jenkins. qa.ubuntu. com/job/ ubuntu- system- settings- rtm-14. 09-ci/25/ jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- 14.09-touch/ 4 jenkins. qa.ubuntu. com/job/ ubuntu- system- settings- rtm-14. 09-14.09- armhf-ci/ 26 jenkins. qa.ubuntu. com/job/ ubuntu- system- settings- rtm-14. 09-14.09- armhf-ci/ 26/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- runner- 14.09-mako/ 5 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- 14.09-armhf/ 4 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- 14.09-armhf/ 4/artifact/ work/output/ *zip*/output. zip s-jenkins. ubuntu- ci:8080/ job/touch- flash-device/ 17069
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/ubuntu- system- settings- rtm-14. 09-ci/25/ rebuild
http://