Commit Graph

539 Commits

Author SHA1 Message Date
Adriaan de Groot
af1aa701bc [libcalamares] Shuffle namespace lines around
- put all the definitions inside namespace {} to avoid
   needlessly long source lines.
2019-08-23 12:09:30 +02:00
Adriaan de Groot
8ea1ea6662 [libcalamares] Add synchronousGet() to network service
- Synchronous download of a given URL; not something to
   do from the GUI thread.
 - Use it from the GeoIP service, which downloads in a
   separate thread to do GeoIP lookups.
 - Drop now-unused headers.
 - Adjust tests for GeoIP to use network service
2019-08-22 16:11:26 +02:00
Adriaan de Groot
0b2855d6e0 [libcalamares] Fix build (bad class name) 2019-08-22 10:29:39 +02:00
Adriaan de Groot
9aae9b2f02 [libcalamares] Restore Q_DELCARE_INTERFACE
- This **may** be the cause of build failures on aarch64.
2019-08-22 10:26:15 +02:00
Adriaan de Groot
310a1d76cf [calamares] Reduce warnings now that getInteger is qint64 2019-08-22 10:25:16 +02:00
Adriaan de Groot
eae931f2ed [libcalamares] Ping only when accessibility is unknown
- Restores exact functionality of previous version
   (noted by Kevin Kofler)
 - Short-circuit ping if the URL is bad.
2019-08-21 03:43:51 -04:00
Adriaan de Groot
4389c254df [libcalamares] Rely directly on QNAM's networkAccessible() 2019-08-20 10:57:34 -04:00
Adriaan de Groot
11d52df04c [libcalamares] Add API docs to network service 2019-08-20 10:57:34 -04:00
Adriaan de Groot
82622373bc [libcalamares] Remove superfluous ; (warnings--) 2019-08-20 16:05:22 +02:00
Adriaan de Groot
8d3530154f [libcalamares] Expand network service test
- Do an actual ping (also to check for memory leaks)
2019-08-20 09:57:04 -04:00
Adriaan de Groot
b8d56bb4a6 [libcalamares] Add tests for network service 2019-08-20 09:52:11 -04:00
Adriaan de Groot
d7602df51e [libcalamares] Introduce networking service
- The networking service is intended to wrap up use of
   QNetworkAccessManager and others for consumption within
   Calamares, and to provide some convenience functions
   for internet access.
 - Medium term, it may also monitor network access, so that
   we can respond to changes in network availability during
   installation.

Currently very minimal and undocumented.
2019-08-20 09:52:11 -04:00
Adriaan de Groot
7b699bfc76 [libcalamares] Access list of locale Ids
- Make it easier to obtain locale-ids (from CALAMARES_TRANSLATION_LANGUAGES)
   so avoid splitting that string multiple times.
2019-08-20 05:26:26 -04:00
Adriaan de Groot
f31ff8b9ea [libcalamares] Apply coding style to PluginFactory 2019-08-13 20:50:52 +02:00
Adriaan de Groot
ccd707b23a [libcalamares] Apply coding style
- .. or, rather, avoid re-formatting tables in future.
2019-08-13 20:49:58 +02:00
Adriaan de Groot
09a36cd669
Merge pull request #1221 from a-wai/add-base-10-sizes
Add 'base 10' partition size multiples
2019-08-13 20:26:22 +02:00
Arnaud Ferraris
a51d612afa Revert "libcalamares: Align partition sizes on actual sectors"
This reverts commit 40202705ff.
2019-08-13 16:57:47 +02:00
Adriaan de Groot
1d047839c7
Merge pull request #1220 from a-wai/prevent-int-overflow
Prevent integer overflow when parsing configuration
2019-08-13 16:21:35 +02:00
Arnaud Ferraris
40202705ff libcalamares: Align partition sizes on actual sectors
Currently, the `bytesToSectors()` function rounds a partition size to the
nearest MiB unit, which may lead to inconsistencies when a partition
is expected to only be a few KiB's.

This patch changes the behaviour of `bytesToSectors()` so that it aligns
on sector size, without rounding the partition size to a multiple of
1MiB.

Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
2019-08-12 15:55:18 +02:00
Arnaud Ferraris
209e8331b7 libcalamares: Add support for KB/MB/GB size units
Currently, all size units are expressed as KiB, MiB or GiB (resp. 2^10,
2^20 or 2^30).

In order to maximize compatibility and consistent results with other
partitioning tools, this commit adds support for sizes expressed as KB,
MB or GB (resp. 10^3, 10^6 or 10^9).

