Merge branch 'master' of https://github.com/calamares/calamares into development

This commit is contained in:
Philip Müller 2019-07-02 07:27:35 +02:00
commit d07b529c92
28 changed files with 310 additions and 267 deletions

12
CHANGES
View File

@ -3,10 +3,20 @@ contributors are listed. Note that Calamares does not have a historical
changelog -- this log starts with version 3.2.0. The release notes on the
website will have to do for older versions.
# 3.2.10 (unreleased) #
# 3.2.11 (unreleased) #
This release contains contributions from (alphabetically by first name):
## Core ##
## Modules ##
# 3.2.10 (2019-06-28) #
This release contains contributions from (alphabetically by first name):
- No other contributors this time around.
Distributions are **advised** to check the slideshow they use for the
installation step; changes in loading and translation mechanisms may
require changes in the slideshow.

View File

@ -37,7 +37,7 @@
cmake_minimum_required( VERSION 3.2 FATAL_ERROR )
project( CALAMARES
VERSION 3.2.10
VERSION 3.2.11
LANGUAGES C CXX )
set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during development

View File

@ -1142,7 +1142,7 @@ L&apos;instal·lador es tancarà i tots els canvis es perdran.</translation>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="133"/>
<source>&lt;h1&gt;Setup Failed&lt;/h1&gt;&lt;br/&gt;%1 has not been set up on your computer.&lt;br/&gt;The error message was: %2.</source>
<translation>&lt;h1&gt;La configuració ha fallat&lt;/h1&gt;&lt;br/&gt;No s&apos;ha configurat %1 a l&apos;ordinador.&lt;br/&gt;El missatge d&apos;error ha estat el següent: %2.</translation>
<translation>&lt;h1&gt;La configuració ha fallat.&lt;/h1&gt;&lt;br/&gt;No s&apos;ha configurat %1 a l&apos;ordinador.&lt;br/&gt;El missatge d&apos;error ha estat el següent: %2.</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="139"/>
@ -1251,7 +1251,7 @@ L&apos;instal·lador es tancarà i tots els canvis es perdran.</translation>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="143"/>
<source>The installer is not running with administrator rights.</source>
<translation>L&apos;instal·lador no s&apos;ha executat amb privilegis d&apos;administrador.</translation>
<translation>L&apos;instal·lador no s&apos;executa amb privilegis d&apos;administrador.</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/GeneralRequirements.cpp" line="152"/>
@ -1272,7 +1272,7 @@ L&apos;instal·lador es tancarà i tots els canvis es perdran.</translation>
<location filename="../src/modules/oemid/IDJob.cpp" line="59"/>
<location filename="../src/modules/oemid/IDJob.cpp" line="67"/>
<source>OEM Batch Identifier</source>
<translation>Identificador de lots OEM</translation>
<translation>Identificador de lots d&apos;OEM</translation>
</message>
<message>
<location filename="../src/modules/oemid/IDJob.cpp" line="48"/>
@ -1407,28 +1407,28 @@ L&apos;instal·lador es tancarà i tots els canvis es perdran.</translation>
<location filename="../src/modules/license/LicenseWidget.cpp" line="122"/>
<source>&lt;strong&gt;%1 driver&lt;/strong&gt;&lt;br/&gt;by %2</source>
<extracomment>%1 is an untranslatable product name, example: Creative Audigy driver</extracomment>
<translation>&lt;strong&gt;%1 controlador&lt;/strong&gt;&lt;br/&gt;de %2</translation>
<translation>&lt;strong&gt;Controlador %1&lt;/strong&gt;&lt;br/&gt;de %2</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="129"/>
<source>&lt;strong&gt;%1 graphics driver&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;by %2&lt;/font&gt;</source>
<extracomment>%1 is usually a vendor name, example: Nvidia graphics driver</extracomment>
<translation>&lt;strong&gt;%1 controlador gràfic&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;de %2&lt;/font&gt;</translation>
<translation>&lt;strong&gt;Controlador gràfic %1&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;de %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="135"/>
<source>&lt;strong&gt;%1 browser plugin&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;by %2&lt;/font&gt;</source>
<translation>&lt;strong&gt;%1 connector del navegador&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;de %2&lt;/font&gt;</translation>
<translation>&lt;strong&gt;Connector del navegador %1&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;de %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="141"/>
<source>&lt;strong&gt;%1 codec&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;by %2&lt;/font&gt;</source>
<translation>&lt;strong&gt;%1 còdec&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;de %2&lt;/font&gt;</translation>
<translation>&lt;strong&gt;Còdec %1&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;de %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="147"/>
<source>&lt;strong&gt;%1 package&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;by %2&lt;/font&gt;</source>
<translation>&lt;strong&gt;%1 paquet&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;de %2&lt;/font&gt;</translation>
<translation>&lt;strong&gt;Paquet %1&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;de %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="153"/>
@ -2571,12 +2571,12 @@ Sortida:
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="118"/>
<source>This computer does not satisfy some of the recommended requirements for setting up %1.&lt;br/&gt;Setup can continue, but some features might be disabled.</source>
<translation>Aquest ordinador no satisfà alguns dels requisits recomanats per configurar-hi %1.&lt;br/&gt;La configuració pot continuar, però algunes característiques podrien estar desactivades.</translation>
<translation>Aquest ordinador no satisfà alguns dels requisits recomanats per configurar-hi %1.&lt;br/&gt;La configuració pot continuar, però algunes característiques podrien estar inhabilitades.</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="122"/>
<source>This computer does not satisfy some of the recommended requirements for installing %1.&lt;br/&gt;Installation can continue, but some features might be disabled.</source>
<translation>Aquest ordinador no satisfà alguns dels requisits recomanats per instal·lar-hi %1.&lt;br/&gt;La instal·lació pot continuar, però algunes característiques podrien estar desactivades.</translation>
<translation>Aquest ordinador no satisfà alguns dels requisits recomanats per instal·lar-hi %1.&lt;br/&gt;La instal·lació pot continuar, però algunes característiques podrien estar inhabilitades.</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="160"/>

View File

@ -99,12 +99,12 @@
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="106"/>
<source>Reload Stylesheet</source>
<translation type="unfinished"/>
<translation>Genindlæs stilark</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="113"/>
<source>Widget Tree</source>
<translation type="unfinished"/>
<translation>Widgettræ</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.cpp" line="233"/>
@ -159,12 +159,12 @@
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="51"/>
<source>Run command &apos;%1&apos; in target system.</source>
<translation type="unfinished"/>
<translation>Kør kommandoen &apos;%1&apos; i målsystemet.</translation>
</message>
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="51"/>
<source> Run command &apos;%1&apos;.</source>
<translation type="unfinished"/>
<translation> Kør kommandoen &apos;%1&apos;.</translation>
</message>
<message>
<location filename="../src/libcalamares/ProcessJob.cpp" line="59"/>

View File

@ -466,7 +466,7 @@ Saldrá del instalador y se perderán todos los cambios.</translation>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="996"/>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1082"/>
<source>Current:</source>
<translation>Corriente</translation>
<translation>Actual:</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="827"/>

View File

