Merge lp:~michihenning/thumbnailer/snap into lp:thumbnailer/devel
- snap
- Merge into devel
Status: | Merged |
---|---|
Approved by: | James Henstridge |
Approved revision: | 377 |
Merged at revision: | 370 |
Proposed branch: | lp:~michihenning/thumbnailer/snap |
Merge into: | lp:thumbnailer/devel |
Diff against target: |
833 lines (+228/-124) 25 files modified
CMakeLists.txt (+5/-0) doc/libthumbnailer-qt/examples/qt_example_test.cpp (+3/-3) include/internal/env_vars.h (+22/-6) man/thumbnailer-service.1 (+1/-1) snapcraft.yaml (+4/-0) src/CMakeLists.txt (+1/-0) src/env_vars.cpp (+148/-0) src/file_io.cpp (+1/-1) src/imageextractor.cpp (+1/-4) src/service/inactivityhandler.cpp (+1/-39) src/settings.cpp (+2/-19) src/thumbnailer.cpp (+2/-2) src/ubuntuserverdownloader.cpp (+2/-13) tests/dbus/dbus_test.cpp (+7/-7) tests/download/download_test.cpp (+1/-1) tests/file_io/file_io_test.cpp (+1/-1) tests/image-provider/image-provider_test.cpp (+1/-2) tests/libthumbnailer-qt/libthumbnailer-qt_test.cpp (+3/-3) tests/qml/qml_test.cpp (+1/-1) tests/settings/settings_test.cpp (+3/-3) tests/slow-vs-thumb/slow-vs-thumb_test.cpp (+1/-1) tests/stress/stress_test.cpp (+4/-4) tests/thumbnailer-admin/thumbnailer-admin_test.cpp (+3/-3) tests/thumbnailer/thumbnailer_test.cpp (+8/-8) tests/utils/artserver.cpp (+2/-2) |
To merge this branch: | bzr merge lp:~michihenning/thumbnailer/snap |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
James Henstridge | Approve | ||
unity-api-1-bot | continuous-integration | Approve | |
Review via email: mp+316060@code.launchpad.net |
Commit message
Adjust paths when running in a snap. Decision whether to adjust paths is now made at compile time. Also consolidated all the environment variable accesses into an EnvVar helper class.
Added home interface to service and admin tool for the time being. This allows local thumbnailing to work (but the apparmor credentials check is currently not doing the right thing).
videos don't thumbnail yet because we are not bundling the gstreamer codecs, I suspect.
Description of the change
Adjust paths when running in a snap.
unity-api-1-bot (unity-api-1-bot) wrote : | # |
unity-api-1-bot (unity-api-1-bot) wrote : | # |
PASSED: Continuous integration, rev:374
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
unity-api-1-bot (unity-api-1-bot) wrote : | # |
PASSED: Continuous integration, rev:375
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
- 376. By Michi Henning
-
Added home interface to enable thumbnailing local files.
Also add this to the thumbnailer-admin command, because it is a royal
pain not to be able to use it for local media files.
unity-api-1-bot (unity-api-1-bot) wrote : | # |
PASSED: Continuous integration, rev:376
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
James Henstridge (jamesh) wrote : | # |
I've noted a few small issues as inline comments.
- 377. By Michi Henning
-
Review comments from James.
Michi Henning (michihenning) wrote : | # |
Thanks for that! I think I've addressed all the issues. Tests pass for normal and -DSNAP_BUILD.
unity-api-1-bot (unity-api-1-bot) wrote : | # |
PASSED: Continuous integration, rev:377
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
James Henstridge (jamesh) wrote : | # |
Looks close enough. I expected you to call the cmake option SNAP_BUILD, since that's the variable you were already using (and setting in snapcraft.yaml). That can be addressed with a future MP though.
Preview Diff
1 | === modified file 'CMakeLists.txt' |
2 | --- CMakeLists.txt 2017-01-16 05:12:01 +0000 |
3 | +++ CMakeLists.txt 2017-02-03 07:36:24 +0000 |
4 | @@ -47,6 +47,11 @@ |
5 | |
6 | add_definitions(-DQT_NO_KEYWORDS) |
7 | |
8 | +option(SnapBuild "Build for snap release") |
9 | +if(${SnapBuild} OR "${SNAP_BUILD}") |
10 | + add_definitions(-DSNAP_BUILD=1) |
11 | +endif() |
12 | + |
13 | include(GNUInstallDirs) |
14 | |
15 | # libthumbnailer-qt version |
16 | |
17 | === modified file 'doc/libthumbnailer-qt/examples/qt_example_test.cpp' |
18 | --- doc/libthumbnailer-qt/examples/qt_example_test.cpp 2017-01-17 04:13:01 +0000 |
19 | +++ doc/libthumbnailer-qt/examples/qt_example_test.cpp 2017-02-03 07:36:24 +0000 |
20 | @@ -146,7 +146,7 @@ |
21 | setenv("XDG_CACHE_HOME", (tempdir->path() + "/cache").toUtf8().data(), true); |
22 | |
23 | // set 3 seconds as max idle time |
24 | - setenv(unity::thumbnailer::internal::MAX_IDLE, "1000", true); |
25 | + setenv(unity::thumbnailer::internal::EnvVars::MAX_IDLE, "1000", true); |
26 | |
27 | dbus_.reset(new DBusServer()); |
28 | } |
29 | @@ -155,7 +155,7 @@ |
30 | { |
31 | dbus_.reset(); |
32 | |
33 | - unsetenv(unity::thumbnailer::internal::MAX_IDLE); |
34 | + unsetenv(unity::thumbnailer::internal::EnvVars::MAX_IDLE); |
35 | unsetenv("XDG_CACHE_HOME"); |
36 | tempdir.reset(); |
37 | } |
38 | @@ -192,7 +192,7 @@ |
39 | QCoreApplication app(argc, argv); |
40 | setenv("GSETTINGS_BACKEND", "memory", true); |
41 | setenv("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR, true); |
42 | - setenv(unity::thumbnailer::internal::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
43 | + setenv(unity::thumbnailer::internal::EnvVars::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
44 | ::testing::InitGoogleTest(&argc, argv); |
45 | return RUN_ALL_TESTS(); |
46 | } |
47 | |
48 | === modified file 'include/internal/env_vars.h' |
49 | --- include/internal/env_vars.h 2015-12-14 04:43:11 +0000 |
50 | +++ include/internal/env_vars.h 2017-02-03 07:36:24 +0000 |
51 | @@ -18,8 +18,9 @@ |
52 | |
53 | #pragma once |
54 | |
55 | -#include <map> |
56 | -#include <string> |
57 | +#include <internal/config.h> |
58 | + |
59 | +#include <QString> |
60 | |
61 | namespace unity |
62 | { |
63 | @@ -30,10 +31,25 @@ |
64 | namespace internal |
65 | { |
66 | |
67 | -constexpr char const* MAX_IDLE = "THUMBNAILER_MAX_IDLE"; |
68 | -constexpr char const* UBUNTU_SERVER_URL = "THUMBNAILER_UBUNTU_SERVER_URL"; |
69 | -constexpr char const* UTIL_DIR = "THUMBNAILER_UTIL_DIR"; |
70 | -constexpr char const* LOG_LEVEL = "THUMBNAILER_LOG_LEVEL"; |
71 | +struct EnvVars |
72 | +{ |
73 | + static int get_max_idle(); |
74 | + static QString get_ubuntu_server_url(); |
75 | + static QString get_util_dir(); |
76 | + static int get_log_level(); |
77 | + static std::string get_cache_dir(); |
78 | + |
79 | + static constexpr char const* MAX_IDLE = "THUMBNAILER_MAX_IDLE"; |
80 | + static constexpr int DFLT_MAX_IDLE = 30000; |
81 | + |
82 | + static constexpr char const* UBUNTU_SERVER_URL = "THUMBNAILER_UBUNTU_SERVER_URL"; |
83 | + static constexpr char const* DFLT_UBUNTU_SERVER_URL = "https://dash.ubuntu.com"; |
84 | + |
85 | + static constexpr char const* UTIL_DIR = "THUMBNAILER_UTIL_DIR"; |
86 | + static constexpr char const* DFLT_UTIL_DIR = SHARE_PRIV_ABS; |
87 | + |
88 | + static constexpr char const* LOG_LEVEL = "THUMBNAILER_LOG_LEVEL"; |
89 | +}; |
90 | |
91 | } // namespace internal |
92 | |
93 | |
94 | === modified file 'man/thumbnailer-service.1' |
95 | --- man/thumbnailer-service.1 2016-04-07 01:18:31 +0000 |
96 | +++ man/thumbnailer-service.1 2017-02-03 07:36:24 +0000 |
97 | @@ -55,7 +55,7 @@ |
98 | .B THUMBNAILER_UTIL_DIR |
99 | The directory in which to look for the \fBvs\-thumb\fP executable, which is used |
100 | to extract images from streaming media. If not set, the program is expected to be in |
101 | -\fB/usr/lib/\fP\fI<arch>\fP\fB/thumbnailer\fP. |
102 | +\fB$/usr/lib/\fP\fI<arch>\fP\fB/thumbnailer\fP. |
103 | .TP |
104 | .B THUMBNAILER_MAX_IDLE |
105 | The service exits once it has been idle for the number of milliseconds specified by this variable. If not set, |
106 | |
107 | === modified file 'snapcraft.yaml' |
108 | --- snapcraft.yaml 2017-01-30 03:00:30 +0000 |
109 | +++ snapcraft.yaml 2017-02-03 07:36:24 +0000 |
110 | @@ -44,6 +44,7 @@ |
111 | # See https://bugs.launchpad.net/snappy/+bug/1600154 |
112 | # For now, the service uses default settings because it's gsettings lookups fail. |
113 | - gsettings |
114 | + - home |
115 | slots: |
116 | - thumbnailer |
117 | thumbnailer-admin: |
118 | @@ -51,10 +52,13 @@ |
119 | plugs: |
120 | - platform |
121 | - thumbnails |
122 | + - home |
123 | |
124 | parts: |
125 | thumbnailer: |
126 | plugin: cmake |
127 | + configflags: |
128 | + - -DSNAP_BUILD=1 |
129 | source: . |
130 | after: |
131 | - desktop-ubuntu-app-platform |
132 | |
133 | === modified file 'src/CMakeLists.txt' |
134 | --- src/CMakeLists.txt 2016-02-14 23:42:00 +0000 |
135 | +++ src/CMakeLists.txt 2017-02-03 07:36:24 +0000 |
136 | @@ -18,6 +18,7 @@ |
137 | artdownloader.cpp |
138 | backoff_adjuster.cpp |
139 | check_access.cpp |
140 | + env_vars.cpp |
141 | file_io.cpp |
142 | file_lock.cpp |
143 | image.cpp |
144 | |
145 | === added file 'src/env_vars.cpp' |
146 | --- src/env_vars.cpp 1970-01-01 00:00:00 +0000 |
147 | +++ src/env_vars.cpp 2017-02-03 07:36:24 +0000 |
148 | @@ -0,0 +1,148 @@ |
149 | +/* |
150 | + * Copyright (C) 2017 Canonical Ltd. |
151 | + * |
152 | + * This program is free software: you can redistribute it and/or modify |
153 | + * it under the terms of the GNU General Public License version 3 as |
154 | + * published by the Free Software Foundation. |
155 | + * |
156 | + * This program is distributed in the hope that it will be useful, |
157 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
158 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
159 | + * GNU General Public License for more details. |
160 | + * |
161 | + * You should have received a copy of the GNU General Public License |
162 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
163 | + * |
164 | + * Authored by: Michi Henning <michi.henning@canonical.com> |
165 | + */ |
166 | + |
167 | +#include <internal/env_vars.h> |
168 | + |
169 | +#include <internal/config.h> |
170 | + |
171 | +#pragma GCC diagnostic push |
172 | +#pragma GCC diagnostic ignored "-Wold-style-cast" |
173 | +#include <glib.h> |
174 | +#pragma GCC diagnostic pop |
175 | +#include <QDebug> |
176 | +#include <sstream> |
177 | + |
178 | +using namespace std; |
179 | + |
180 | +namespace unity |
181 | +{ |
182 | + |
183 | +namespace thumbnailer |
184 | +{ |
185 | + |
186 | +namespace internal |
187 | +{ |
188 | + |
189 | +int EnvVars::get_max_idle() |
190 | +{ |
191 | + char const* c_idle_time = getenv(MAX_IDLE); |
192 | + if (c_idle_time) |
193 | + { |
194 | + std::string str_idle_time(c_idle_time); |
195 | + try |
196 | + { |
197 | + int env_value = std::stoi(str_idle_time); |
198 | + if (env_value < 1000) |
199 | + { |
200 | + std::ostringstream s; |
201 | + s << "Value for env variable THUMBNAILER_MAX_IDLE \"" << env_value << "\" must be >= 1000."; |
202 | + throw std::invalid_argument(s.str()); |
203 | + } |
204 | + return env_value; |
205 | + } |
206 | + catch (std::exception& e) |
207 | + { |
208 | + std::ostringstream s; |
209 | + s << "Value for env variable THUMBNAILER_MAX_IDLE \"" << str_idle_time << "\" must be >= 1000."; |
210 | + throw std::invalid_argument(s.str()); |
211 | + } |
212 | + } |
213 | + return DFLT_MAX_IDLE; |
214 | +} |
215 | + |
216 | +QString EnvVars::get_ubuntu_server_url() |
217 | +{ |
218 | + char const* override_url = getenv(UBUNTU_SERVER_URL); |
219 | + if (override_url && *override_url) |
220 | + { |
221 | + return override_url; |
222 | + } |
223 | + return DFLT_UBUNTU_SERVER_URL; |
224 | +} |
225 | + |
226 | +QString EnvVars::get_util_dir() |
227 | +{ |
228 | + char const* utildir = getenv(UTIL_DIR); |
229 | + if (utildir && *utildir) |
230 | + { |
231 | + return utildir; |
232 | + } |
233 | + |
234 | +#ifdef SNAP_BUILD |
235 | + char const* snapdir = getenv("SNAP"); |
236 | + if (!snapdir || !*snapdir) |
237 | + { |
238 | + throw std::runtime_error("Environment variable SNAP is not set or empty."); |
239 | + } |
240 | + return QString(snapdir) + "/" + SHARE_PRIV_ABS; |
241 | +#else |
242 | + return SHARE_PRIV_ABS; |
243 | +#endif |
244 | +} |
245 | + |
246 | +int EnvVars::get_log_level() |
247 | +{ |
248 | + char const* level = getenv(LOG_LEVEL); |
249 | + if (level && *level) |
250 | + { |
251 | + int l; |
252 | + try |
253 | + { |
254 | + l = std::stoi(level); |
255 | + } |
256 | + catch (std::exception const& e) |
257 | + { |
258 | + qCritical() << "Environment variable" << LOG_LEVEL << "has invalid setting:" << level |
259 | + << "(expected value in range 0..2) - variable ignored"; |
260 | + return -1; |
261 | + } |
262 | + if (l < 0 || l > 2) |
263 | + { |
264 | + qCritical() << "Environment variable" << LOG_LEVEL << "has invalid setting:" << level |
265 | + << "(expected value in range 0..2) - variable ignored"; |
266 | + return -1; |
267 | + } |
268 | + return l; |
269 | + } |
270 | + return -1; |
271 | +} |
272 | + |
273 | +string EnvVars::get_cache_dir() |
274 | +{ |
275 | + string cache_dir = g_get_user_cache_dir(); // Always returns something, even HOME and XDG_CACHE_HOME are not set. |
276 | + |
277 | +#ifdef SNAP_BUILD |
278 | + // When running in a snap, g_get_user_cache_dir() returns $SNAP_USER_DATA (not shared among snap versions), |
279 | + // but we want $SNAP_USER_COMMON, which is shared. PersistentCache automatically deals with versioning |
280 | + // changes in the database, so reverting to a snap with an earlier DB schema is safe. |
281 | + char const* user_common = getenv("SNAP_USER_COMMON"); |
282 | + if (user_common && *user_common) |
283 | + { |
284 | + return user_common; |
285 | + } |
286 | + setenv("SNAP_USER_COMMON", cache_dir.c_str(), 1); |
287 | +#endif |
288 | + |
289 | + return cache_dir; |
290 | +} |
291 | + |
292 | +} // namespace internal |
293 | + |
294 | +} // namespace thumbnailer |
295 | + |
296 | +} // namespace unity |
297 | |
298 | === modified file 'src/file_io.cpp' |
299 | --- src/file_io.cpp 2015-12-02 12:48:12 +0000 |
300 | +++ src/file_io.cpp 2017-02-03 07:36:24 +0000 |
301 | @@ -90,7 +90,7 @@ |
302 | int fd = mkstemp(&tmp_path[0]); |
303 | if (fd == -1) |
304 | { |
305 | - string s = string("write_file(): mkstemp() failed for " + tmp_path + ": ") + safe_strerror(errno); |
306 | + string s = string("write_file(): cannot create temp file in " + dir.native() + ": ") + safe_strerror(errno); |
307 | throw runtime_error(s); |
308 | } |
309 | |
310 | |
311 | === modified file 'src/imageextractor.cpp' |
312 | --- src/imageextractor.cpp 2016-03-18 22:49:32 +0000 |
313 | +++ src/imageextractor.cpp 2017-02-03 07:36:24 +0000 |
314 | @@ -20,7 +20,6 @@ |
315 | |
316 | #include <internal/imageextractor.h> |
317 | |
318 | -#include <internal/config.h> |
319 | #include <internal/env_vars.h> |
320 | #include <internal/safe_strerror.h> |
321 | |
322 | @@ -102,9 +101,7 @@ |
323 | { |
324 | // Gstreamer video pipelines are unstable so we need to run an |
325 | // external helper executable. |
326 | - char* utildir = getenv(UTIL_DIR); |
327 | - exe_path_ = utildir ? utildir : SHARE_PRIV_ABS; |
328 | - exe_path_ += QLatin1String("/vs-thumb"); |
329 | + exe_path_ = EnvVars::get_util_dir() + "/vs-thumb"; |
330 | QUrl in_url = QUrl::fromLocalFile(filename_.c_str()); |
331 | QUrl out_url; |
332 | out_url.setScheme("fd"); |
333 | |
334 | === modified file 'src/service/inactivityhandler.cpp' |
335 | --- src/service/inactivityhandler.cpp 2015-12-12 02:06:41 +0000 |
336 | +++ src/service/inactivityhandler.cpp 2017-02-03 07:36:24 +0000 |
337 | @@ -28,44 +28,6 @@ |
338 | #include <sstream> |
339 | #include <string> |
340 | |
341 | -const int MAX_INACTIVITY_TIME = 30000; // max inactivity time before exiting the app, in milliseconds |
342 | - |
343 | -namespace |
344 | -{ |
345 | - |
346 | -int get_env_inactivity_time(int default_value) |
347 | -{ |
348 | - using namespace unity::thumbnailer::internal; |
349 | - |
350 | - char const* c_idle_time = getenv(MAX_IDLE); |
351 | - if (c_idle_time) |
352 | - { |
353 | - std::string str_idle_time(c_idle_time); |
354 | - try |
355 | - { |
356 | - int env_value = std::stoi(str_idle_time); |
357 | - if (env_value < 1000) |
358 | - { |
359 | - std::ostringstream s; |
360 | - s << "InactivityHandler::InactivityHandler(): Value for env variable THUMBNAILER_MAX_IDLE \"" |
361 | - << env_value << "\" must be >= 1000."; |
362 | - throw std::invalid_argument(s.str()); |
363 | - } |
364 | - return env_value; |
365 | - } |
366 | - catch (std::exception& e) |
367 | - { |
368 | - std::ostringstream s; |
369 | - s << "InactivityHandler::InactivityHandler(): Value for env variable THUMBNAILER_MAX_IDLE \"" |
370 | - << str_idle_time << "\" must be >= 1000."; |
371 | - throw std::invalid_argument(s.str()); |
372 | - } |
373 | - } |
374 | - return default_value; |
375 | -} |
376 | - |
377 | -} // namespace |
378 | - |
379 | namespace unity |
380 | { |
381 | |
382 | @@ -81,7 +43,7 @@ |
383 | { |
384 | assert(timer_func); |
385 | connect(&timer_, &QTimer::timeout, this, &InactivityHandler::timer_expired); |
386 | - timer_.setInterval(get_env_inactivity_time(MAX_INACTIVITY_TIME)); |
387 | + timer_.setInterval(internal::EnvVars::get_max_idle()); |
388 | } |
389 | |
390 | InactivityHandler::~InactivityHandler() |
391 | |
392 | === modified file 'src/settings.cpp' |
393 | --- src/settings.cpp 2016-01-11 07:33:57 +0000 |
394 | +++ src/settings.cpp 2017-02-03 07:36:24 +0000 |
395 | @@ -139,26 +139,9 @@ |
396 | using namespace unity::thumbnailer::internal; |
397 | |
398 | int log_level = get_positive_or_zero_int("log-level", LOG_LEVEL_DEFAULT); |
399 | - char const* level = getenv(LOG_LEVEL); |
400 | - if (level && *level) |
401 | + int l = EnvVars::get_log_level(); |
402 | + if (l != -1) |
403 | { |
404 | - int l; |
405 | - try |
406 | - { |
407 | - l = std::stoi(level); |
408 | - } |
409 | - catch (std::exception const& e) |
410 | - { |
411 | - qCritical() << "Environment variable" << LOG_LEVEL << "has invalid setting:" << level |
412 | - << "(expected value in range 0..2) - variable ignored"; |
413 | - return log_level; |
414 | - } |
415 | - if (l < 0 || l > 2) |
416 | - { |
417 | - qCritical() << "Environment variable" << LOG_LEVEL << "has invalid setting:" << level |
418 | - << "(expected value in range 0..2) - variable ignored"; |
419 | - return log_level; |
420 | - } |
421 | log_level = l; |
422 | } |
423 | return log_level; |
424 | |
425 | === modified file 'src/thumbnailer.cpp' |
426 | --- src/thumbnailer.cpp 2017-01-30 08:24:44 +0000 |
427 | +++ src/thumbnailer.cpp 2017-02-03 07:36:24 +0000 |
428 | @@ -23,6 +23,7 @@ |
429 | #include <internal/artreply.h> |
430 | #include <internal/cachehelper.h> |
431 | #include <internal/check_access.h> |
432 | +#include <internal/env_vars.h> |
433 | #include <internal/image.h> |
434 | #include <internal/imageextractor.h> |
435 | #include <internal/local_album_art.h> |
436 | @@ -744,8 +745,7 @@ |
437 | Thumbnailer::Thumbnailer() |
438 | : downloader_(new UbuntuServerDownloader()) |
439 | { |
440 | - string xdg_base = g_get_user_cache_dir(); // Always returns something, even HOME and XDG_CACHE_HOME are not set. |
441 | - string cache_dir = xdg_base + "/unity-thumbnailer"; |
442 | + string cache_dir = EnvVars::get_cache_dir() + "/unity-thumbnailer"; |
443 | make_directories(cache_dir, 0700); |
444 | |
445 | try |
446 | |
447 | === modified file 'src/ubuntuserverdownloader.cpp' |
448 | --- src/ubuntuserverdownloader.cpp 2016-01-05 07:00:49 +0000 |
449 | +++ src/ubuntuserverdownloader.cpp 2017-02-03 07:36:24 +0000 |
450 | @@ -99,17 +99,6 @@ |
451 | return key; |
452 | } |
453 | |
454 | -char const* server_url() |
455 | -{ |
456 | - char const* server_url = DFLT_SERVER_URL; |
457 | - char const* override_url = getenv(thumbnailer::internal::UBUNTU_SERVER_URL); |
458 | - if (override_url && *override_url) |
459 | - { |
460 | - server_url = override_url; |
461 | - } |
462 | - return server_url; |
463 | -} |
464 | - |
465 | } // namespace |
466 | |
467 | class UbuntuServerArtReply : public ArtReply |
468 | @@ -279,7 +268,7 @@ |
469 | QString const& album, |
470 | chrono::milliseconds timeout) |
471 | { |
472 | - auto url = make_art_url(server_url(), ALBUM_ART_BASE_URL, artist, album, api_key_); |
473 | + auto url = make_art_url(EnvVars::get_ubuntu_server_url(), ALBUM_ART_BASE_URL, artist, album, api_key_); |
474 | return download_url(url, timeout); |
475 | } |
476 | |
477 | @@ -287,7 +276,7 @@ |
478 | QString const& album, |
479 | chrono::milliseconds timeout) |
480 | { |
481 | - auto url = make_art_url(server_url(), ARTIST_ART_BASE_URL, artist, album, api_key_); |
482 | + auto url = make_art_url(EnvVars::get_ubuntu_server_url(), ARTIST_ART_BASE_URL, artist, album, api_key_); |
483 | return download_url(url, timeout); |
484 | } |
485 | |
486 | |
487 | === modified file 'tests/dbus/dbus_test.cpp' |
488 | --- tests/dbus/dbus_test.cpp 2017-01-17 04:13:01 +0000 |
489 | +++ tests/dbus/dbus_test.cpp 2017-02-03 07:36:24 +0000 |
490 | @@ -74,8 +74,8 @@ |
491 | tempdir.reset(new QTemporaryDir(TESTBINDIR "/dbus-test.XXXXXX")); |
492 | setenv("XDG_CACHE_HOME", (tempdir->path() + "/cache").toUtf8().data(), true); |
493 | |
494 | - setenv(MAX_IDLE, "1000", true); |
495 | - setenv(LOG_LEVEL, "2", true); // For coverage |
496 | + setenv(EnvVars::MAX_IDLE, "1000", true); |
497 | + setenv(EnvVars::LOG_LEVEL, "2", true); // For coverage |
498 | |
499 | dbus_.reset(new DBusServer()); |
500 | } |
501 | @@ -90,7 +90,7 @@ |
502 | dbus_.reset(); |
503 | art_server_.reset(); |
504 | |
505 | - unsetenv(MAX_IDLE); |
506 | + unsetenv(EnvVars::MAX_IDLE); |
507 | unsetenv("XDG_CACHE_HOME"); |
508 | tempdir.reset(); |
509 | } |
510 | @@ -318,7 +318,7 @@ |
511 | QTemporaryDir tempdir(TESTBINDIR "/dbus-test.XXXXXX"); |
512 | setenv("XDG_CACHE_HOME", (tempdir.path() + "/cache").toUtf8().data(), true); |
513 | |
514 | - EnvVarGuard ev_guard(MAX_IDLE, "bad_value"); |
515 | + EnvVarGuard ev_guard(EnvVars::MAX_IDLE, "bad_value"); |
516 | try |
517 | { |
518 | unique_ptr<DBusServer> dbus(new DBusServer()); |
519 | @@ -341,7 +341,7 @@ |
520 | QTemporaryDir tempdir(TESTBINDIR "/dbus-test.XXXXXX"); |
521 | setenv("XDG_CACHE_HOME", (tempdir.path() + "/cache").toUtf8().data(), true); |
522 | |
523 | - EnvVarGuard ev_guard(MAX_IDLE, "999"); |
524 | + EnvVarGuard ev_guard(EnvVars::MAX_IDLE, "999"); |
525 | try |
526 | { |
527 | unique_ptr<DBusServer> dbus(new DBusServer()); |
528 | @@ -359,7 +359,7 @@ |
529 | QTemporaryDir tempdir(TESTBINDIR "/dbus-test.XXXXXX"); |
530 | setenv("XDG_CACHE_HOME", (tempdir.path() + "/cache").toUtf8().data(), true); |
531 | |
532 | - EnvVarGuard ev_guard(MAX_IDLE, nullptr); |
533 | + EnvVarGuard ev_guard(EnvVars::MAX_IDLE, nullptr); |
534 | unique_ptr<DBusServer> dbus(new DBusServer()); // For coverage with default timeout. |
535 | } |
536 | |
537 | @@ -623,7 +623,7 @@ |
538 | |
539 | setenv("GSETTINGS_BACKEND", "memory", true); |
540 | setenv("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR, true); |
541 | - setenv(UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
542 | + setenv(EnvVars::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
543 | ::testing::InitGoogleTest(&argc, argv); |
544 | return RUN_ALL_TESTS(); |
545 | } |
546 | |
547 | === modified file 'tests/download/download_test.cpp' |
548 | --- tests/download/download_test.cpp 2017-01-17 04:13:01 +0000 |
549 | +++ tests/download/download_test.cpp 2017-02-03 07:36:24 +0000 |
550 | @@ -234,7 +234,7 @@ |
551 | QCoreApplication qt_app(argc, argv); |
552 | setenv("GSETTINGS_BACKEND", "memory", true); |
553 | setenv("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR, true); |
554 | - setenv(UBUNTU_SERVER_URL, "http://127.0.0.1", true); |
555 | + setenv(EnvVars::UBUNTU_SERVER_URL, "http://127.0.0.1", true); |
556 | ::testing::InitGoogleTest(&argc, argv); |
557 | return RUN_ALL_TESTS(); |
558 | } |
559 | |
560 | === modified file 'tests/file_io/file_io_test.cpp' |
561 | --- tests/file_io/file_io_test.cpp 2017-01-17 04:13:01 +0000 |
562 | +++ tests/file_io/file_io_test.cpp 2017-02-03 07:36:24 +0000 |
563 | @@ -113,7 +113,7 @@ |
564 | { |
565 | chmod(dir.c_str(), 0700); |
566 | string msg = e.what(); |
567 | - EXPECT_TRUE(boost::starts_with(msg, "write_file(): mkstemp() failed for ")) << msg; |
568 | + EXPECT_TRUE(boost::starts_with(msg, "write_file(): cannot create temp file in ")) << msg; |
569 | } |
570 | |
571 | try |
572 | |
573 | === modified file 'tests/image-provider/image-provider_test.cpp' |
574 | --- tests/image-provider/image-provider_test.cpp 2017-01-17 04:13:01 +0000 |
575 | +++ tests/image-provider/image-provider_test.cpp 2017-02-03 07:36:24 +0000 |
576 | @@ -40,7 +40,6 @@ |
577 | |
578 | using namespace std; |
579 | using namespace unity::thumbnailer::qml; |
580 | -using unity::thumbnailer::internal::UTIL_DIR; |
581 | using unity::thumbnailer::qt::Thumbnailer; |
582 | |
583 | class ProviderTest : public ::testing::Test |
584 | @@ -214,7 +213,7 @@ |
585 | QGuiApplication app(argc, argv); |
586 | setenv("GSETTINGS_BACKEND", "memory", true); |
587 | setenv("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR, true); |
588 | - setenv(UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
589 | + setenv(unity::thumbnailer::internal::EnvVars::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
590 | ::testing::InitGoogleTest(&argc, argv); |
591 | return RUN_ALL_TESTS(); |
592 | } |
593 | |
594 | === modified file 'tests/libthumbnailer-qt/libthumbnailer-qt_test.cpp' |
595 | --- tests/libthumbnailer-qt/libthumbnailer-qt_test.cpp 2017-01-17 04:13:01 +0000 |
596 | +++ tests/libthumbnailer-qt/libthumbnailer-qt_test.cpp 2017-02-03 07:36:24 +0000 |
597 | @@ -82,7 +82,7 @@ |
598 | tempdir.reset(new QTemporaryDir(TESTBINDIR "/libthumbnailer-qt.XXXXXX")); |
599 | setenv("XDG_CACHE_HOME", (tempdir->path() + "/cache").toUtf8().data(), true); |
600 | |
601 | - setenv(MAX_IDLE, "10000", true); |
602 | + setenv(EnvVars::MAX_IDLE, "10000", true); |
603 | |
604 | dbus_.reset(new DBusServer()); |
605 | } |
606 | @@ -97,7 +97,7 @@ |
607 | dbus_.reset(); |
608 | art_server_.reset(); |
609 | |
610 | - unsetenv(MAX_IDLE); |
611 | + unsetenv(EnvVars::MAX_IDLE); |
612 | unsetenv("XDG_CACHE_HOME"); |
613 | tempdir.reset(); |
614 | } |
615 | @@ -794,7 +794,7 @@ |
616 | |
617 | setenv("GSETTINGS_BACKEND", "memory", true); |
618 | setenv("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR, true); |
619 | - setenv(UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
620 | + setenv(EnvVars::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
621 | |
622 | // Turn on trace so we get coverage on those parts of the code. |
623 | gobj_ptr<GSettings> gsettings(g_settings_new("com.canonical.Unity.Thumbnailer")); |
624 | |
625 | === modified file 'tests/qml/qml_test.cpp' |
626 | --- tests/qml/qml_test.cpp 2016-09-26 00:30:42 +0000 |
627 | +++ tests/qml/qml_test.cpp 2017-02-03 07:36:24 +0000 |
628 | @@ -78,7 +78,7 @@ |
629 | |
630 | setenv("GSETTINGS_BACKEND", "memory", true); |
631 | setenv("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR, true); |
632 | - setenv(unity::thumbnailer::internal::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
633 | + setenv(unity::thumbnailer::internal::EnvVars::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
634 | qmlRegisterSingletonType("testconfig", 1, 0, "Config", make_test_config); |
635 | qmlProtectModule("testconfig", 1); |
636 | |
637 | |
638 | === modified file 'tests/settings/settings_test.cpp' |
639 | --- tests/settings/settings_test.cpp 2017-01-17 04:13:01 +0000 |
640 | +++ tests/settings/settings_test.cpp 2017-02-03 07:36:24 +0000 |
641 | @@ -188,7 +188,7 @@ |
642 | |
643 | TEST(Settings, log_level_env_override) |
644 | { |
645 | - EnvVarGuard ev_guard(LOG_LEVEL, "0"); |
646 | + EnvVarGuard ev_guard(EnvVars::LOG_LEVEL, "0"); |
647 | |
648 | Settings settings; |
649 | EXPECT_EQ(0, settings.log_level()); |
650 | @@ -196,7 +196,7 @@ |
651 | |
652 | TEST(Settings, log_level_env_bad_setting) |
653 | { |
654 | - EnvVarGuard ev_guard(LOG_LEVEL, "abc"); |
655 | + EnvVarGuard ev_guard(EnvVars::LOG_LEVEL, "abc"); |
656 | |
657 | Settings settings; |
658 | EXPECT_EQ(1, settings.log_level()); |
659 | @@ -204,7 +204,7 @@ |
660 | |
661 | TEST(Settings, log_level_out_of_range) |
662 | { |
663 | - EnvVarGuard ev_guard(LOG_LEVEL, "3"); |
664 | + EnvVarGuard ev_guard(EnvVars::LOG_LEVEL, "3"); |
665 | |
666 | Settings settings; |
667 | EXPECT_EQ(1, settings.log_level()); |
668 | |
669 | === modified file 'tests/slow-vs-thumb/slow-vs-thumb_test.cpp' |
670 | --- tests/slow-vs-thumb/slow-vs-thumb_test.cpp 2017-01-17 04:13:01 +0000 |
671 | +++ tests/slow-vs-thumb/slow-vs-thumb_test.cpp 2017-02-03 07:36:24 +0000 |
672 | @@ -82,7 +82,7 @@ |
673 | QCoreApplication app(argc, argv); |
674 | |
675 | // Run fake vs-thumb that does nothing for 20 seconds. |
676 | - setenv(UTIL_DIR, TESTSRCDIR "/slow-vs-thumb/slow", true); |
677 | + setenv(EnvVars::UTIL_DIR, TESTSRCDIR "/slow-vs-thumb/slow", true); |
678 | ::testing::InitGoogleTest(&argc, argv); |
679 | return RUN_ALL_TESTS(); |
680 | } |
681 | |
682 | === modified file 'tests/stress/stress_test.cpp' |
683 | --- tests/stress/stress_test.cpp 2017-01-17 04:13:01 +0000 |
684 | +++ tests/stress/stress_test.cpp 2017-02-03 07:36:24 +0000 |
685 | @@ -163,7 +163,7 @@ |
686 | tempdir.reset(new QTemporaryDir(TESTBINDIR "/stress-test.XXXXXX")); |
687 | setenv("XDG_CACHE_HOME", (tempdir->path() + "/cache").toUtf8().data(), true); |
688 | |
689 | - setenv(MAX_IDLE, "30000", true); |
690 | + setenv(EnvVars::MAX_IDLE, "30000", true); |
691 | |
692 | dbus_.reset(new DBusServer()); |
693 | thumbnailer_.reset(new unity::thumbnailer::qt::Thumbnailer(dbus_->connection())); |
694 | @@ -224,7 +224,7 @@ |
695 | dbus_.reset(); |
696 | art_server_.reset(); |
697 | |
698 | - unsetenv(MAX_IDLE); |
699 | + unsetenv(EnvVars::MAX_IDLE); |
700 | unsetenv("XDG_CACHE_HOME"); |
701 | tempdir.reset(); |
702 | |
703 | @@ -612,8 +612,8 @@ |
704 | #endif |
705 | setenv("GSETTINGS_BACKEND", "memory", true); |
706 | setenv("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR, true); |
707 | - setenv(UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
708 | - setenv(LOG_LEVEL, "0", true); |
709 | + setenv(EnvVars::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
710 | + setenv(EnvVars::LOG_LEVEL, "0", true); |
711 | ::testing::InitGoogleTest(&argc, argv); |
712 | return RUN_ALL_TESTS(); |
713 | } |
714 | |
715 | === modified file 'tests/thumbnailer-admin/thumbnailer-admin_test.cpp' |
716 | --- tests/thumbnailer-admin/thumbnailer-admin_test.cpp 2017-01-17 04:13:01 +0000 |
717 | +++ tests/thumbnailer-admin/thumbnailer-admin_test.cpp 2017-02-03 07:36:24 +0000 |
718 | @@ -48,7 +48,7 @@ |
719 | ASSERT_NE(-1, chdir(temp_dir().c_str())); |
720 | setenv("XDG_CACHE_HOME", qPrintable(tempdir->path() + "/cache"), true); |
721 | |
722 | - setenv(MAX_IDLE, "3000", true); |
723 | + setenv(EnvVars::MAX_IDLE, "3000", true); |
724 | |
725 | dbus_.reset(new DBusServer()); |
726 | } |
727 | @@ -62,7 +62,7 @@ |
728 | { |
729 | dbus_.reset(); |
730 | |
731 | - unsetenv(MAX_IDLE); |
732 | + unsetenv(EnvVars::MAX_IDLE); |
733 | unsetenv("XDG_CACHE_HOME"); |
734 | tempdir.reset(); |
735 | } |
736 | @@ -723,7 +723,7 @@ |
737 | { |
738 | QCoreApplication app(argc, argv); |
739 | |
740 | - setenv(UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
741 | + setenv(EnvVars::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
742 | setenv("LC_ALL", "C", true); |
743 | ::testing::InitGoogleTest(&argc, argv); |
744 | return RUN_ALL_TESTS(); |
745 | |
746 | === modified file 'tests/thumbnailer/thumbnailer_test.cpp' |
747 | --- tests/thumbnailer/thumbnailer_test.cpp 2017-01-17 04:13:01 +0000 |
748 | +++ tests/thumbnailer/thumbnailer_test.cpp 2017-02-03 07:36:24 +0000 |
749 | @@ -447,7 +447,7 @@ |
750 | TEST_F(ThumbnailerTest, vs_thumb_exec_failure) |
751 | { |
752 | // Cause vs-thumb exec failure. |
753 | - EnvVarGuard ev_guard(UTIL_DIR, "no_such_directory"); |
754 | + EnvVarGuard ev_guard(EnvVars::UTIL_DIR, "no_such_directory"); |
755 | |
756 | Thumbnailer tn; |
757 | |
758 | @@ -468,7 +468,7 @@ |
759 | TEST_F(ThumbnailerTest, vs_thumb_exit_1) |
760 | { |
761 | // Run fake vs-thumb that exits with status 1 |
762 | - EnvVarGuard ev_guard(UTIL_DIR, TESTSRCDIR "/thumbnailer/vs-thumb-exit-1"); |
763 | + EnvVarGuard ev_guard(EnvVars::UTIL_DIR, TESTSRCDIR "/thumbnailer/vs-thumb-exit-1"); |
764 | |
765 | Thumbnailer tn; |
766 | |
767 | @@ -489,7 +489,7 @@ |
768 | TEST_F(ThumbnailerTest, vs_thumb_exit_2) |
769 | { |
770 | // Run fake vs-thumb that exits with status 2 |
771 | - EnvVarGuard ev_guard(UTIL_DIR, TESTSRCDIR "/thumbnailer/vs-thumb-exit-2"); |
772 | + EnvVarGuard ev_guard(EnvVars::UTIL_DIR, TESTSRCDIR "/thumbnailer/vs-thumb-exit-2"); |
773 | |
774 | Thumbnailer tn; |
775 | |
776 | @@ -510,7 +510,7 @@ |
777 | TEST_F(ThumbnailerTest, vs_thumb_exit_99) |
778 | { |
779 | // Run fake vs-thumb that exits with status 99 |
780 | - EnvVarGuard ev_guard(UTIL_DIR, TESTSRCDIR "/thumbnailer/vs-thumb-exit-99"); |
781 | + EnvVarGuard ev_guard(EnvVars::UTIL_DIR, TESTSRCDIR "/thumbnailer/vs-thumb-exit-99"); |
782 | |
783 | Thumbnailer tn; |
784 | |
785 | @@ -531,7 +531,7 @@ |
786 | TEST_F(ThumbnailerTest, vs_thumb_crash) |
787 | { |
788 | // Run fake vs-thumb that kills itself with SIGTERM |
789 | - EnvVarGuard ev_guard(UTIL_DIR, TESTSRCDIR "/thumbnailer/vs-thumb-crash"); |
790 | + EnvVarGuard ev_guard(EnvVars::UTIL_DIR, TESTSRCDIR "/thumbnailer/vs-thumb-crash"); |
791 | |
792 | Thumbnailer tn; |
793 | |
794 | @@ -1011,7 +1011,7 @@ |
795 | TEST_F(RemoteServer, dead_server) |
796 | { |
797 | // Dead server won't reply. |
798 | - EnvVarGuard ev_guard(UBUNTU_SERVER_URL, "http://deadserver.invalid"); |
799 | + EnvVarGuard ev_guard(EnvVars::UBUNTU_SERVER_URL, "http://deadserver.invalid"); |
800 | |
801 | Thumbnailer tn; |
802 | |
803 | @@ -1032,8 +1032,8 @@ |
804 | QCoreApplication app(argc, argv); |
805 | setenv("GSETTINGS_BACKEND", "memory", true); |
806 | setenv("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR, true); |
807 | - setenv(UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
808 | - setenv(UBUNTU_SERVER_URL, "http://127.0.0.1", true); |
809 | + setenv(EnvVars::UTIL_DIR, TESTBINDIR "/../src/vs-thumb", true); |
810 | + setenv(EnvVars::UBUNTU_SERVER_URL, "http://127.0.0.1", true); |
811 | ::testing::InitGoogleTest(&argc, argv); |
812 | return RUN_ALL_TESTS(); |
813 | } |
814 | |
815 | === modified file 'tests/utils/artserver.cpp' |
816 | --- tests/utils/artserver.cpp 2016-01-11 08:20:51 +0000 |
817 | +++ tests/utils/artserver.cpp 2017-02-03 07:36:24 +0000 |
818 | @@ -79,7 +79,7 @@ |
819 | { |
820 | qCritical() << "Failed to terminate fake art server"; |
821 | } |
822 | - unsetenv(unity::thumbnailer::internal::UBUNTU_SERVER_URL); |
823 | + unsetenv(unity::thumbnailer::internal::EnvVars::UBUNTU_SERVER_URL); |
824 | } |
825 | |
826 | std::string const& ArtServer::server_url() const |
827 | @@ -108,5 +108,5 @@ |
828 | |
829 | void ArtServer::update_env() |
830 | { |
831 | - setenv(unity::thumbnailer::internal::UBUNTU_SERVER_URL, server_url().c_str(), true); |
832 | + setenv(unity::thumbnailer::internal::EnvVars::UBUNTU_SERVER_URL, server_url().c_str(), true); |
833 | } |
PASSED: Continuous integration, rev:373 /jenkins. canonical. com/unity- api-1/job/ lp-thumbnailer- ci/22/ /jenkins. canonical. com/unity- api-1/job/ build/1577 /jenkins. canonical. com/unity- api-1/job/ build-0- fetch/1584 /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=amd64, release= xenial+ overlay/ 1362 /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=amd64, release= xenial+ overlay/ 1362/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=amd64, release= zesty/1362 /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=amd64, release= zesty/1362/ artifact/ output/ *zip*/output. zip /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=armhf, release= xenial+ overlay/ 1362 /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=armhf, release= xenial+ overlay/ 1362/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=armhf, release= zesty/1362 /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=armhf, release= zesty/1362/ artifact/ output/ *zip*/output. zip /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=i386, release= xenial+ overlay/ 1362 /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=i386, release= xenial+ overlay/ 1362/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=i386, release= zesty/1362 /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=i386, release= zesty/1362/ artifact/ output/ *zip*/output. zip
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild: /jenkins. canonical. com/unity- api-1/job/ lp-thumbnailer- ci/22/rebuild
https:/