This change won't affect existing users, it simply adds a new option
that wasn't previously handled.

Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
2019-08-12 15:55:18 +02:00
Adriaan de Groot
0716a46eb2 [libcalamares] Switch to using KPluginFactory
- this is not entirely straightfoward, since  we need
   different constructor arguments for the objects
   Calamares creates (no QVariantList& args, in particular).
   Implement our own registerPlugin() and createInstance()
   for that.
 - work around a bug in K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY
2019-08-12 15:52:59 +02:00
Arnaud Ferraris
3929557a5a welcome: Fix requirements parsing
As the config files integer are now of type `QVariant::LongLong` instead
of `QVariant::Int`, requirements relying on this type were not parsed
correctly.

This patch fixes this, and adds an option to the python conversion to
take into account `QVariant::LongLong` types.

Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
2019-08-12 15:48:48 +02:00
Arnaud Ferraris
0d06e047ae libcalamares: Prevent integer overflows when parsing configuration
Currently, a number of configuration parsing-related functions and
classes use only `int` type for dealing with integers. Should the user
need a bigger integer value, this would result in an erroneous value
being used (`0`), as the correct value would overflow the 32-bits type.

In order to prevent these overflow, this patch replaces `int` with
`qint64` in the following functions & classes :

  * CalamaresUtils::yamlScalarToVariant()
  * CalamaresUtils::getInteger
  * NamedSuffix
  * PartitionSize

This way, sizes or other integer values greater than 2^31 (for signed
types) can be used.

Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
2019-08-12 15:45:34 +02:00
Adriaan de Groot
1711071c58 [libcalamares] Swap out own PluginLoader for KCoreAddons 2019-08-12 13:24:53 +02:00
Adriaan de Groot
41173360a7 [libcalamares] We're just testing file modes, not whole int range 2019-08-09 16:36:38 +02:00
Adriaan de Groot
6f73151786 [libcalamares] Reduce warnings
- Although milliseconds::count() is long long, we pass it to
   a Qt interface that only takes int; let's assume we have
   only a 32-bit count, since a timeout of 4 billion milliseconds
   is roughly 46 days, which we'll just call "no timeout".
2019-08-09 16:22:22 +02:00
Adriaan de Groot
419329ee49 [libcalamares] Remove friend, add accessor, make includes explicit 2019-08-09 06:27:13 -04:00
Adriaan de Groot
2166eb4511 [libcalamares] [libcalamaresui] Adjust for moved sources 2019-08-08 10:47:14 -04:00
Adriaan de Groot
e7c66de4df [libcalamares] Move kdsingleapplicationguard to 3rdparty 2019-08-08 10:24:18 -04:00
Adriaan de Groot
115f5bfd82 [libcalamares] Apply coding style to remainder of geoip/ 2019-08-08 12:41:41 +02:00
Adriaan de Groot
ec073ee188 [libcalamares] Apply coding style to geoip/ 2019-08-08 12:32:21 +02:00
Adriaan de Groot
6e9f1be9e9 [libcalamares] Don't reformat string tables in GeoIP 2019-08-08 11:56:20 +02:00
Adriaan de Groot
81fa1735b1 [libcalamares] Apply current coding style 2019-08-07 23:43:45 +02:00
Adriaan de Groot
6b659b6f48 [libcalamares] Apply current coding standard to locale/ 2019-08-07 23:42:33 +02:00
Adriaan de Groot
251e16e72c [libcalamares] Allow en_US locale for tests as well 2019-08-07 12:31:52 +02:00
Adriaan de Groot
4febe477cf [libcalamares] Add isEmpty() to TranslatedString
- Massage the implementation a bit, don't insert a meaningless
   copy of the key as the untranslated message.
 - Add isEmpty() to check for presence of the untranslated message.
 - Document API.
 - Update tests.