@ -267,7 +267,7 @@
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="193"/>
<source>%1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution.</source>
<translation>%1 Calamares Calamares 使</translation>
<translation>%1 Calamares Calamares 使</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="198"/>
@ -318,7 +318,7 @@
<location filename="../src/libcalamaresui/ViewManager.cpp" line="402"/>
<source>Do you really want to cancel the current setup process?
The setup program will quit and all changes will be lost.</source>
<translation>
<translation>
</translation>
</message>
<message>
@ -351,7 +351,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="265"/>
<source>The %1 installer is about to make changes to your disk in order to install %2.&lt;br/&gt;&lt;strong&gt;You will not be able to undo these changes.&lt;/strong&gt;</source>
<translation>%1 %2 &lt;br/&gt;&lt;strong&gt;&lt;/strong&gt;</translation>
<translation>%1 %2 &lt;br/&gt;&lt;strong&gt;&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="270"/>
@ -506,7 +506,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1264"/>
<source>This storage device does not seem to have an operating system on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
<translation>&lt;br/&gt;</translation>
<translation>&lt;br/&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1269"/>
@ -519,7 +519,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1297"/>
<source>This storage device has %1 on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
<translation>%1 ?&lt;br/&gt;</translation>
<translation> %1 &lt;br/&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1501"/>
@ -565,12 +565,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1321"/>
<source>This storage device already has an operating system on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
<translation>?&lt;br/&gt;</translation>
<translation>&lt;br/&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1347"/>
<source>This storage device has multiple operating systems on it. What would you like to do?&lt;br/&gt;You will be able to review and confirm your choices before any change is made to the storage device.</source>
<translation>&lt;br /&gt;</translation>
<translation>&lt;br /&gt;</translation>
</message>
</context>
<context>
@ -734,7 +734,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="67"/>
<source>Creating new %1 partition on %2.</source>
<translation>%2 %1 </translation>
<translation>%2 %1 </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="79"/>
@ -775,22 +775,22 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="47"/>
<source>Create new %1 partition table on %2.</source>
<translation>%2 %1 </translation>
<translation>%2 %1 </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="54"/>
<source>Create new &lt;strong&gt;%1&lt;/strong&gt; partition table on &lt;strong&gt;%2&lt;/strong&gt; (%3).</source>
<translation>&lt;strong&gt;%2&lt;/strong&gt; (%3) &lt;strong&gt;%1&lt;/strong&gt; </translation>
<translation>&lt;strong&gt;%2&lt;/strong&gt; (%3) &lt;strong&gt;%1&lt;/strong&gt; </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="64"/>
<source>Creating new %1 partition table on %2.</source>
<translation>%2 %1 </translation>
<translation>%2 %1 </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="82"/>
<source>The installer failed to create a partition table on %1.</source>
<translation>%1 </translation>
<translation>%1 </translation>
</message>
</context>
<context>
@ -929,12 +929,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="132"/>
<source>&lt;br&gt;&lt;br&gt;This is the recommended partition table type for modern systems which start from an &lt;strong&gt;EFI&lt;/strong&gt; boot environment.</source>
<translation>&lt;br&gt;&lt;br&gt; &lt;strong&gt;EFI&lt;/ strong&gt; </translation>
<translation>&lt;br&gt;&lt;br&gt; &lt;strong&gt;EFI&lt;/strong&gt; </translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="138"/>
<source>&lt;br&gt;&lt;br&gt;This partition table type is only advisable on older systems which start from a &lt;strong&gt;BIOS&lt;/strong&gt; boot environment. GPT is recommended in most other cases.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Warning:&lt;/strong&gt; the MBR partition table is an obsolete MS-DOS era standard.&lt;br&gt;Only 4 &lt;em&gt;primary&lt;/em&gt; partitions may be created, and of those 4, one can be an &lt;em&gt;extended&lt;/em&gt; partition, which may in turn contain many &lt;em&gt;logical&lt;/em&gt; partitions.</source>
<translation>&lt;br&gt;&lt;br&gt;&lt;strong&gt;BIOS&lt;/strong&gt; GPT&lt;br&gt;&lt;br&gt;&lt;strong&gt;:&lt;/strong&gt; MBR MS-DOS&lt;br&gt; 4 &lt;em&gt;&lt;/em&gt;1&lt;em&gt;&lt;/em&gt;&lt;em&gt;&lt;/em&gt;</translation>
<translation>&lt;br&gt;&lt;br&gt;&lt;strong&gt;BIOS&lt;/strong&gt; GPT&lt;br&gt;&lt;br&gt;&lt;strong&gt;:&lt;/strong&gt; MBR MS-DOS&lt;br&gt;&lt;em&gt;&lt;/em&gt;41&lt;em&gt;&lt;/em&gt;&lt;em&gt;&lt;/em&gt;</translation>
</message>
</context>
<context>
@ -1273,7 +1273,7 @@ The installer will quit and all changes will be lost.</source>
<location filename="../src/modules/oemid/IDJob.cpp" line="59"/>
<location filename="../src/modules/oemid/IDJob.cpp" line="67"/>
<source>OEM Batch Identifier</source>
<translation type="unfinished"/>
<translation>OEMのバッチID</translation>
</message>
<message>
<location filename="../src/modules/oemid/IDJob.cpp" line="48"/>
@ -1348,7 +1348,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="41"/>
<source>The system locale setting affects the language and character set for some command line user interface elements.&lt;br/&gt;The current setting is &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation>&lt;br/&gt; &lt;strong&gt;%1&lt;/strong&gt;.</translation>
<translation>&lt;br/&gt; &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/locale/LCLocaleDialog.cpp" line="66"/>
@ -1550,17 +1550,17 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/oemid/OEMPage.ui" line="28"/>
<source>Ba&amp;tch:</source>
<translation type="unfinished"/>
<translation> (&amp;)</translation>
</message>
<message>
<location filename="../src/modules/oemid/OEMPage.ui" line="38"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enter a batch-identifier here. This will be stored in the target system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;IDを入力してください&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/modules/oemid/OEMPage.ui" line="48"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;h1&gt;OEM Configuration&lt;/h1&gt;&lt;p&gt;Calamares will use OEM settings while configuring the target system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;h1&gt;OEMの設定&lt;/h1&gt;&lt;p&gt;CalamaresOEM使&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>
@ -1568,12 +1568,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/oemid/OEMViewStep.cpp" line="121"/>
<source>OEM Configuration</source>
<translation>OEM設定</translation>
<translation>OEM設定</translation>
</message>
<message>
<location filename="../src/modules/oemid/OEMViewStep.cpp" line="126"/>
<source>Set the OEM Batch Identifier to &lt;code&gt;%1&lt;/code&gt;.</source>
<translation type="unfinished"/>
<translation>OEMのバッチIDを &lt;code&gt;%1&lt;/code&gt; </translation>
</message>
</context>
<context>
@ -1862,7 +1862,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="440"/>
<source>&lt;small&gt;Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.&lt;/small&gt;</source>
<translation>8</translation>
<translation>&lt;small&gt;28&lt;/small&gt;</translation>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="226"/>
@ -2039,7 +2039,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="209"/>
<source>Are you sure you want to create a new partition table on %1?</source>
<translation>%1 </translation>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="238"/>
@ -2102,7 +2102,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="212"/>
<source>&lt;strong&gt;Manual&lt;/strong&gt; partitioning on disk &lt;strong&gt;%1&lt;/strong&gt; (%2).</source>
<translation> &lt;strong&gt;%1&lt;/strong&gt; (%2) &lt;strong&gt;&lt;/strong&gt;</translation>
<translation> &lt;strong&gt;%1&lt;/strong&gt; (%2) &lt;strong&gt;&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="220"/>
@ -2152,12 +2152,12 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="650"/>
<source>has at least one disk device available.</source>
<translation type="unfinished"/>
<translation>1使</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="651"/>
<source>There are no partitons to install on.</source>
<translation type="unfinished"/>
<translation></translation>
</message>
</context>
<context>
@ -2184,7 +2184,7 @@ The installer will quit and all changes will be lost.</source>
<message>
<location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="70"/>
<source>Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is set up. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel.</source>
<translation type="unfinished"/>
<translation>KDE Plasma </translation>
</message>
<message>
<location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="76"/>
@ -2328,12 +2328,12 @@ Output:
<message>
<location filename="../src/modules/partition/gui/PartitionDialogHelpers.cpp" line="47"/>
<source>(no mount point)</source>
<translation type="unfinished"/>
<translation>()</translation>
</message>
<message>
<location filename="../src/libcalamaresui/modulesystem/RequirementsChecker.cpp" line="62"/>
<source>Requirements checking for module &lt;i&gt;%1&lt;/i&gt; is complete.</source>
<translation type="unfinished"/>
<translation> &lt;i&gt;%1&lt;/i&gt; </translation>
</message>
<message>
<location filename="../src/libcalamares/locale/Label.cpp" line="46"/>
@ -2517,12 +2517,12 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="55"/>
<source>Resize &lt;strong&gt;%2MiB&lt;/strong&gt; partition &lt;strong&gt;%1&lt;/strong&gt; to &lt;strong&gt;%3MiB&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation> &lt;strong&gt;%2MiB&lt;/strong&gt; &lt;strong&gt;%1&lt;/strong&gt; &lt;strong&gt;%3MiB&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="66"/>
<source>Resizing %2MiB partition %1 to %3MiB.</source>
<translation type="unfinished"/>
<translation> %2MiB %1 %3MiB </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="85"/>
@ -2562,7 +2562,7 @@ Output:
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="96"/>
<source>This computer does not satisfy the minimum requirements for setting up %1.&lt;br/&gt;Setup cannot continue. &lt;a href=&quot;#details&quot;&gt;Details...&lt;/a&gt;</source>
<translation type="unfinished"/>
<translation> %1 &lt;br/&gt; &lt;a href=&quot;#details&quot;&gt;...&lt;/a&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="100"/>
@ -2572,7 +2572,7 @@ Output:
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="118"/>
<source>This computer does not satisfy some of the recommended requirements for setting up %1.&lt;br/&gt;Setup can continue, but some features might be disabled.</source>
<translation type="unfinished"/>
<translation> %1 &lt;br/&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="122"/>
@ -2582,7 +2582,7 @@ Output:
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="160"/>
<source>This program will ask you some questions and set up %2 on your computer.</source>
<translation> %2 </translation>
<translation> %2 </translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/ResultsListWidget.cpp" line="181"/>
@ -2678,12 +2678,12 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="52"/>
<source>Set flags on %1MiB %2 partition.</source>
<translation type="unfinished"/>
<translation>%1MiB %2 </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="56"/>
<source>Set flags on new partition.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="67"/>
@ -2693,22 +2693,22 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="71"/>
<source>Clear flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
<translation type="unfinished"/>
<translation>%1MiB &lt;strong&gt;%2&lt;/strong&gt; </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="85"/>
<source>Flag %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition as &lt;strong&gt;%3&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>%1MiB &lt;strong&gt;%2&lt;/strong&gt;  &lt;strong&gt;%3&lt;/strong&gt; </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="107"/>
<source>Clearing flags on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
<translation type="unfinished"/>
<translation>%1MiB &lt;strong&gt;%2&lt;/strong&gt; </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="121"/>
<source>Setting flags &lt;strong&gt;%3&lt;/strong&gt; on %1MiB &lt;strong&gt;%2&lt;/strong&gt; partition.</source>
<translation type="unfinished"/>
<translation>%1MiB &lt;strong&gt;%2&lt;/strong&gt; &lt;strong&gt;%3&lt;/strong&gt; </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="75"/>
@ -2738,12 +2738,12 @@ Output:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="115"/>
<source>Setting flags &lt;strong&gt;%2&lt;/strong&gt; on partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation> &lt;strong&gt;%1&lt;/strong&gt; &lt;strong&gt;%2&lt;/strong&gt;</translation>
<translation> &lt;strong&gt;%1&lt;/strong&gt; &lt;strong&gt;%2&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="127"/>
<source>Setting flags &lt;strong&gt;%1&lt;/strong&gt; on new partition.</source>
<translation>&lt;strong&gt;%1&lt;/strong&gt; </translation>
<translation>&lt;strong&gt;%1&lt;/strong&gt; </translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="144"/>
@ -2854,7 +2854,7 @@ Output:
<message>
<location filename="../src/modules/summary/SummaryPage.cpp" line="57"/>
<source>This is an overview of what will happen once you start the setup procedure.</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/modules/summary/SummaryPage.cpp" line="60"/>
@ -2978,12 +2978,12 @@ Output:
<message>
<location filename="../src/modules/users/UsersPage.cpp" line="120"/>
<source>&lt;small&gt;If more than one person will use this computer, you can create multiple accounts after setup.&lt;/small&gt;</source>
<translation type="unfinished"/>
<translation>&lt;small&gt;使&lt;/small&gt;</translation>
</message>
<message>
<location filename="../src/modules/users/UsersPage.cpp" line="126"/>
<source>&lt;small&gt;If more than one person will use this computer, you can create multiple accounts after installation.&lt;/small&gt;</source>
<translation type="unfinished"/>
<translation>&lt;small&gt;使&lt;/small&gt;</translation>
</message>
<message>
<location filename="../src/modules/users/UsersPage.cpp" line="317"/>
@ -3124,7 +3124,7 @@ Output:
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="71"/>
<source>&lt;h1&gt;Welcome to the Calamares setup program for %1.&lt;/h1&gt;</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;%1 Calamares &lt;/h1&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="72"/>
@ -3134,7 +3134,7 @@ Output:
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="90"/>
<source>About %1 setup</source>
<translation type="unfinished"/>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="91"/>
@ -3144,7 +3144,7 @@ Output:
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="94"/>
<source>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Copyright 2017-2019 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Thanks to &lt;a href=&quot;https://calamares.io/team/&quot;&gt;the Calamares team&lt;/a&gt; and the &lt;a href=&quot;https://www.transifex.com/calamares/calamares/&quot;&gt;Calamares translators team&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://calamares.io/&quot;&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href=&quot;http://www.blue-systems.com/&quot;&gt;Blue Systems&lt;/a&gt; - Liberating Software.</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;%1&lt;/h1&gt;&lt;br/&gt;&lt;strong&gt;%2&lt;br/&gt;for %3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Copyright 2014-2017 Teo Mrnjavac &amp;lt;teo@kde.org&amp;gt;&lt;br/&gt;Copyright 2017-2019 Adriaan de Groot &amp;lt;groot@kde.org&amp;gt;&lt;br/&gt;Thanks to &lt;a href=&quot;https://calamares.io/team/&quot;&gt;the Calamares team&lt;/a&gt; and the &lt;a href=&quot;https://www.transifex.com/calamares/calamares/&quot;&gt;Calamares translators team&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;https://calamares.io/&quot;&gt;Calamares&lt;/a&gt; development is sponsored by &lt;br/&gt;&lt;a href=&quot;http://www.blue-systems.com/&quot;&gt;Blue Systems&lt;/a&gt; - Liberating Software.</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="201"/>

