Merge lp:~townsend/libertine/refactor-package-operation-details into lp:libertine
- refactor-package-operation-details
- Merge into devel
Status: | Merged |
---|---|
Approved by: | Christopher Townsend |
Approved revision: | 428 |
Merged at revision: | 424 |
Proposed branch: | lp:~townsend/libertine/refactor-package-operation-details |
Merge into: | lp:libertine |
Diff against target: |
867 lines (+137/-186) 20 files modified
common/CMakeLists.txt (+1/-1) common/ContainerManager.cpp (+12/-12) common/ContainerManager.h (+4/-4) common/ContainerOperationDetails.cpp (+25/-57) common/ContainerOperationDetails.h (+9/-9) common/ContainersConfig.cpp (+10/-8) libertine/libertine.cpp (+5/-5) libertine/libertine.h (+3/-3) qml/common/ContainerEditView.qml (+4/-4) qml/common/ContainerInfoView.qml (+25/-7) qml/common/ContainerOptionsDialog.qml (+4/-4) qml/common/ContainersList.qml (+8/-5) qml/common/ExtraArchivesView.qml (+1/-1) qml/common/ExtraBindMountsView.qml (+2/-2) qml/common/ManageContainer.qml (+7/-7) qml/common/PackageInfoView.qml (+4/-50) qml/common/SearchResultsView.qml (+1/-1) qml/gui/libertine.qml (+1/-1) system-settings-plugin/plugin.cpp (+5/-5) tools/libertine-container-manager (+6/-0) |
To merge this branch: | bzr merge lp:~townsend/libertine/refactor-package-operation-details |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Libertine CI Bot | continuous-integration | Approve | |
Larry Price | Approve | ||
Review via email: mp+318538@code.launchpad.net |
Commit message
Refactor package operation details into container operation details.
Description of the change
Libertine CI Bot (libertine-ci-bot) wrote : | # |
Libertine CI Bot (libertine-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:424
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Libertine CI Bot (libertine-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:425
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Larry Price (larryprice) wrote : | # |
some minor inlines - i'll test it out soon.
Libertine CI Bot (libertine-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:426
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Libertine CI Bot (libertine-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:427
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Libertine CI Bot (libertine-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:428
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Libertine CI Bot (libertine-ci-bot) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
Libertine CI Bot (libertine-ci-bot) : | # |
Preview Diff
1 | === modified file 'common/CMakeLists.txt' |
2 | --- common/CMakeLists.txt 2017-02-16 17:32:48 +0000 |
3 | +++ common/CMakeLists.txt 2017-03-01 18:38:22 +0000 |
4 | @@ -6,7 +6,7 @@ |
5 | ContainerConfigList.cpp |
6 | ContainerManager.cpp |
7 | LibertineConfig.cpp |
8 | - PackageOperationDetails.cpp |
9 | + ContainerOperationDetails.cpp |
10 | ) |
11 | |
12 | target_link_libraries(${LIBERTINE_COMMON} ${LIBERTINE_CORE} Qt5::Core) |
13 | |
14 | === modified file 'common/ContainerManager.cpp' |
15 | --- common/ContainerManager.cpp 2016-10-03 20:30:29 +0000 |
16 | +++ common/ContainerManager.cpp 2017-03-01 18:38:22 +0000 |
17 | @@ -3,7 +3,7 @@ |
18 | * @brief Threaded Libertine container manager |
19 | */ |
20 | /* |
21 | - * Copyright 2015-2016 Canonical Ltd |
22 | + * Copyright 2015-2017 Canonical Ltd |
23 | * |
24 | * Libertine is free software: you can redistribute it and/or modify it under |
25 | * the terms of the GNU General Public License, version 3, as published by the |
26 | @@ -98,7 +98,7 @@ |
27 | auto output = process_.readAllStandardOutput(); |
28 | if (!output.isEmpty()) |
29 | { |
30 | - emit updateOperationDetails(id, "", output); |
31 | + emit updateOperationDetails(id, output); |
32 | } |
33 | }); |
34 | connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
35 | @@ -107,7 +107,7 @@ |
36 | { |
37 | emit error(CONTAINER_CREATE_FAILED.arg(id), process_.readAllStandardError()); |
38 | } |
39 | - emit operationFinished(id, ""); |
40 | + emit operationFinished(id); |
41 | }); |
42 | connect(&process_, &QProcess::started, [=]() { |
43 | process_.write(password.toUtf8()); |
44 | @@ -140,7 +140,7 @@ |
45 | |
46 | |
47 | void ContainerManagerWorker:: |
48 | -packageOperationInteraction(const QString& input) |
49 | +containerOperationInteraction(const QString& input) |
50 | { |
51 | if (process_.state() == QProcess::Running) |
52 | { |
53 | @@ -156,7 +156,7 @@ |
54 | auto output = process_.readAllStandardOutput(); |
55 | if (!output.isEmpty()) |
56 | { |
57 | - emit updateOperationDetails(container_id, package_name, output); |
58 | + emit updateOperationDetails(container_id, output); |
59 | process_output_ += output; |
60 | } |
61 | }); |
62 | @@ -167,7 +167,7 @@ |
63 | auto stderr = process_.readAllStandardError(); |
64 | emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), stderr.isEmpty() ? process_output_ : stderr); |
65 | } |
66 | - emit operationFinished(container_id, package_name); |
67 | + emit operationFinished(container_id); |
68 | }); |
69 | |
70 | process_.start(libertine_container_manager_tool, QStringList{"install-package", "-i", container_id, "-p", package_name, "--no-dialog"}); |
71 | @@ -181,7 +181,7 @@ |
72 | auto output = process_.readAllStandardOutput(); |
73 | if (!output.isEmpty()) |
74 | { |
75 | - emit updateOperationDetails(container_id, package_name, output); |
76 | + emit updateOperationDetails(container_id, output); |
77 | process_output_ += output; |
78 | } |
79 | }); |
80 | @@ -191,7 +191,7 @@ |
81 | { |
82 | emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), readAllStdOutOrStdErr(process_, process_output_)); |
83 | } |
84 | - emit operationFinished(container_id, package_name); |
85 | + emit operationFinished(container_id); |
86 | }); |
87 | |
88 | process_.start(libertine_container_manager_tool, QStringList{"remove-package", "-i", container_id, "-p", package_name, "--no-dialog"}); |
89 | @@ -239,7 +239,7 @@ |
90 | auto output = process_.readAllStandardOutput(); |
91 | if (!output.isEmpty()) |
92 | { |
93 | - emit updateOperationDetails(container_id, "", output); |
94 | + emit updateOperationDetails(container_id, output); |
95 | } |
96 | }); |
97 | connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
98 | @@ -248,7 +248,7 @@ |
99 | { |
100 | emit error(CONTAINER_UPDATE_FAILED.arg(container_name), readAllStdOutOrStdErr(process_)); |
101 | } |
102 | - emit operationFinished(container_id, ""); |
103 | + emit operationFinished(container_id); |
104 | }); |
105 | |
106 | process_.start(libertine_container_manager_tool, QStringList{"update", "-i", container_id}); |
107 | @@ -281,7 +281,7 @@ |
108 | auto output = process_.readAllStandardOutput(); |
109 | if (!output.isEmpty()) |
110 | { |
111 | - emit updateOperationDetails(container_id, "", output); |
112 | + emit updateOperationDetails(container_id, output); |
113 | process_output_ += output; |
114 | } |
115 | }); |
116 | @@ -295,7 +295,7 @@ |
117 | { |
118 | emit finishedConfigure(); |
119 | } |
120 | - emit operationFinished(container_id, ""); |
121 | + emit operationFinished(container_id); |
122 | }); |
123 | |
124 | QStringList args{"configure", "-i", container_id}; |
125 | |
126 | === modified file 'common/ContainerManager.h' |
127 | --- common/ContainerManager.h 2016-09-26 18:17:07 +0000 |
128 | +++ common/ContainerManager.h 2017-03-01 18:38:22 +0000 |
129 | @@ -3,7 +3,7 @@ |
130 | * @brief Threaded Libertine container manager |
131 | */ |
132 | /* |
133 | - * Copyright 2015-2016 Canonical Ltd |
134 | + * Copyright 2015-2017 Canonical Ltd |
135 | * |
136 | * Libertine is free software: you can redistribute it and/or modify it under |
137 | * the terms of the GNU General Public License, version 3, as published by the |
138 | @@ -47,7 +47,7 @@ |
139 | Q_INVOKABLE void setDefaultContainer(const QString& container_id, bool should_clear); |
140 | |
141 | public slots: |
142 | - void packageOperationInteraction(const QString& input); |
143 | + void containerOperationInteraction(const QString& input); |
144 | |
145 | private: |
146 | QProcess process_; |
147 | @@ -67,8 +67,8 @@ |
148 | void finishedSearch(QList<QString> packageList); |
149 | void finishedCommand(QString const& command_output); |
150 | void finishedConfigure(); |
151 | - void updateOperationDetails(const QString& container_id, const QString& package_name, const QString& details); |
152 | - void operationFinished(const QString& container_id, const QString& package_name); |
153 | + void updateOperationDetails(const QString& container_id, const QString& details); |
154 | + void operationFinished(const QString& container_id); |
155 | |
156 | void error(const QString& short_description, const QString& details); |
157 | }; |
158 | |
159 | === renamed file 'common/PackageOperationDetails.cpp' => 'common/ContainerOperationDetails.cpp' |
160 | --- common/PackageOperationDetails.cpp 2016-09-26 18:17:07 +0000 |
161 | +++ common/ContainerOperationDetails.cpp 2017-03-01 18:38:22 +0000 |
162 | @@ -1,5 +1,5 @@ |
163 | /* |
164 | - * Copyright 2016 Canonical Ltd |
165 | + * Copyright 2016-2017 Canonical Ltd |
166 | * |
167 | * Libertine is free software: you can redistribute it and/or modify it under |
168 | * the terms of the GNU General Public License, version 3, as published by the |
169 | @@ -14,65 +14,33 @@ |
170 | */ |
171 | |
172 | |
173 | -#include "PackageOperationDetails.h" |
174 | - |
175 | -namespace |
176 | -{ |
177 | -static bool has_key(QMap<QString, QMap<QString, QString> > details, |
178 | - QString const& container_id, QString const& package_id) |
179 | -{ |
180 | - return details.constFind(container_id) != details.constEnd() && |
181 | - details[container_id].constFind(package_id) != details[container_id].constEnd(); |
182 | -} |
183 | -} |
184 | - |
185 | - |
186 | -PackageOperationDetails:: |
187 | -PackageOperationDetails(QObject* parent) |
188 | +#include "ContainerOperationDetails.h" |
189 | + |
190 | +ContainerOperationDetails:: |
191 | +ContainerOperationDetails(QObject* parent) |
192 | : QObject(parent) |
193 | { |
194 | } |
195 | |
196 | |
197 | -QString PackageOperationDetails:: |
198 | -details(QString const& container_id, QString const& package_id) const |
199 | -{ |
200 | - if (has_key(details_, container_id, package_id)) |
201 | - { |
202 | - return details_[container_id][package_id]; |
203 | - } |
204 | - return ""; |
205 | -} |
206 | - |
207 | - |
208 | -void PackageOperationDetails:: |
209 | -clear(QString const& container_id, QString const& package_id) |
210 | -{ |
211 | - if (has_key(details_, container_id, package_id)) |
212 | - { |
213 | - details_[container_id].remove(package_id); |
214 | - if (details_[container_id].empty()) |
215 | - { |
216 | - details_.remove(container_id); |
217 | - } |
218 | - } |
219 | -} |
220 | - |
221 | - |
222 | -void PackageOperationDetails:: |
223 | -update(QString const& container_id, QString const& package_id, QString const& new_details) |
224 | -{ |
225 | - if (has_key(details_, container_id, package_id)) |
226 | - { |
227 | - details_[container_id][package_id] += new_details; |
228 | - } |
229 | - else |
230 | - { |
231 | - if (details_.constFind(container_id) == details_.constEnd()) |
232 | - { |
233 | - details_[container_id] = QMap<QString, QString>{{package_id, new_details}}; |
234 | - } |
235 | - } |
236 | - |
237 | - emit updated(container_id, package_id, new_details); |
238 | +QString ContainerOperationDetails:: |
239 | +details(QString const& container_id) const |
240 | +{ |
241 | + return details_.value(container_id); |
242 | +} |
243 | + |
244 | + |
245 | +void ContainerOperationDetails:: |
246 | +clear(QString const& container_id) |
247 | +{ |
248 | + details_.remove(container_id); |
249 | +} |
250 | + |
251 | + |
252 | +void ContainerOperationDetails:: |
253 | +update(QString const& container_id, QString const& new_details) |
254 | +{ |
255 | + details_[container_id] += new_details; |
256 | + |
257 | + emit updated(container_id, new_details); |
258 | } |
259 | |
260 | === renamed file 'common/PackageOperationDetails.h' => 'common/ContainerOperationDetails.h' |
261 | --- common/PackageOperationDetails.h 2016-09-26 18:17:07 +0000 |
262 | +++ common/ContainerOperationDetails.h 2017-03-01 18:38:22 +0000 |
263 | @@ -1,5 +1,5 @@ |
264 | /* |
265 | - * Copyright 2016 Canonical Ltd |
266 | + * Copyright 2016-2017 Canonical Ltd |
267 | * |
268 | * Libertine is free software: you can redistribute it and/or modify it under |
269 | * the terms of the GNU General Public License, version 3, as published by the |
270 | @@ -19,25 +19,25 @@ |
271 | #include <QMap> |
272 | |
273 | |
274 | -class PackageOperationDetails : public QObject |
275 | +class ContainerOperationDetails : public QObject |
276 | { |
277 | Q_OBJECT |
278 | |
279 | public: |
280 | - explicit PackageOperationDetails(QObject* parent = nullptr); |
281 | - virtual ~PackageOperationDetails() = default; |
282 | + explicit ContainerOperationDetails(QObject* parent = nullptr); |
283 | + virtual ~ContainerOperationDetails() = default; |
284 | |
285 | - Q_INVOKABLE QString details(QString const& container_id, QString const& package_id) const; |
286 | - Q_INVOKABLE void clear(QString const& container_id, QString const& package_id); |
287 | + Q_INVOKABLE QString details(QString const& container_id) const; |
288 | + Q_INVOKABLE void clear(QString const& container_id); |
289 | |
290 | public slots: |
291 | - void update(QString const& container_id, QString const& package_id, QString const& new_details); |
292 | + void update(QString const& container_id, QString const& new_details); |
293 | |
294 | signals: |
295 | - void updated(QString const& container_id, QString const& package_id, QString const& new_details); |
296 | + void updated(QString const& container_id, QString const& new_details); |
297 | void send(QString const& input); |
298 | void error(QString const& short_description, QString const& details); |
299 | |
300 | private: |
301 | - QMap<QString, QMap<QString, QString> > details_; |
302 | + QMap<QString, QString> details_; |
303 | }; |
304 | |
305 | === modified file 'common/ContainersConfig.cpp' |
306 | --- common/ContainersConfig.cpp 2017-02-16 22:00:46 +0000 |
307 | +++ common/ContainersConfig.cpp 2017-03-01 18:38:22 +0000 |
308 | @@ -22,14 +22,16 @@ |
309 | QString translate_status(QString const& original) |
310 | { |
311 | static const QMap<QString, QString> translations{ |
312 | - {"new", QObject::tr("new")}, |
313 | - {"installing", QObject::tr("installing")}, |
314 | - {"installed", QObject::tr("installed")}, |
315 | - {"ready", QObject::tr("ready")}, |
316 | - {"updating", QObject::tr("updating")}, |
317 | - {"removing", QObject::tr("removing")}, |
318 | - {"removed", QObject::tr("removed")}, |
319 | - {"unknown", QObject::tr("unknown")} |
320 | + {"new", QObject::tr("new")}, |
321 | + {"installing", QObject::tr("installing")}, |
322 | + {"installed", QObject::tr("installed")}, |
323 | + {"installing packages", QObject::tr("installing packages")}, |
324 | + {"removing packages", QObject::tr("removing packages")}, |
325 | + {"ready", QObject::tr("ready")}, |
326 | + {"updating", QObject::tr("updating")}, |
327 | + {"removing", QObject::tr("removing")}, |
328 | + {"removed", QObject::tr("removed")}, |
329 | + {"unknown", QObject::tr("unknown")} |
330 | }; |
331 | |
332 | return translations.value(original, ""); |
333 | |
334 | === modified file 'libertine/libertine.cpp' |
335 | --- libertine/libertine.cpp 2017-02-16 17:32:48 +0000 |
336 | +++ libertine/libertine.cpp 2017-03-01 18:38:22 +0000 |
337 | @@ -3,7 +3,7 @@ |
338 | * @brief Libertine app wrapper |
339 | */ |
340 | /* |
341 | - * Copyright 2015-2016 Canonical Ltd |
342 | + * Copyright 2015-2017 Canonical Ltd |
343 | * |
344 | * Libertine is free software: you can redistribute it and/or modify it under |
345 | * the terms of the GNU General Public License, version 3, as published by the |
346 | @@ -24,7 +24,7 @@ |
347 | #include "common/ContainerBindMountsList.h" |
348 | #include "common/ContainerConfigList.h" |
349 | #include "common/LibertineConfig.h" |
350 | -#include "common/PackageOperationDetails.h" |
351 | +#include "common/ContainerOperationDetails.h" |
352 | #include "libertine/config.h" |
353 | #include <cstdlib> |
354 | #include <QtCore/QCommandLineParser> |
355 | @@ -91,7 +91,7 @@ |
356 | , main_qml_source_file_(find_main_qml_source_file()) |
357 | { |
358 | qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker"); |
359 | - qmlRegisterType<PackageOperationDetails>("Libertine", 1, 0, "PackageOperationDetails"); |
360 | + qmlRegisterType<ContainerOperationDetails>("Libertine", 1, 0, "ContainerOperationDetails"); |
361 | |
362 | setApplicationName(LIBERTINE_APPLICATION_NAME); |
363 | setApplicationVersion(LIBERTINE_VERSION); |
364 | @@ -116,7 +116,7 @@ |
365 | container_apps_ = new ContainerAppsList(containers_, this); |
366 | container_archives_ = new ContainerArchivesList(containers_, this); |
367 | container_bind_mounts_ = new ContainerBindMountsList(containers_, this); |
368 | - package_operation_details_ = new PackageOperationDetails(this); |
369 | + container_operation_details_ = new ContainerOperationDetails(this); |
370 | |
371 | initialize_view(); |
372 | view_.show(); |
373 | @@ -144,7 +144,7 @@ |
374 | ctxt->setContextProperty("containerAppsList", container_apps_); |
375 | ctxt->setContextProperty("containerArchivesList", container_archives_); |
376 | ctxt->setContextProperty("containerBindMountsList", container_bind_mounts_); |
377 | - ctxt->setContextProperty("packageOperationDetails", package_operation_details_); |
378 | + ctxt->setContextProperty("containerOperationDetails", container_operation_details_); |
379 | |
380 | view_.setSource(QUrl::fromLocalFile(main_qml_source_file_)); |
381 | connect(view_.engine(), SIGNAL(quit()), SLOT(quit())); |
382 | |
383 | === modified file 'libertine/libertine.h' |
384 | --- libertine/libertine.h 2017-02-16 17:32:48 +0000 |
385 | +++ libertine/libertine.h 2017-03-01 18:38:22 +0000 |
386 | @@ -3,7 +3,7 @@ |
387 | * @brief Libertine app wrapper |
388 | */ |
389 | /* |
390 | - * Copyright 2015 Canonical Ltd |
391 | + * Copyright 2015-2017 Canonical Ltd |
392 | * |
393 | * Libertine is free software: you can redistribute it and/or modify it under |
394 | * the terms of the GNU General Public License, version 3, as published by the |
395 | @@ -31,7 +31,7 @@ |
396 | class ContainerAppsList; |
397 | class ContainerArchivesList; |
398 | class ContainerBindMountsList; |
399 | -class PackageOperationDetails; |
400 | +class ContainerOperationDetails; |
401 | |
402 | |
403 | class Libertine |
404 | @@ -59,7 +59,7 @@ |
405 | ContainerAppsList* container_apps_; |
406 | ContainerArchivesList* container_archives_; |
407 | ContainerBindMountsList* container_bind_mounts_; |
408 | - PackageOperationDetails* package_operation_details_; |
409 | + ContainerOperationDetails* container_operation_details_; |
410 | QQuickView view_; |
411 | }; |
412 | |
413 | |
414 | === modified file 'qml/common/ContainerEditView.qml' |
415 | --- qml/common/ContainerEditView.qml 2017-02-14 19:53:13 +0000 |
416 | +++ qml/common/ContainerEditView.qml 2017-03-01 18:38:22 +0000 |
417 | @@ -260,10 +260,10 @@ |
418 | |
419 | function operationSetup() { |
420 | var worker = Qt.createComponent("ContainerManager.qml").createObject(parent) |
421 | - worker.error.connect(packageOperationDetails.error) |
422 | - worker.updateOperationDetails.connect(packageOperationDetails.update) |
423 | - packageOperationDetails.send.connect(worker.packageOperationInteraction) |
424 | - worker.operationFinished.connect(packageOperationDetails.clear) |
425 | + worker.error.connect(containerOperationDetails.error) |
426 | + worker.updateOperationDetails.connect(containerOperationDetails.update) |
427 | + containerOperationDetails.send.connect(worker.containerOperationInteraction) |
428 | + worker.operationFinished.connect(containerOperationDetails.clear) |
429 | return worker |
430 | } |
431 | |
432 | |
433 | === modified file 'qml/common/ContainerInfoView.qml' |
434 | --- qml/common/ContainerInfoView.qml 2016-09-27 14:20:23 +0000 |
435 | +++ qml/common/ContainerInfoView.qml 2017-03-01 18:38:22 +0000 |
436 | @@ -3,7 +3,7 @@ |
437 | * @brief Container info view |
438 | */ |
439 | /* |
440 | - * Copyright 2016 Canonical Ltd |
441 | + * Copyright 2016-2017 Canonical Ltd |
442 | * |
443 | * Libertine is free software: you can redistribute it and/or modify it under |
444 | * the terms of the GNU General Public License, version 3, as published by the |
445 | @@ -38,6 +38,8 @@ |
446 | property bool showDetails: false |
447 | property string operationDetails: "" |
448 | |
449 | + signal sendOperationInteraction(string text) |
450 | + |
451 | Flickable { |
452 | anchors { |
453 | topMargin: pageHeader.height |
454 | @@ -103,11 +105,25 @@ |
455 | anchors.left: parent.left |
456 | anchors.right: parent.right |
457 | height: Math.max(containerInfoView.height - pageHeader.height - idView.height - nameView.height - distroView.height |
458 | - - statusView.height - showDetailsView.height, |
459 | - units.gu(35)) |
460 | + - statusView.height - showDetailsView.height - operationInputField.height, |
461 | + units.gu(30)) |
462 | readOnly: true |
463 | text: operationDetails |
464 | } |
465 | + |
466 | + TextField { |
467 | + id: operationInputField |
468 | + visible: showDetails && (statusText === "installing packages" || |
469 | + statusText === "removing packages" || |
470 | + statusText === "updating") |
471 | + anchors.left: parent.left |
472 | + anchors.right: parent.right |
473 | + text: "" |
474 | + onAccepted: { |
475 | + sendOperationInteraction(text) |
476 | + text = "" |
477 | + } |
478 | + } |
479 | } |
480 | } |
481 | |
482 | @@ -115,21 +131,23 @@ |
483 | containerConfigList.configChanged.connect(reloadStatus) |
484 | |
485 | var worker = Qt.createComponent("ContainerManager.qml").createObject(parent) |
486 | - operationDetails = packageOperationDetails.details(currentContainer, "") |
487 | - packageOperationDetails.updated.connect(updateDetails) |
488 | + operationDetails = containerOperationDetails.details(currentContainer) |
489 | + containerOperationDetails.updated.connect(updateDetails) |
490 | |
491 | operationDetailsView.cursorPosition = operationDetailsView.length |
492 | if (operationDetails !== "") { |
493 | showDetails = !showDetails |
494 | } |
495 | + sendOperationInteraction.connect(containerOperationDetails.send) |
496 | } |
497 | |
498 | Component.onDestruction: { |
499 | containerConfigList.configChanged.disconnect(reloadStatus) |
500 | + sendOperationInteraction.disconnect(containerOperationDetails.send) |
501 | } |
502 | |
503 | - function updateDetails(container_id, package_name, details) { |
504 | - if (container_id === currentContainer && package_name === "") { |
505 | + function updateDetails(container_id, details) { |
506 | + if (container_id === currentContainer) { |
507 | operationDetails += details |
508 | operationDetailsView.cursorPosition = operationDetailsView.length |
509 | } |
510 | |
511 | === modified file 'qml/common/ContainerOptionsDialog.qml' |
512 | --- qml/common/ContainerOptionsDialog.qml 2016-09-27 14:20:23 +0000 |
513 | +++ qml/common/ContainerOptionsDialog.qml 2017-03-01 18:38:22 +0000 |
514 | @@ -3,7 +3,7 @@ |
515 | * @brief Libertine container options dialog |
516 | */ |
517 | /* |
518 | - * Copyright 2016 Canonical Ltd |
519 | + * Copyright 2016-2017 Canonical Ltd |
520 | * |
521 | * Libertine is free software: you can redistribute it and/or modify it under |
522 | * the terms of the GNU General Public License, version 3, as published by the |
523 | @@ -99,9 +99,9 @@ |
524 | var container_id = containerConfigList.addNewContainer("lxc", containerNameInput.text) |
525 | var worker = Qt.createComponent("ContainerManager.qml").createObject(parent) |
526 | |
527 | - worker.updateOperationDetails.connect(packageOperationDetails.update) |
528 | - worker.operationFinished.connect(packageOperationDetails.clear) |
529 | - worker.error.connect(packageOperationDetails.error) |
530 | + worker.updateOperationDetails.connect(containerOperationDetails.update) |
531 | + worker.operationFinished.connect(containerOperationDetails.clear) |
532 | + worker.error.connect(containerOperationDetails.error) |
533 | |
534 | worker.createContainer(container_id, |
535 | containerConfigList.getContainerName(container_id), |
536 | |
537 | === modified file 'qml/common/ContainersList.qml' |
538 | --- qml/common/ContainersList.qml 2017-02-07 09:21:41 +0000 |
539 | +++ qml/common/ContainersList.qml 2017-03-01 18:38:22 +0000 |
540 | @@ -40,7 +40,7 @@ |
541 | |
542 | function edit(id, status) { |
543 | if (status === "removing") { |
544 | - packageOperationDetails.error(i18n.tr("Container Unavailable"), i18n.tr("Container is being destroyed and is no longer editable.")) |
545 | + containerOperationDetails.error(i18n.tr("Container Unavailable"), i18n.tr("Container is being destroyed and is no longer editable.")) |
546 | return |
547 | } |
548 | currentContainer = id |
549 | @@ -65,7 +65,10 @@ |
550 | rightMargin: units.gu(2) |
551 | } |
552 | visible: installStatus === i18n.tr("installing") || |
553 | - installStatus === i18n.tr("removing") |
554 | + installStatus === i18n.tr("removing") || |
555 | + installStatus === i18n.tr("installing packages") || |
556 | + installStatus === i18n.tr("removing packages") || |
557 | + installStatus === i18n.tr("updating") |
558 | running: containerActivity.visible |
559 | } |
560 | |
561 | @@ -79,7 +82,7 @@ |
562 | description: i18n.tr("Delete Container") |
563 | onTriggered: { |
564 | var worker = Qt.createComponent("../common/ContainerManager.qml").createObject(parent) |
565 | - worker.error.connect(packageOperationDetails.error) |
566 | + worker.error.connect(containerOperationDetails.error) |
567 | worker.destroyContainer(containerId) |
568 | } |
569 | } |
570 | @@ -164,8 +167,8 @@ |
571 | |
572 | if (currentContainer && !containerConfigList.getContainerStatus(currentContainer)) { |
573 | currentContainer = "" |
574 | - packageOperationDetails.error(i18n.tr("Container Unavailable"), |
575 | - i18n.tr("This container has been destroyed and is no longer valid. You have been returned to the containers overview.")) |
576 | + containerOperationDetails.error(i18n.tr("Container Unavailable"), |
577 | + i18n.tr("This container has been destroyed and is no longer valid. You have been returned to the containers overview.")) |
578 | } |
579 | } |
580 | } |
581 | |
582 | === modified file 'qml/common/ExtraArchivesView.qml' |
583 | --- qml/common/ExtraArchivesView.qml 2017-02-13 20:28:16 +0000 |
584 | +++ qml/common/ExtraArchivesView.qml 2017-03-01 18:38:22 +0000 |
585 | @@ -97,7 +97,7 @@ |
586 | function deleteArchive(archive) { |
587 | var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView) |
588 | worker.finishedConfigure.connect(finishedConfigure) |
589 | - worker.error.connect(packageOperationDetails.error) |
590 | + worker.error.connect(containerOperationDetails.error) |
591 | worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--archive", "remove", "--archive-name", "\"" + archive + "\""]) |
592 | } |
593 | |
594 | |
595 | === modified file 'qml/common/ExtraBindMountsView.qml' |
596 | --- qml/common/ExtraBindMountsView.qml 2017-02-22 20:19:22 +0000 |
597 | +++ qml/common/ExtraBindMountsView.qml 2017-03-01 18:38:22 +0000 |
598 | @@ -85,13 +85,13 @@ |
599 | |
600 | function deleteBindMount(mount) { |
601 | var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView) |
602 | - worker.error.connect(packageOperationDetails.error) |
603 | + worker.error.connect(containerOperationDetails.error) |
604 | worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--bind-mount", "remove", "--mount-path", "\"" + mount + "\""]) |
605 | } |
606 | |
607 | function addBindMount(mount) { |
608 | var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView) |
609 | - worker.error.connect(packageOperationDetails.error) |
610 | + worker.error.connect(containerOperationDetails.error) |
611 | worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--bind-mount", "add", "--mount-path", "\"" + mount + "\""]) |
612 | } |
613 | |
614 | |
615 | === modified file 'qml/common/ManageContainer.qml' |
616 | --- qml/common/ManageContainer.qml 2017-02-16 19:57:39 +0000 |
617 | +++ qml/common/ManageContainer.qml 2017-03-01 18:38:22 +0000 |
618 | @@ -3,7 +3,7 @@ |
619 | * @brief Libertine manage container view |
620 | */ |
621 | /* |
622 | - * Copyright 2016 Canonical Ltd |
623 | + * Copyright 2016-2017 Canonical Ltd |
624 | * |
625 | * Libertine is free software: you can redistribute it and/or modify it under |
626 | * the terms of the GNU General Public License, version 3, as published by the |
627 | @@ -52,8 +52,8 @@ |
628 | onClicked: { |
629 | var worker = Qt.createComponent("ContainerManager.qml").createObject(parent) |
630 | |
631 | - worker.updateOperationDetails.connect(packageOperationDetails.update) |
632 | - worker.operationFinished.connect(packageOperationDetails.clear) |
633 | + worker.updateOperationDetails.connect(containerOperationDetails.update) |
634 | + worker.operationFinished.connect(containerOperationDetails.clear) |
635 | |
636 | if (checked) { |
637 | worker.configureContainer(currentContainer, |
638 | @@ -115,7 +115,7 @@ |
639 | checked: isDefaultContainer |
640 | onClicked: { |
641 | var worker = Qt.createComponent("ContainerManager.qml").createObject(parent) |
642 | - worker.error.connect(packageOperationDetails.error) |
643 | + worker.error.connect(containerOperationDetails.error) |
644 | |
645 | var fallback = checked |
646 | worker.error.connect(function() { |
647 | @@ -141,10 +141,10 @@ |
648 | |
649 | function updateContainer() { |
650 | var worker = Qt.createComponent("ContainerManager.qml").createObject(parent) |
651 | - worker.error.connect(packageOperationDetails.error); |
652 | + worker.error.connect(containerOperationDetails.error); |
653 | |
654 | - worker.updateOperationDetails.connect(packageOperationDetails.update) |
655 | - worker.operationFinished.connect(packageOperationDetails.clear) |
656 | + worker.updateOperationDetails.connect(containerOperationDetails.update) |
657 | + worker.operationFinished.connect(containerOperationDetails.clear) |
658 | |
659 | worker.updateContainer(currentContainer, containerConfigList.getContainerName(currentContainer)) |
660 | } |
661 | |
662 | === modified file 'qml/common/PackageInfoView.qml' |
663 | --- qml/common/PackageInfoView.qml 2016-10-17 14:14:22 +0000 |
664 | +++ qml/common/PackageInfoView.qml 2017-03-01 18:38:22 +0000 |
665 | @@ -3,7 +3,7 @@ |
666 | * @brief Container package info view |
667 | */ |
668 | /* |
669 | - * Copyright 2016 Canonical Ltd |
670 | + * Copyright 2016-2017 Canonical Ltd |
671 | * |
672 | * Libertine is free software: you can redistribute it and/or modify it under |
673 | * the terms of the GNU General Public License, version 3, as published by the |
674 | @@ -33,11 +33,7 @@ |
675 | property var currentPackage: null |
676 | property var statusText: containerConfigList.getAppStatus(currentContainer, currentPackage) |
677 | property var packageVersionText: i18n.tr("Obtaining package version…") |
678 | - property string currentDetails: "" |
679 | property var worker: null |
680 | - property bool showDetails: false |
681 | - |
682 | - signal sendOperationInteraction(string text) |
683 | |
684 | Flickable { |
685 | anchors { |
686 | @@ -74,37 +70,15 @@ |
687 | id: showDetailsView |
688 | control: Button { |
689 | text: enabled ? |
690 | - showDetails ? i18n.tr('Hide') : i18n.tr('Show') |
691 | + i18n.tr('View') |
692 | : i18n.tr('None') |
693 | - enabled: currentDetails != "" |
694 | + enabled: statusText === 'installing' || statusText === 'removing' |
695 | onClicked: { |
696 | - showDetails = !showDetails |
697 | + pageStack.addPageToNextColumn(packageInfoView, Qt.resolvedUrl("ContainerInfoView.qml"), {currentContainer: currentContainer}) |
698 | } |
699 | } |
700 | text: i18n.tr("Operation details") |
701 | } |
702 | - |
703 | - TextArea { |
704 | - id: packageDetailsView |
705 | - visible: showDetails |
706 | - anchors.left: parent.left |
707 | - anchors.right: parent.right |
708 | - height: Math.max(packageInfoView.height - pageHeader.height - packageListItem.height - showDetailsView.height - statusListItem.height - 35, units.gu(35)) |
709 | - readOnly: true |
710 | - text: currentDetails |
711 | - } |
712 | - |
713 | - TextField { |
714 | - id: packageInputField |
715 | - visible: showDetails && (statusText === "installing" || statusText === "removing") |
716 | - anchors.left: parent.left |
717 | - anchors.right: parent.right |
718 | - text: "" |
719 | - onAccepted: { |
720 | - sendOperationInteraction(text) |
721 | - text = "" |
722 | - } |
723 | - } |
724 | } |
725 | } |
726 | |
727 | @@ -113,32 +87,12 @@ |
728 | var command = "apt-cache policy " + currentPackage |
729 | var worker = Qt.createComponent("ContainerManager.qml").createObject(parent) |
730 | worker.finishedCommand.connect(getPackageVersion) |
731 | - |
732 | - currentDetails = packageOperationDetails.details(currentContainer, currentPackage) |
733 | - packageDetailsView.cursorPosition = packageDetailsView.length |
734 | - if (currentDetails != "") { |
735 | - showDetails = !showDetails |
736 | - } |
737 | - |
738 | - packageOperationDetails.updated.connect(updatePackageDetails) |
739 | - sendOperationInteraction.connect(packageOperationDetails.send) |
740 | - |
741 | worker.error.connect(onError) |
742 | - worker.error.connect(packageOperationDetails.error) |
743 | worker.runCommand(currentContainer, containerConfigList.getContainerName(currentContainer), command) |
744 | } |
745 | |
746 | Component.onDestruction: { |
747 | containerConfigList.configChanged.disconnect(reloadStatus) |
748 | - packageOperationDetails.updated.disconnect(updatePackageDetails) |
749 | - sendOperationInteraction.disconnect(packageOperationDetails.send) |
750 | - } |
751 | - |
752 | - function updatePackageDetails(container_id, package_name, details) { |
753 | - if (container_id === currentContainer && package_name === currentPackage) { |
754 | - currentDetails += details |
755 | - packageDetailsView.cursorPosition = packageDetailsView.length |
756 | - } |
757 | } |
758 | |
759 | function reloadStatus() { |
760 | |
761 | === modified file 'qml/common/SearchResultsView.qml' |
762 | --- qml/common/SearchResultsView.qml 2017-02-07 10:57:50 +0000 |
763 | +++ qml/common/SearchResultsView.qml 2017-03-01 18:38:22 +0000 |
764 | @@ -122,7 +122,7 @@ |
765 | |
766 | var worker = Qt.createComponent("ContainerManager.qml").createObject(parent) |
767 | worker.finishedSearch.connect(finishedSearch) |
768 | - worker.error.connect(packageOperationDetails.error) |
769 | + worker.error.connect(containerOperationDetails.error) |
770 | |
771 | worker.searchPackageCache(currentContainer, query) |
772 | } |
773 | |
774 | === modified file 'qml/gui/libertine.qml' |
775 | --- qml/gui/libertine.qml 2017-02-07 09:21:41 +0000 |
776 | +++ qml/gui/libertine.qml 2017-03-01 18:38:22 +0000 |
777 | @@ -32,7 +32,7 @@ |
778 | signal error(string short_description, string details) |
779 | |
780 | Component.onCompleted: { |
781 | - packageOperationDetails.error.connect(error) |
782 | + containerOperationDetails.error.connect(error) |
783 | Qt.createComponent("../common/ContainerManager.qml").createObject(mainView).fixIntegrity() |
784 | } |
785 | |
786 | |
787 | === modified file 'system-settings-plugin/plugin.cpp' |
788 | --- system-settings-plugin/plugin.cpp 2017-02-08 14:57:34 +0000 |
789 | +++ system-settings-plugin/plugin.cpp 2017-03-01 18:38:22 +0000 |
790 | @@ -21,8 +21,8 @@ |
791 | #include "common/ContainerAppsList.h" |
792 | #include "common/ContainerArchivesList.h" |
793 | #include "common/ContainerConfigList.h" |
794 | +#include "common/ContainerOperationDetails.h" |
795 | #include "common/LibertineConfig.h" |
796 | -#include "common/PackageOperationDetails.h" |
797 | #include <memory> |
798 | #include <QQmlEngine> |
799 | #include <QQmlContext> |
800 | @@ -47,7 +47,7 @@ |
801 | ContainerConfigList* containers_; |
802 | ContainerAppsList* container_apps_; |
803 | ContainerArchivesList* container_archives_; |
804 | - PackageOperationDetails* package_operation_details_; |
805 | + ContainerOperationDetails* container_operation_details_; |
806 | QFileSystemWatcher watcher_; |
807 | |
808 | private slots: |
809 | @@ -61,11 +61,11 @@ |
810 | , containers_(new ContainerConfigList(config_.get(), this)) |
811 | , container_apps_(new ContainerAppsList(containers_, this)) |
812 | , container_archives_(new ContainerArchivesList(containers_, this)) |
813 | - , package_operation_details_(new PackageOperationDetails(this)) |
814 | + , container_operation_details_(new ContainerOperationDetails(this)) |
815 | , watcher_({config_->containers_config_file_name()}) |
816 | { |
817 | qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker"); |
818 | - qmlRegisterType<PackageOperationDetails>("Libertine", 1, 0, "PackageOperationDetails"); |
819 | + qmlRegisterType<ContainerOperationDetails>("Libertine", 1, 0, "ContainerOperationDetails"); |
820 | |
821 | connect(&watcher_, &QFileSystemWatcher::fileChanged, this, &LibertineItem::reload_config); |
822 | } |
823 | @@ -77,7 +77,7 @@ |
824 | ctxt->setContextProperty("containerConfigList", containers_); |
825 | ctxt->setContextProperty("containerAppsList", container_apps_); |
826 | ctxt->setContextProperty("containerArchivesList", container_archives_); |
827 | - ctxt->setContextProperty("packageOperationDetails", package_operation_details_); |
828 | + ctxt->setContextProperty("containerOperationDetails", container_operation_details_); |
829 | |
830 | auto component = new QQmlComponent(engine, |
831 | QUrl(LIBERTINE_PLUGIN_QML_DIR "/MainSettingsPage.qml"), |
832 | |
833 | === modified file 'tools/libertine-container-manager' |
834 | --- tools/libertine-container-manager 2017-02-27 21:38:56 +0000 |
835 | +++ tools/libertine-container-manager 2017-03-01 18:38:22 +0000 |
836 | @@ -160,13 +160,16 @@ |
837 | container = LibertineContainer(container_id, self.containers_config) |
838 | |
839 | self.containers_config.update_package_install_status(container_id, package, "installing") |
840 | + self.containers_config.update_container_install_status(container_id, "installing packages") |
841 | if not container.install_package(args.package, args.no_dialog): |
842 | libertine.utils.get_logger().error("Package '{}' failed to install in container '{}'" |
843 | .format(package, container_id)) |
844 | self.containers_config.delete_package(container_id, package) |
845 | + self.containers_config.update_container_install_status(args.id, "ready") |
846 | sys.exit(1) |
847 | |
848 | self.containers_config.update_package_install_status(container_id, package, "installed") |
849 | + self.containers_config.update_container_install_status(args.id, "ready") |
850 | |
851 | libertine.utils.refresh_libertine_scope() |
852 | |
853 | @@ -191,11 +194,14 @@ |
854 | libertine.utils.get_logger().error("Package \'%s\' is not installed." % args.package) |
855 | sys.exit(1) |
856 | |
857 | + self.containers_config.update_container_install_status(container_id, "removing packages") |
858 | if not self.remove_package_by_name(container_id, args.package, args.no_dialog): |
859 | libertine.utils.get_logger().error("Package '{}' failed to be removed from container '{}'" |
860 | .format(args.package, container_id)) |
861 | + self.containers_config.update_container_install_status(args.id, "ready") |
862 | sys.exit(1) |
863 | |
864 | + self.containers_config.update_container_install_status(args.id, "ready") |
865 | libertine.utils.refresh_libertine_scope() |
866 | |
867 | def search_cache(self, args): |
FAILED: Continuous integration, rev:423 /jenkins. canonical. com/libertine/ job/lp- libertine- ci/422/ /jenkins. canonical. com/libertine/ job/build/ 793/console /jenkins. canonical. com/libertine/ job/build- 0-fetch/ 803 /jenkins. canonical. com/libertine/ job/build- 2-binpkg/ arch=amd64, release= xenial+ overlay/ 784/console /jenkins. canonical. com/libertine/ job/build- 2-binpkg/ arch=amd64, release= zesty/784/ console /jenkins. canonical. com/libertine/ job/build- 2-binpkg/ arch=i386, release= xenial+ overlay/ 784/console /jenkins. canonical. com/libertine/ job/build- 2-binpkg/ arch=i386, release= zesty/784/ console
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild: /jenkins. canonical. com/libertine/ job/lp- libertine- ci/422/ rebuild
https:/