2019-08-06 11:53:35 +02:00
Adriaan de Groot
6a8e10837d [libcalamares] Drop unneeded debugging 2019-08-06 00:26:04 +02:00
Adriaan de Groot
fd75b33784 [libcalamares] Add default constructor to TranslatedString 2019-08-06 00:17:30 +02:00
Adriaan de Groot
39b7e4c55f Merge branch 'translatable-configuration' 2019-08-06 00:07:48 +02:00
Adriaan de Groot
764c775f08 [libcalamares] Tighten tests, add special case
- The tests should be run in C locale, otherwise the plain get()
   function uses the current locale, which will fail (e.g. running
   LANG=nl ./libcalamareslocaletest returns the Dutch strings for
   plain get, which isn't what we expect).
 - sr@latin is still special.
2019-08-06 00:05:24 +02:00
Adriaan de Groot
a9292d0c75 [libcalamares] Implement getting the string 2019-08-05 23:54:53 +02:00
Adriaan de Groot
50d74c4eca [libcalamares] Add get() to the string
- Look up the translation of the requested string with the current
   or a specific locale. This implementation is a stub.
 - Add tests for the getter.
2019-08-05 23:37:25 +02:00
Adriaan de Groot
e0edd1f3e2 [libcalamares] Fix misleading comment, add accessor
- the sort order is not English-at-the-top
 - add accessor for the locale ID.
2019-08-05 23:32:13 +02:00
Adriaan de Groot
28293ef77a [libcalamares] Expand tests of TranslatableString 2019-08-05 23:30:51 +02:00
Adriaan de Groot
5d6ccfe8fc [libcalamares] Adjust tests for new Esperanto support 2019-08-05 18:30:50 +02:00
Adriaan de Groot
18e2f2ae52 [libcalamares] Add tests for new TranslatedString
- Test that construction works as expected
 - Add count() method to TranslatedString for testing purposes.
2019-08-05 17:57:32 +02:00
Adriaan de Groot
19ca1b3c30 [libcalamares] One missing bit of coding style 2019-08-04 23:00:03 +02:00
Adriaan de Groot
8ea4091c7b [libcalamares] Add a TranslatedString class to locale/
- While QObject::tr and gettext give us translations **most** of the
   time via the translation mechanism, we sometimes have strings
   embedded in configuration files that need to be shown to people
   as well. Follow the .desktop style in handling this.
 - A key's value **might** be translated; use `key[lang]` for the
   translation into one of the languages that Calamares understands.
   Code that expects a translated (human-readable) string in a configuration
   file can use TranslatedString to collect all the translations of a
   given key, so that it displays the right string from the configuration
   when needed.
2019-08-04 22:56:41 +02:00
Adriaan de Groot
1afa9c4d08 [libcalamares] Apply current coding style to all of libcalamares/ 2019-08-04 22:24:55 +02:00
Adriaan de Groot
7fcb7be1e4 [libcalamares] Apply current coding style to libcalamares/locale/ 2019-08-04 22:17:12 +02:00
Adriaan de Groot
43ba59361b [libcalamares] Don't format generated files of CLDR data 2019-08-04 22:16:33 +02:00
Adriaan de Groot
fa2b94d931 [libcalamares] Apply current coding style to libcalamares/partition/ 2019-08-04 22:13:58 +02:00
Adriaan de Groot
312865cdd9 [libcalamares] Fix build on FreeBSD 2019-08-04 22:09:53 +02:00
Adriaan de Groot
b8a74657f4 [libcalamares] Apply current coding style to libcalamares/utils/
- String.cpp needs special handling since part of it should
   remain unchanged, the formatting is "special" there.
2019-08-04 22:01:56 +02:00
Adriaan de Groot
29b9a21f59 [libcalamares] Don't format files copied from KCoreAddons 2019-08-04 22:01:31 +02:00
Adriaan de Groot
b7f54a3866 [libcalamares] Don't break string tables by reformatting 2019-08-04 22:01:31 +02:00
Adriaan de Groot
cac07c1472 [libcalamares] Use std::chrono::seconds for timeouts
- Distinguish just-an-int from seconds all across the API
2019-08-01 22:47:42 +02:00
Adriaan de Groot
abd7ce2886 Merge branch 'master' into strictly-typed-timeout 2019-08-01 15:55:53 +02:00
Adriaan de Groot
c19ce26e5f [libcalamares] Expand GlobalStorage with load()
- Counterpart to save(), for JSON-style dumps
2019-08-01 12:25:42 +02:00
Adriaan de Groot
97384d3839
Merge pull request #1187 from bill-auger/job-weights
implement definable job weights
2019-07-29 13:25:09 +02:00
Adriaan de Groot
76ce0e4f2b [libcalamares] Don't crash when creating System object
- In tests, a System object might be created without first
   setting up a JobQueue. In that case, there's no instance,
   so no GS to insert into. Avoid crash here.
2019-07-05 23:20:19 +02:00
Adriaan de Groot
1a85435372 [libcalamares] Get target path relative to host / 2019-07-05 13:05:49 +02:00
Adriaan de Groot
b697461497 [libcalamares] Add System::createTargetFile()
- Calamares may need to create files in the target system;
   provide a convenient API for doing so.
 - This is mostly intended for small files with constant contents.
2019-07-05 11:29:14 +02:00
Adriaan de Groot
91644b4ba2 [libcalamares] Partially fix implementation of timeout
- Adjust most call sites to use std::chrono::duration,
 - Call to QProcess::waitForFinished() needs work, since
   that takes milliseconds.
2019-07-04 11:50:14 +02:00
Adriaan de Groot
938b1ac4aa [libcalamares] Make API more type-explicit with std::chrono
- Having an int timeoutSec is suggestive -- it's probably a number
   of seconds -- but having an explicit type that says it's seconds
   is better.
 - Doesn't compile, because the implementation and consumers have
   not changed.
2019-07-04 11:48:43 +02:00
Adriaan de Groot
aa3f909be7 [libcalamares] Tests for UMask handling 2019-07-03 00:40:05 +02:00
Adriaan de Groot
0685e3a96c [libcalamares] Move tests of the utils classes into utils/
- while here, adjust include paths (to changed dir)
 - while here, apply new code formatting
2019-07-03 00:40:05 +02:00
Adriaan de Groot
31e78ff0c2 [libcalamares] Add umask helper functions 2019-07-03 00:40:05 +02:00
bill-auger
9201842025 implement definable job weights 2019-06-28 13:38:53 -04:00
Adriaan de Groot
bd8c3fd893 CI: apply coding style to libcalamares/modulesystem 2019-06-27 15:13:32 +02:00
Adriaan de Groot
a5cef2175e [libcalamares] Add tests for the locale service
- Minimal tests just check that all the availableTranslations()
   entries have a reasonable language setting.
 - Checks that Esperanto is still broken as a locale in Qt.
2019-06-18 15:27:59 +02:00
Adriaan de Groot
68dc1f5e31 [libcalamares] Warn about badly-configured GeoIP
- Warn when type will be none
 - Re-order warnings from general to specific
2019-06-18 12:33:56 +02:00
Adriaan de Groot
6183c4e2f4 [libcalamares] Add accessors for GeoIP handler attributes 2019-06-18 12:17:25 +02:00
Adriaan de Groot
962776804c [libcalamares] Add BytesToGiB (extends BytesToMiB) 2019-06-07 23:01:18 +02:00
Adriaan de Groot
4f221b41d1 [libcalamares] Close stdin on process jobs
- This avoids processes that wait on stdin, and e.g. improves
   reaction to having just "cat" (no file) in a command, or
   a package manager that asks for input.
2019-06-07 16:11:54 +02:00
Adriaan de Groot
4e13f780f1 [libcalamares] Expand tests for runCommand
- try both with and without a working-directory set, this would have
   shown up the problem with bad indentation much earlier.
2019-06-07 16:00:37 +02:00
Adriaan de Groot
7be33b8196 [libcalamares] runCommand doesn't need queue or settings
- JobQueue is only needed to get global settings, which are needed
   when running in the target; for host commands, allow running
   without a queue.
 - Settings is needed for the value of debugsettings; assume if
   there's no settings object, that we're in a test and should
   print debugging information.
2019-06-07 15:53:27 +02:00
Adriaan de Groot
5a835f32b8 [libcalamares] Start extending tests to runCommand() 2019-06-07 13:56:16 +02:00
Adriaan de Groot
07a59bd09c [libcalamares] All commands with workingDirectory failed
- This is the same as EFAIL: a block is indented as if it's a multi-
   line else block. This isn't Python though, and the return always
   applies.
 - Add the necessary braces.
 - Apparently noone uses this code path (until ProcessJob was re-
   factored to do so).
2019-06-07 13:37:46 +02:00
Adriaan de Groot
d7f5134121 [libcalamares] Be more verbose in error situations
- runCommand can return NoWorkingDirectory in multiple places,
   make sure the log contains a more specific reason.
2019-06-07 13:32:31 +02:00
Adriaan de Groot
b587d77e31 [libcalamares] Fix untranslatable string.
- This would substitue an untranslated "in chroot" into the
   translated string, which is weird.
2019-06-07 12:40:20 +02:00
Adriaan de Groot
6055f08aff [libcalamares] Refactor ProcessJob
- Use the system runCommand() instead of a 90% copy of it.
   This **does** change the overall command to `env /bin/sh -c`
   rather than running only `/bin/sh -c`, though.
2019-06-07 12:30:38 +02:00
Adriaan de Groot
92d03c2cf7 [libcalamares] Introduce enum class for special process exit values
- Replace magic numbers like -3 with named enum values
   (NoWorkingDirectory, for -3).
 - Downside is big-ugly static_casts, but that's what you get
   for having an int as return value for processes.
2019-06-07 12:10:22 +02:00
Adriaan de Groot
61b78d8895 [libcalamares] Stop job threads before exit
- This solves a crash where the thread is destroyed while still
   running (e.g. cancelling during install).
 - The thread might not cooperate in being terminated, but then we
   have a bigger problem anyway (and Calamares will still crash on
   exit).

FIXES #1164
2019-06-07 11:46:08 +02:00
Adriaan de Groot
69dabcae32 [libcalamares] Avoid static destructor
- The static destructor issues a warning on exit:
       QBasicTimer::start: QBasicTimer can only be used with threads
       started with QThread
   so instead, heap-allocate the model. This leaks memory, but
   it's a singleton *and* we're exiting anyway.
2019-05-31 12:38:34 +02:00
Adriaan de Groot
1cf3ac810a [calamares] avoid extra defines for KCrash
- Don't need an extra indirection from WITH_KF5Crash to WITH_KCRASH,
   just use the cmakedefine directly.
 - Since the setting is only used in main.cpp, move the define
   down there and remove cmakedefine entirely.
2019-05-20 17:02:47 +02:00
Adriaan de Groot
f3bfc81e52 [libcalamares] Rename dontCancel to disableCancelDuringExec
- This way the name actually refers to what it does, rather
   than being a somewhat ambiguous overload of disableCancel.
2019-05-14 08:30:34 -04:00
Adriaan de Groot
34ffc7a20a [libcalamares] Consistent namespace usage in partition service
- The sub-directories under libcalamares (e.g. Utils, ..)
   all live in namespace CalamaresUtils (well, except for Logger).
   The services (e.g. subdirs other than utils/) live in their
   own nested namespace, so partitioning should go into
   CalamaresUtils::Partition for consistency.
2019-05-14 05:52:58 -04:00
Adriaan de Groot
10ba468748 [libcalamares] Avoid warnings / errors on both gcc and clang
- Clang 8 can detect that there is no need for a return if all
   previous paths already return. GCC 8 does not. Clang warns if
   the unreachable return is there, GCC errors out if it isn't.
 - Introduce a hack NOTREACHED that comments-out on Clang, and
   marks as unreachable (but still present) on GCC.
 - This might go away with an [[unreachable]] annotation or
   similar.
2019-05-14 05:29:18 -04:00
Adriaan de Groot
6db09f0679 [libcalamares] Handle all SizeUnit cases inside switch
- Although None will be filtered out already by unitsComparable(),
   include it in the switch to avoid a warning .. then we can
   drop the post-switch return since the switch covers all possible
   values of the enum.
2019-05-13 13:54:09 +02:00
Adriaan de Groot
90975b62bf [libcalamares] Tidy PartitionSize
- Use unitsComparable where applicable
 - Use SizeUnit instead of unit_t -- since this is a template
   specialization, we have the more meaningful type name to
   use, instead of the generic one.
2019-05-13 13:44:30 +02:00
Adriaan de Groot
72e1a36752 [libcalamares] Update partition service tests
- Use long so that 2GiB fits in the values
 - Document special case of 0[KMG]iB
2019-05-13 13:38:30 +02:00
Adriaan de Groot
7a368dc1d7 [libcalamares] Add tests for the partitioning service 2019-05-13 13:33:38 +02:00
Adriaan de Groot
93a68c3d5f [libcalamares] Add convenience method to check for unit-comparability
- Not all kinds of units are comparable. Introduce a method
   in PartitionSize to check for comparability (this could
   also be a free method, but seems more tidy here because it
   is specifically about comparing in the context of partition sizes).
2019-05-13 13:32:14 +02:00
Adriaan de Groot
d048975f15 [libcalamares] One more nested namespace 2019-05-13 13:06:28 +02:00
Adriaan de Groot
0b0fb93e75 [libcalamares] Remove redundant default: in case
- the switch handles all values of the enum and the compiler should
   be smart enough to know that (therefore default isn't needed,
   nor the return afterwards).
2019-05-13 12:34:19 +02:00
Adriaan de Groot
2c94cbdb14 [libcalamares] namespace A::B is a C++17 extension 2019-05-13 12:34:19 +02:00
Adriaan de Groot
7302b9c851 [libcalamares] Fix nested namespaces
- Declaring namespace A::B is a C++17 extension, and Calamares
   is C++14. Split the namespace declarations.
 - While here, fix extra const warning as well.
2019-05-13 12:23:41 +02:00
Adriaan de Groot
859e95432e [partition] Handle all enum values in the switch 2019-05-13 12:23:19 +02:00
Adriaan de Groot
03f88b3ed6 [libcalamares] Support looking up translation by 2-letter country
- Looks for an available translation by 2-letter country code
   and returns the row for it.
2019-05-10 14:44:54 -04:00