Binary file not shown.

View File

@ -5,8 +5,8 @@
#
# Translators:
# UTUMI Hirosi <utuhiro78@yahoo.co.jp>, 2019
# Takefumi Nagata, 2019
# ブラシックデービッド, 2019
# Takefumi Nagata, 2019
#
#, fuzzy
msgid ""
@ -15,7 +15,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-06-18 15:54+0200\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: ブラシックデービッド, 2019\n"
"Last-Translator: Takefumi Nagata, 2019\n"
"Language-Team: Japanese (https://www.transifex.com/calamares/teams/20061/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -29,7 +29,7 @@ msgstr "GRUBを設定にします。"
#: src/modules/mount/main.py:38
msgid "Mounting partitions."
msgstr ""
msgstr "パーティションのマウント。"
#: src/modules/mount/main.py:150 src/modules/initcpiocfg/main.py:187
#: src/modules/initcpiocfg/main.py:191
@ -207,7 +207,7 @@ msgstr "mkinitcpioを設定中"
#: src/modules/openrcdmcryptcfg/main.py:83 src/modules/fstab/main.py:317
#: src/modules/localecfg/main.py:145 src/modules/networkcfg/main.py:49
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr ""
msgstr " <pre>{!s}</pre> を使用するのにルートマウントポイントが与えられていません。"
#: src/modules/initcpio/main.py:33
msgid "Creating initramfs with mkinitcpio."
@ -222,6 +222,7 @@ msgid ""
"Process <pre>mkinitcpio</pre> failed with error code {!s}. The command was "
"<pre>{!s}</pre>."
msgstr ""
"<pre>mkinitcpio</pre> プロセスがエラーコード {!s} により失敗しました。 コマンドは <pre>{!s}</pre>でした。"
#: src/modules/luksopenswaphookcfg/main.py:35
msgid "Configuring encrypted swap."
@ -309,7 +310,7 @@ msgstr "ブートローダーをインストール"
#: src/modules/removeuser/main.py:34
msgid "Remove live user from target system"
msgstr ""
msgstr "ターゲットシステムからliveユーザーを消去"
#: src/modules/initramfs/main.py:35
msgid "Creating initramfs."
@ -317,7 +318,7 @@ msgstr "initramfsを作成中"
#: src/modules/initramfs/main.py:49
msgid "Failed to run update-initramfs on the target"
msgstr ""
msgstr "ターゲット上の initramfs のアップデートに失敗"
#: src/modules/initramfs/main.py:50 src/modules/dracut/main.py:59
msgid "The exit code was {}"
@ -325,7 +326,7 @@ msgstr "停止コードは {} でした"
#: src/modules/hwclock/main.py:35
msgid "Setting hardware clock."
msgstr ""
msgstr "ハードウェアクロックの設定"
#: src/modules/dracut/main.py:36
msgid "Creating initramfs with dracut."
@ -333,7 +334,7 @@ msgstr "dracutとinitramfsを作成中"
#: src/modules/dracut/main.py:58
msgid "Failed to run dracut on the target"
msgstr ""
msgstr "ターゲット上で dracut の実行に失敗"
#: src/modules/initramfscfg/main.py:41
msgid "Configuring initramfs."
@ -353,7 +354,7 @@ msgstr "暗号化したrootfsセットアップエラー"
#: src/modules/luksbootkeyfile/main.py:75
msgid "Rootfs partition {!s} is LUKS but no passphrase found."
msgstr ""
msgstr "Rootfs のパーティションは {!s} LUKS ですが、パスフレーズが見つかりません。"
#: src/modules/fstab/main.py:38
msgid "Writing fstab."

View File

@ -29,6 +29,6 @@ enum class ModuleAction : char
Exec
};
} // namespace
} // namespace Calamares
#endif

View File

@ -19,9 +19,9 @@
#include "CppJobModule.h"
#include "utils/PluginFactory.h"
#include "utils/Logger.h"
#include "CppJob.h"
#include "utils/Logger.h"
#include "utils/PluginFactory.h"
#include <QDir>
#include <QPluginLoader>
@ -62,10 +62,10 @@ CppJobModule::loadSelf()
cDebug() << Q_FUNC_INFO << m_loader->errorString();
return;
}
// cDebug() << "CppJobModule loading self for instance" << instanceKey()
// << "\nCppJobModule at address" << this
// << "\nCalamares::PluginFactory at address" << pf
// << "\nCppJob at address" << cppJob;
// cDebug() << "CppJobModule loading self for instance" << instanceKey()
// << "\nCppJobModule at address" << this
// << "\nCalamares::PluginFactory at address" << pf
// << "\nCppJob at address" << cppJob;
cppJob->setModuleInstanceKey( instanceKey() );
cppJob->setConfigurationMap( m_configurationMap );
@ -97,7 +97,7 @@ CppJobModule::initFrom( const QVariantMap& moduleDescriptor )
// If a load path is not specified, we look for a plugin to load in the directory.
if ( load.isEmpty() || !QLibrary::isLibrary( load ) )
{
const QStringList ls = directory.entryList( QStringList{ "*.so" } );
const QStringList ls = directory.entryList( QStringList { "*.so" } );
if ( !ls.isEmpty() )
{
for ( QString entry : ls )
@ -126,4 +126,4 @@ CppJobModule::~CppJobModule()
delete m_loader;
}
} // namespace Calamares
} // namespace Calamares

View File

@ -21,8 +21,8 @@
#ifndef CALAMARES_CPPJOBMODULE_H
#define CALAMARES_CPPJOBMODULE_H
#include "UiDllMacro.h"
#include "Module.h"
#include "UiDllMacro.h"
class QPluginLoader;
@ -42,7 +42,7 @@ protected:
void initFrom( const QVariantMap& moduleDescriptor ) override;
private:
friend class Module; //so only the superclass can instantiate
friend class Module; //so only the superclass can instantiate
explicit CppJobModule();
virtual ~CppJobModule() override;
@ -50,6 +50,6 @@ private:
job_ptr m_job;
};
} // namespace Calamares
} // namespace Calamares
#endif // CALAMARES_CPPJOBMODULE_H
#endif // CALAMARES_CPPJOBMODULE_H

View File

@ -48,8 +48,7 @@ static const char EMERGENCY[] = "emergency";
namespace Calamares
{
Module::~Module()
{}
Module::~Module() {}
Module*
Module::fromDescriptor( const QVariantMap& moduleDescriptor,
@ -57,7 +56,7 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
const QString& configFileName,
const QString& moduleDirectory )
{
std::unique_ptr<Module> m;
std::unique_ptr< Module > m;
QString typeString = moduleDescriptor.value( "type" ).toString();
QString intfString = moduleDescriptor.value( "interface" ).toString();
@ -70,7 +69,9 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
if ( ( typeString == "view" ) || ( typeString == "viewmodule" ) )
{
if ( intfString == "qtplugin" )
{
m.reset( new ViewModule() );
}
else if ( intfString == "pythonqt" )
{
#ifdef WITH_PYTHONQT
@ -80,14 +81,20 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
#endif
}
else
{
cError() << "Bad interface" << intfString << "for module type" << typeString;
}
}
else if ( typeString == "job" )
{
if ( intfString == "qtplugin" )
{
m.reset( new CppJobModule() );
}
else if ( intfString == "process" )
{
m.reset( new ProcessJobModule() );
}
else if ( intfString == "python" )
{
#ifdef WITH_PYTHON
@ -97,22 +104,27 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
#endif
}
else
{
cError() << "Bad interface" << intfString << "for module type" << typeString;
}
}
else
{
cError() << "Bad module type" << typeString;
}
if ( !m )
{
cError() << "Bad module type (" << typeString
<< ") or interface string (" << intfString
<< ") for module " << instanceId;
cError() << "Bad module type (" << typeString << ") or interface string (" << intfString << ") for module "
<< instanceId;
return nullptr;
}
QDir moduleDir( moduleDirectory );
if ( moduleDir.exists() && moduleDir.isReadable() )
{
m->m_directory = moduleDir.absolutePath();
}
else
{
cError() << "Bad module directory" << moduleDirectory << "for" << instanceId;
@ -141,22 +153,32 @@ moduleConfigurationCandidates( bool assumeBuildDir, const QString& moduleName, c
QStringList paths;
if ( CalamaresUtils::isAppDataDirOverridden() )
{
paths << CalamaresUtils::appDataDir().absoluteFilePath( QString( "modules/%1" ).arg( configFileName ) );
}
else
{
// If an absolute path is given, in debug mode, look for it
// first. The case contains('/'), below, will add the absolute
// path a second time, though.
if ( assumeBuildDir && configFileName.startsWith( '/' ) )
{
paths << configFileName;
}
if ( assumeBuildDir )
paths << QDir().absoluteFilePath(QString( "src/modules/%1/%2" ).arg( moduleName ).arg( configFileName ) );
{
paths << QDir().absoluteFilePath( QString( "src/modules/%1/%2" ).arg( moduleName ).arg( configFileName ) );
}
if ( assumeBuildDir && configFileName.contains( '/' ) )
{
paths << QDir().absoluteFilePath( configFileName );
}
if ( CalamaresUtils::haveExtraDirs() )
for ( auto s : CalamaresUtils::extraConfigDirs() )
{
paths << ( s + QString( "modules/%1" ).arg( configFileName ) );
}
paths << QString( "/etc/calamares/modules/%1" ).arg( configFileName );
paths << CalamaresUtils::appDataDir().absoluteFilePath( QString( "modules/%1" ).arg( configFileName ) );
@ -165,10 +187,10 @@ moduleConfigurationCandidates( bool assumeBuildDir, const QString& moduleName, c
return paths;
}
void
Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception
void Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception
{
QStringList configCandidates = moduleConfigurationCandidates( Settings::instance()->debugMode(), m_name, configFileName );
QStringList configCandidates
= moduleConfigurationCandidates( Settings::instance()->debugMode(), m_name, configFileName );
for ( const QString& path : configCandidates )
{
QFile configFile( path );
@ -192,9 +214,8 @@ Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Ex
cDebug() << "Loaded module configuration" << path;
m_configurationMap = CalamaresUtils::yamlMapToVariant( doc ).toMap();
m_emergency = m_maybe_emergency
&& m_configurationMap.contains( EMERGENCY )
&& m_configurationMap[ EMERGENCY ].toBool();
m_emergency = m_maybe_emergency && m_configurationMap.contains( EMERGENCY )
&& m_configurationMap[ EMERGENCY ].toBool();
return;
}
}
@ -235,7 +256,7 @@ Module::typeString() const
{
switch ( type() )
{
case Type::Job:
case Type::Job:
return "Job Module";
case Type::View:
return "View Module";
@ -249,7 +270,7 @@ Module::interfaceString() const
{
switch ( interface() )
{
case Interface::Process:
case Interface::Process:
return "External process";
case Interface::Python:
return "Python (Boost.Python)";
@ -271,7 +292,8 @@ Module::configurationMap()
Module::Module()
: m_loaded( false )
{}
{
}
void
@ -279,7 +301,9 @@ Module::initFrom( const QVariantMap& moduleDescriptor )
{
m_name = moduleDescriptor.value( "name" ).toString();
if ( moduleDescriptor.contains( EMERGENCY ) )
{
m_maybe_emergency = moduleDescriptor[ EMERGENCY ].toBool();
}
}
RequirementsList
@ -288,4 +312,4 @@ Module::checkRequirements()
return RequirementsList();
}
} //ns
} // namespace Calamares

View File

@ -66,8 +66,8 @@ public:
*/
enum class Interface
{
QtPlugin, // Jobs or Views
Python, // Jobs only
QtPlugin, // Jobs or Views
Python, // Jobs only
Process, // Deprecated interface
PythonQt // Views only, available as enum even if PythonQt isn't used
};
@ -141,10 +141,7 @@ public:
* @brief isLoaded reports on the loaded status of a module.
* @return true if the module's loading phase has finished, otherwise false.
*/
bool isLoaded() const
{
return m_loaded;
}
bool isLoaded() const { return m_loaded; }
/**
* @brief loadSelf initialized the module.
@ -161,10 +158,7 @@ public:
* are not run (in the common case where there is only
* one exec block, this doesn't really matter).
*/
bool isEmergency() const
{
return m_emergency;
}
bool isEmergency() const { return m_emergency; }
/**
* @brief jobs returns any jobs exposed by this module.
@ -194,16 +188,15 @@ protected:
bool m_maybe_emergency = false; // Based on the module.desc
private:
void loadConfigurationFile( const QString& configFileName ); //throws YAML::Exception
void loadConfigurationFile( const QString& configFileName ); //throws YAML::Exception
QString m_name;
QString m_directory;
QString m_instanceId;
friend void ::operator>>( const QVariantMap& moduleDescriptor,
Calamares::Module* m );
friend void ::operator>>( const QVariantMap& moduleDescriptor, Calamares::Module* m );
};
}
} // namespace Calamares
#endif // CALAMARES_MODULE_H
#endif // CALAMARES_MODULE_H

View File

@ -56,7 +56,9 @@ ModuleManager::~ModuleManager()
{
// The map is populated with Module::fromDescriptor(), which allocates on the heap.
for ( auto moduleptr : m_loadedModulesByInstanceKey )
{
delete moduleptr;
}
}
@ -89,15 +91,17 @@ ModuleManager::doInit()
bool success = currentDir.cd( subdir );
if ( success )
{
QFileInfo descriptorFileInfo( currentDir.absoluteFilePath( QLatin1Literal( "module.desc") ) );
QFileInfo descriptorFileInfo( currentDir.absoluteFilePath( QLatin1Literal( "module.desc" ) ) );
if ( !descriptorFileInfo.exists() )
{
cDebug() << "ModuleManager expected descriptor is missing:" << descriptorFileInfo.absoluteFilePath();
cDebug() << "ModuleManager expected descriptor is missing:"
<< descriptorFileInfo.absoluteFilePath();
continue;
}
if ( !descriptorFileInfo.isReadable() )
{
cDebug() << "ModuleManager descriptor file is unreadable:" << descriptorFileInfo.absoluteFilePath();
cDebug() << "ModuleManager descriptor file is unreadable:"
<< descriptorFileInfo.absoluteFilePath();
continue;
}
@ -105,8 +109,8 @@ ModuleManager::doInit()
QVariantMap moduleDescriptorMap = CalamaresUtils::loadYaml( descriptorFileInfo, &ok );
QString moduleName = ok ? moduleDescriptorMap.value( "name" ).toString() : QString();
if ( ok && ( moduleName == currentDir.dirName() ) &&
!m_availableDescriptorsByModuleName.contains( moduleName ) )
if ( ok && ( moduleName == currentDir.dirName() )
&& !m_availableDescriptorsByModuleName.contains( moduleName ) )
{
m_availableDescriptorsByModuleName.insert( moduleName, moduleDescriptorMap );
m_moduleDirectoriesByModuleName.insert( moduleName,
@ -155,16 +159,16 @@ ModuleManager::moduleInstance( const QString& instanceKey )
*
* @return -1 on failure, otherwise index of the instance that matches.
*/
static int findCustomInstance( const Settings::InstanceDescriptionList& customInstances,
const QString& module,
const QString& id )
static int
findCustomInstance( const Settings::InstanceDescriptionList& customInstances, const QString& module, const QString& id )
{
for ( int i = 0; i < customInstances.count(); ++i )
{
const auto& thisInstance = customInstances[ i ];
if ( thisInstance.value( "module" ) == module &&
thisInstance.value( "id" ) == id )
if ( thisInstance.value( "module" ) == module && thisInstance.value( "id" ) == id )
{
return i;
}
}
return -1;
}
@ -173,26 +177,23 @@ static int findCustomInstance( const Settings::InstanceDescriptionList& customIn
void
ModuleManager::loadModules()
{
QTimer::singleShot( 0, this, [ this ]()
{
QTimer::singleShot( 0, this, [this]() {
QStringList failedModules = checkDependencies();
Settings::InstanceDescriptionList customInstances =
Settings::instance()->customModuleInstances();
Settings::InstanceDescriptionList customInstances = Settings::instance()->customModuleInstances();
const auto modulesSequence = failedModules.isEmpty() ? Settings::instance()->modulesSequence() : Settings::ModuleSequence();
const auto modulesSequence
= failedModules.isEmpty() ? Settings::instance()->modulesSequence() : Settings::ModuleSequence();
for ( const auto& modulePhase : modulesSequence )
{
ModuleAction currentAction = modulePhase.first;
foreach ( const QString& moduleEntry,
modulePhase.second )
foreach ( const QString& moduleEntry, modulePhase.second )
{
QStringList moduleEntrySplit = moduleEntry.split( '@' );
QString moduleName;
QString instanceId;
QString configFileName;
if ( moduleEntrySplit.length() < 1 ||
moduleEntrySplit.length() > 2 )
if ( moduleEntrySplit.length() < 1 || moduleEntrySplit.length() > 2 )
{
cError() << "Wrong module entry format for module" << moduleEntry;
failedModules.append( moduleEntry );
@ -202,8 +203,8 @@ ModuleManager::loadModules()
instanceId = moduleEntrySplit.last();
configFileName = QString( "%1.conf" ).arg( moduleName );
if ( !m_availableDescriptorsByModuleName.contains( moduleName ) ||
m_availableDescriptorsByModuleName.value( moduleName ).isEmpty() )
if ( !m_availableDescriptorsByModuleName.contains( moduleName )
|| m_availableDescriptorsByModuleName.value( moduleName ).isEmpty() )
{
cError() << "Module" << moduleName << "not found in module search paths."
<< Logger::DebugList( m_paths );
@ -211,13 +212,15 @@ ModuleManager::loadModules()
continue;
}
if ( moduleName != instanceId ) //means this is a custom instance
if ( moduleName != instanceId ) //means this is a custom instance
{
int found = findCustomInstance( customInstances, moduleName, instanceId );
if ( found > -1 )
{
configFileName = customInstances[ found ].value( "config" );
else //ought to be a custom instance, but cannot find instance entry
}
else //ought to be a custom instance, but cannot find instance entry
{
cError() << "Custom instance" << moduleEntry << "not found in custom instances section.";
failedModules.append( moduleEntry );
@ -233,12 +236,9 @@ ModuleManager::loadModules()
// exists and is valid, but that's the only thing that could fail
// from this point on. -- Teo 8/2015
QString instanceKey = QString( "%1@%2" )
.arg( moduleName )
.arg( instanceId );
QString instanceKey = QString( "%1@%2" ).arg( moduleName ).arg( instanceId );
Module* thisModule =
m_loadedModulesByInstanceKey.value( instanceKey, nullptr );
Module* thisModule = m_loadedModulesByInstanceKey.value( instanceKey, nullptr );
if ( thisModule && !thisModule->isLoaded() )
{
cError() << "Module" << instanceKey << "exists but not loaded.";
@ -247,14 +247,15 @@ ModuleManager::loadModules()
}
if ( thisModule && thisModule->isLoaded() )
{
cDebug() << "Module" << instanceKey << "already loaded.";
}
else
{
thisModule =
Module::fromDescriptor( m_availableDescriptorsByModuleName.value( moduleName ),
instanceId,
configFileName,
m_moduleDirectoriesByModuleName.value( moduleName ) );
thisModule = Module::fromDescriptor( m_availableDescriptorsByModuleName.value( moduleName ),
instanceId,
configFileName,
m_moduleDirectoriesByModuleName.value( moduleName ) );
if ( !thisModule )
{
cError() << "Module" << instanceKey << "cannot be created from descriptor" << configFileName;
@ -284,10 +285,9 @@ ModuleManager::loadModules()
// thisModule. We now need to enqueue jobs info into an EVS.
if ( currentAction == ModuleAction::Exec )
{
ExecutionViewStep* evs =
qobject_cast< ExecutionViewStep* >(
Calamares::ViewManager::instance()->viewSteps().last() );
if ( !evs ) // If the last step is not an EVS, we must create it.
ExecutionViewStep* evs
= qobject_cast< ExecutionViewStep* >( Calamares::ViewManager::instance()->viewSteps().last() );
if ( !evs ) // If the last step is not an EVS, we must create it.
{
evs = new ExecutionViewStep( ViewManager::instance() );
ViewManager::instance()->addViewStep( evs );
@ -303,7 +303,9 @@ ModuleManager::loadModules()
emit modulesFailed( failedModules );
}
else
{
emit modulesLoaded();
}
} );
}
@ -314,12 +316,12 @@ ModuleManager::checkRequirements()
QVector< Module* > modules( m_loadedModulesByInstanceKey.count() );
int count = 0;
for (const auto& module : m_loadedModulesByInstanceKey )
for ( const auto& module : m_loadedModulesByInstanceKey )
{
modules[count++] = module;
modules[ count++ ] = module;
}
RequirementsChecker *rq = new RequirementsChecker( modules, this );
RequirementsChecker* rq = new RequirementsChecker( modules, this );
connect( rq, &RequirementsChecker::requirementsResult, this, &ModuleManager::requirementsResult );
connect( rq, &RequirementsChecker::requirementsComplete, this, &ModuleManager::requirementsComplete );
connect( rq, &RequirementsChecker::requirementsProgress, this, &ModuleManager::requirementsProgress );
@ -332,10 +334,12 @@ static QStringList
missingRequiredModules( const QStringList& required, const QMap< QString, QVariantMap >& available )
{
QStringList l;
for( const QString& depName : required )
for ( const QString& depName : required )
{
if ( !available.contains( depName ) )
{
l.append( depName );
}
}
return l;
@ -352,10 +356,11 @@ ModuleManager::checkDependencies()
do
{
somethingWasRemovedBecauseOfUnmetDependencies = false;
for ( auto it = m_availableDescriptorsByModuleName.begin();
it != m_availableDescriptorsByModuleName.end(); ++it )
for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end();
++it )
{
QStringList unmet = missingRequiredModules( it->value( "requiredModules" ).toStringList(), m_availableDescriptorsByModuleName );
QStringList unmet = missingRequiredModules( it->value( "requiredModules" ).toStringList(),
m_availableDescriptorsByModuleName );
if ( unmet.count() > 0 )
{
@ -368,8 +373,7 @@ ModuleManager::checkDependencies()
break;
}
}
}
while( somethingWasRemovedBecauseOfUnmetDependencies );
} while ( somethingWasRemovedBecauseOfUnmetDependencies );
return failed;
}
@ -378,12 +382,13 @@ bool
ModuleManager::checkDependencies( const Module& m )
{
bool allRequirementsFound = true;
QStringList requiredModules = m_availableDescriptorsByModuleName[ m.name() ].value( "requiredModules" ).toStringList();
QStringList requiredModules
= m_availableDescriptorsByModuleName[ m.name() ].value( "requiredModules" ).toStringList();
for ( const QString& required : requiredModules )
{
bool requirementFound = false;
for( const Module* v : m_loadedModulesByInstanceKey )
for ( const Module* v : m_loadedModulesByInstanceKey )
if ( required == v->name() )
{
requirementFound = true;
@ -399,4 +404,4 @@ ModuleManager::checkDependencies( const Module& m )
return allRequirementsFound;
}
} // namespace
} // namespace Calamares

View File

@ -91,7 +91,7 @@ public:
signals:
void initDone();
void modulesLoaded(); /// All of the modules were loaded successfully
void modulesFailed( QStringList ); /// .. or not
void modulesFailed( QStringList ); /// .. or not
// Below, see RequirementsChecker documentation
void requirementsComplete( bool );
void requirementsResult( RequirementsList );
@ -129,6 +129,6 @@ private:
static ModuleManager* s_instance;
};
}
} // namespace Calamares
#endif // MODULELOADER_H
#endif // MODULELOADER_H

View File

@ -44,12 +44,11 @@ void
ProcessJobModule::loadSelf()
{
if ( m_loaded )
{
return;
}
m_job = job_ptr( new ProcessJob( m_command,
m_workingPath,
m_runInChroot,
m_secondsTimeout ) );
m_job = job_ptr( new ProcessJob( m_command, m_workingPath, m_runInChroot, m_secondsTimeout ) );
m_loaded = true;
}
@ -69,17 +68,21 @@ ProcessJobModule::initFrom( const QVariantMap& moduleDescriptor )
m_workingPath = directory.absolutePath();
if ( !moduleDescriptor.value( "command" ).toString().isEmpty() )
{
m_command = moduleDescriptor.value( "command" ).toString();
}
m_secondsTimeout = 30;
if ( moduleDescriptor.contains( "timeout" ) &&
!moduleDescriptor.value( "timeout" ).isNull() )
if ( moduleDescriptor.contains( "timeout" ) && !moduleDescriptor.value( "timeout" ).isNull() )
{
m_secondsTimeout = moduleDescriptor.value( "timeout" ).toInt();
}
m_runInChroot = false;
if ( moduleDescriptor.contains( "chroot" )&&
!moduleDescriptor.value( "chroot" ).isNull() )
if ( moduleDescriptor.contains( "chroot" ) && !moduleDescriptor.value( "chroot" ).isNull() )
{
m_runInChroot = moduleDescriptor.value( "chroot" ).toBool();
}
}
@ -87,11 +90,11 @@ ProcessJobModule::ProcessJobModule()
: Module()
, m_secondsTimeout( 30 )
, m_runInChroot( false )
{}
{
}
ProcessJobModule::~ProcessJobModule()
{}
ProcessJobModule::~ProcessJobModule() {}
} // namespace Calamares
} // namespace Calamares

View File

@ -51,6 +51,6 @@ private:
job_ptr m_job;
};
} // namespace Calamares
} // namespace Calamares
#endif // CALAMARES_PROCESSJOBMODULE_H
#endif // CALAMARES_PROCESSJOBMODULE_H

View File

@ -45,7 +45,9 @@ void
PythonJobModule::loadSelf()
{
if ( m_loaded )
{
return;
}
m_job = Calamares::job_ptr( new PythonJob( m_scriptFileName, m_workingPath, m_configurationMap ) );
m_loaded = true;
@ -67,17 +69,19 @@ PythonJobModule::initFrom( const QVariantMap& moduleDescriptor )
m_workingPath = directory.absolutePath();
if ( !moduleDescriptor.value( "script" ).toString().isEmpty() )
{
m_scriptFileName = moduleDescriptor.value( "script" ).toString();
}
}
PythonJobModule::PythonJobModule()
: Module()
{}
{
}
PythonJobModule::~PythonJobModule()
{}
PythonJobModule::~PythonJobModule() {}
} // namespace Calamares
} // namespace Calamares

View File

@ -48,6 +48,6 @@ private:
job_ptr m_job;
};
} // namespace Calamares
} // namespace Calamares
#endif // CALAMARES_PYTHONJOBMODULE_H
#endif // CALAMARES_PYTHONJOBMODULE_H

View File

@ -20,15 +20,15 @@
#include "PythonQtViewModule.h"
#include "utils/Logger.h"
#include "viewpages/ViewStep.h"
#include "viewpages/PythonQtViewStep.h"
#include "ViewManager.h"
#include "CalamaresConfig.h"
#include "viewpages/PythonQtGlobalStorageWrapper.h"
#include "viewpages/PythonQtUtilsWrapper.h"
#include "GlobalStorage.h"
#include "JobQueue.h"
#include "ViewManager.h"
#include "utils/Logger.h"
#include "viewpages/PythonQtGlobalStorageWrapper.h"
#include "viewpages/PythonQtUtilsWrapper.h"
#include "viewpages/PythonQtViewStep.h"
#include "viewpages/ViewStep.h"
#include <PythonQt.h>
#include <PythonQt_QtAll.h>
@ -65,11 +65,12 @@ PythonQtViewModule::loadSelf()
if ( PythonQt::self() == nullptr )
{
if ( Py_IsInitialized() )
PythonQt::init( PythonQt::IgnoreSiteModule |
PythonQt::RedirectStdOut |
PythonQt::PythonAlreadyInitialized );
PythonQt::init( PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut
| PythonQt::PythonAlreadyInitialized );
else
{
PythonQt::init();
}
PythonQt_QtAll::init();
cDebug() << "Initializing PythonQt bindings."
@ -81,8 +82,7 @@ PythonQtViewModule::loadSelf()
// We only do the following to force PythonQt to create a submodule
// "calamares" for us to put our static objects in
PythonQt::self()->registerClass( &::GlobalStorage::staticMetaObject,
"calamares" );
PythonQt::self()->registerClass( &::GlobalStorage::staticMetaObject, "calamares" );
// Get a PythonQtObjectPtr to the PythonQt.calamares submodule
PythonQtObjectPtr pqtm = PythonQt::priv()->pythonQtModule();
@ -90,39 +90,34 @@ PythonQtViewModule::loadSelf()
// Prepare GlobalStorage object, in module PythonQt.calamares
if ( !s_gs )
{
s_gs = new ::GlobalStorage( Calamares::JobQueue::instance()->globalStorage() );
}
cala.addObject( "global_storage", s_gs );
// Prepare Utils object, in module PythonQt.calamares
if ( !s_utils )
{
s_utils = new ::Utils( Calamares::JobQueue::instance()->globalStorage() );
}
cala.addObject( "utils", s_utils );
// Append configuration object, in module PythonQt.calamares
cala.addVariable( "configuration", m_configurationMap );
// Basic stdout/stderr handling
QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut,
[]( const QString& message )
{
cDebug() << "PythonQt OUT>" << message;
}
);
QObject::connect( PythonQt::self(), &PythonQt::pythonStdErr,
[]( const QString& message )
{
cDebug() << "PythonQt ERR>" << message;
}
);
QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut, []( const QString& message ) {
cDebug() << "PythonQt OUT>" << message;
} );
QObject::connect( PythonQt::self(), &PythonQt::pythonStdErr, []( const QString& message ) {
cDebug() << "PythonQt ERR>" << message;
} );
}
QDir workingDir( m_workingPath );
if ( !workingDir.exists() )
{
cDebug() << "Invalid working directory"
<< m_workingPath
<< "for module"
<< name();
cDebug() << "Invalid working directory" << m_workingPath << "for module" << name();
return;
}
@ -130,23 +125,15 @@ PythonQtViewModule::loadSelf()
QFileInfo scriptFileInfo( fullPath );
if ( !scriptFileInfo.isReadable() )
{
cDebug() << "Invalid main script file path"
<< fullPath
<< "for module"
<< name();
cDebug() << "Invalid main script file path" << fullPath << "for module" << name();
return;
}
// Construct empty Python module with the given name
PythonQtObjectPtr cxt =
PythonQt::self()->
createModuleFromScript( name() );
PythonQtObjectPtr cxt = PythonQt::self()->createModuleFromScript( name() );
if ( cxt.isNull() )
{
cDebug() << "Cannot load PythonQt context from file"
<< fullPath
<< "for module"
<< name();
cDebug() << "Cannot load PythonQt context from file" << fullPath << "for module" << name();
return;
}
@ -165,9 +152,8 @@ PythonQtViewModule::loadSelf()
m_viewStep = new PythonQtViewStep( cxt );
cDebug() << "PythonQtViewModule loading self for instance" << instanceKey()
<< "\nPythonQtViewModule at address" << this
<< "\nViewStep at address" << m_viewStep;
cDebug() << "PythonQtViewModule loading self for instance" << instanceKey() << "\nPythonQtViewModule at address"
<< this << "\nViewStep at address" << m_viewStep;
m_viewStep->setModuleInstanceKey( instanceKey() );
m_viewStep->setConfigurationMap( m_configurationMap );
@ -193,7 +179,9 @@ PythonQtViewModule::initFrom( const QVariantMap& moduleDescriptor )
m_workingPath = directory.absolutePath();
if ( !moduleDescriptor.value( "script" ).toString().isEmpty() )
{
m_scriptFileName = moduleDescriptor.value( "script" ).toString();
}
}
PythonQtViewModule::PythonQtViewModule()
@ -201,8 +189,6 @@ PythonQtViewModule::PythonQtViewModule()
{
}
PythonQtViewModule::~PythonQtViewModule()
{
}
PythonQtViewModule::~PythonQtViewModule() {}
} // namespace Calamares
} // namespace Calamares

View File

@ -19,8 +19,8 @@
#ifndef CALAMARES_PYTHONQTVIEWMODULE_H
#define CALAMARES_PYTHONQTVIEWMODULE_H
#include "UiDllMacro.h"
#include "Module.h"
#include "UiDllMacro.h"
namespace Calamares
{
@ -40,7 +40,7 @@ protected:
void initFrom( const QVariantMap& moduleDescriptor ) override;
private:
friend class Module; //so only the superclass can instantiate
friend class Module; //so only the superclass can instantiate
explicit PythonQtViewModule();
virtual ~PythonQtViewModule();
@ -50,6 +50,6 @@ private:
QString m_workingPath;
};
} // namespace Calamares
} // namespace Calamares
#endif // CALAMARES_PYTHONQTVIEWMODULE_H
#endif // CALAMARES_PYTHONQTVIEWMODULE_H

View File

@ -16,4 +16,3 @@
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#include "Requirement.h"

View File

@ -62,6 +62,6 @@ using RequirementsList = QList< RequirementEntry >;
} // namespace Calamares
Q_DECLARE_METATYPE(Calamares::RequirementEntry)
Q_DECLARE_METATYPE( Calamares::RequirementEntry )
#endif

View File

@ -25,10 +25,10 @@
#include <algorithm>
#include <QtConcurrent/QtConcurrent>
#include <QFuture>
#include <QFutureWatcher>
#include <QTimer>
#include <QtConcurrent/QtConcurrent>
namespace Calamares
@ -54,12 +54,15 @@ registerMetatypes()
}
static void
check( Module * const &m, RequirementsChecker *c )
check( Module* const& m, RequirementsChecker* c )
{
RequirementsList l = m->checkRequirements();
if ( l.count() > 0 )
{
c->addCheckedRequirements( l );
c->requirementsProgress( QObject::tr( "Requirements checking for module <i>%1</i> is complete." ).arg( m->name() ) );
}
c->requirementsProgress(
QObject::tr( "Requirements checking for module <i>%1</i> is complete." ).arg( m->name() ) );
}
RequirementsChecker::RequirementsChecker( QVector< Module* > modules, QObject* parent )
@ -74,9 +77,7 @@ RequirementsChecker::RequirementsChecker( QVector< Module* > modules, QObject* p
registerMetatypes();
}
RequirementsChecker::~RequirementsChecker()
{
}
RequirementsChecker::~RequirementsChecker() {}
void
RequirementsChecker::run()
@ -85,10 +86,11 @@ RequirementsChecker::run()
connect( m_progressTimer, &QTimer::timeout, this, &RequirementsChecker::reportProgress );
m_progressTimer->start( 1200 ); // msec
for (const auto& module : m_modules )
for ( const auto& module : m_modules )
{
Watcher *watcher = new Watcher( this );
Watcher* watcher = new Watcher( this );
watcher->setFuture( QtConcurrent::run( check, module, this ) );
watcher->setObjectName( module->name() );
m_watchers.append( watcher );
connect( watcher, &Watcher::finished, this, &RequirementsChecker::finished );
}
@ -102,7 +104,9 @@ RequirementsChecker::finished()
static QMutex finishedMutex;
QMutexLocker lock( &finishedMutex );
if ( m_progressTimer && std::all_of( m_watchers.cbegin(), m_watchers.cend(), []( const Watcher *w ) { return w && w->isFinished(); } ) )
if ( m_progressTimer && std::all_of( m_watchers.cbegin(), m_watchers.cend(), []( const Watcher* w ) {
return w && w->isFinished();
} ) )
{
cDebug() << "All requirements have been checked.";
if ( m_progressTimer )
@ -125,7 +129,7 @@ RequirementsChecker::finished()
}
emit requirementsComplete( acceptable );
QTimer::singleShot(0, this, &RequirementsChecker::done );
QTimer::singleShot( 0, this, &RequirementsChecker::done );
}
}
@ -146,16 +150,28 @@ RequirementsChecker::reportProgress()
{
m_progressTimeouts++;
auto remaining = std::count_if( m_watchers.cbegin(), m_watchers.cend(), []( const Watcher *w ) { return w && !w->isFinished(); } );
QStringList remainingNames;
auto remaining = std::count_if( m_watchers.cbegin(), m_watchers.cend(),
[&]( const Watcher* w ) {
if ( w && !w->isFinished() )
{
remainingNames << w->objectName();
return true;
}
return false;
} );
if ( remaining > 0 )
{
cDebug() << "Remaining modules:" << remaining << Logger::DebugList( remainingNames );
unsigned int posInterval = ( m_progressTimer->interval() < 0 ) ? 1000 : uint( m_progressTimer->interval() );
QString waiting = tr( "Waiting for %n module(s).", "", remaining );
QString elapsed = tr( "(%n second(s))", "", m_progressTimeouts * posInterval / 1000 );
emit requirementsProgress( waiting + QString( " " ) + elapsed );
}
else
{
emit requirementsProgress( tr( "System-requirements checking is complete." ) );
}
}
}
} // namespace Calamares

View File

@ -78,10 +78,10 @@ private:
RequirementsList m_collectedRequirements;
QTimer *m_progressTimer;
QTimer* m_progressTimer;
unsigned m_progressTimeouts;
} ;
};
}
} // namespace Calamares
#endif

View File

@ -19,10 +19,10 @@
#include "ViewModule.h"
#include "utils/PluginFactory.h"
#include "utils/Logger.h"
#include "viewpages/ViewStep.h"
#include "ViewManager.h"
#include "utils/Logger.h"
#include "utils/PluginFactory.h"
#include "viewpages/ViewStep.h"
#include <QDir>
#include <QPluginLoader>
@ -75,7 +75,9 @@ ViewModule::loadSelf()
cDebug() << "ViewModule" << instanceKey() << "loading complete.";
}
else
{
cWarning() << Q_FUNC_INFO << "No view step was created";
}
}
@ -100,7 +102,7 @@ ViewModule::initFrom( const QVariantMap& moduleDescriptor )
// If a load path is not specified, we look for a plugin to load in the directory.
if ( load.isEmpty() || !QLibrary::isLibrary( load ) )
{
const QStringList ls = directory.entryList( QStringList{ "*.so" } );
const QStringList ls = directory.entryList( QStringList { "*.so" } );
if ( !ls.isEmpty() )
{
for ( QString entry : ls )
@ -135,4 +137,4 @@ ViewModule::checkRequirements()
return m_viewStep->checkRequirements();
}
} // namespace Calamares
} // namespace Calamares

View File

@ -20,8 +20,8 @@
#ifndef CALAMARES_VIEWMODULE_H
#define CALAMARES_VIEWMODULE_H
#include "UiDllMacro.h"
#include "Module.h"
#include "UiDllMacro.h"
class QPluginLoader;
@ -45,7 +45,7 @@ protected:
void initFrom( const QVariantMap& moduleDescriptor ) override;
private:
friend class Module; //so only the superclass can instantiate
friend class Module; //so only the superclass can instantiate
explicit ViewModule();
virtual ~ViewModule() override;
@ -53,6 +53,6 @@ private:
ViewStep* m_viewStep = nullptr;
};
} // namespace Calamares
} // namespace Calamares
#endif // CALAMARES_VIEWMODULE_H
#endif // CALAMARES_VIEWMODULE_H

View File

@ -28,4 +28,4 @@
# The default is empty/unset, leading to the behavior from Calamares
# 3.2.9 and earlier which passed "all" as version.
# kernel: all
kernel: "all"