Merge branch 'master' of https://github.com/calamares/calamares into 3.2.x-stable

This commit is contained in:
Philip Müller 2019-06-08 09:47:29 +02:00
commit ce5ca3f529
17 changed files with 263 additions and 214 deletions

20
CHANGES
View File

@ -3,6 +3,26 @@ 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) #
This release contains contributions from (alphabetically by first name):
## Core ##
- With this release, option *WITH_PYTHONQT* changes default to **off**.
There does not seem to be any serious use of the PythonQt API and
the UI opportunities it offers, so begin the process of deprecating
and removing that. Sometime in the future, QML pages will fill the
gap for easily-prototyped-yet-slick UI elements.
- A crash when no *finished* page (or rather, no page at all) is
configured after the last *exec* section of the sequence has been
solved. The *finished* page can be left out (but then you don't get
the restart-now functionality).
## Modules ##
# 3.2.9 (2019-06-03) #
This release contains contributions from (alphabetically by first name):

View File

@ -37,10 +37,10 @@
cmake_minimum_required( VERSION 3.2 FATAL_ERROR )
project( CALAMARES
VERSION 3.2.9
VERSION 3.2.10
LANGUAGES C CXX )
set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development
set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during development
### OPTIONS
#
@ -48,7 +48,7 @@ option( INSTALL_CONFIG "Install configuration files" OFF )
option( INSTALL_POLKIT "Install Polkit configuration" ON )
option( BUILD_TESTING "Build the testing tree." ON )
option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON )
option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." ON )
option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." OFF )
option( WITH_KF5Crash "Enable crash reporting with KCrash." ON )

View File

@ -854,17 +854,17 @@ El instalador terminará y se perderán todos los cambios.</translation>
<location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="34"/>
<location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="48"/>
<source>Deactivate volume group named %1.</source>
<translation type="unfinished"/>
<translation>Desactivar el grupo de volúmenes llamado%1.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="41"/>
<source>Deactivate volume group named &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation type="unfinished"/>
<translation>Desactivar el grupo de volúmenes llamado&lt;strong&gt;% 1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="61"/>
<source>The installer failed to deactivate a volume group named %1.</source>
<translation type="unfinished"/>
<translation>El instalador no pudo desactivar un grupo de volúmenes llamado%1.</translation>
</message>
</context>
<context>
@ -1098,7 +1098,7 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/finished/FinishedPage.ui" line="95"/>
<source>&lt;Restart checkbox tooltip&gt;</source>
<translation type="unfinished"/>
<translation>&lt;Restart checkbox tooltip&gt;</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.ui" line="98"/>
@ -1108,12 +1108,12 @@ El instalador terminará y se perderán todos los cambios.</translation>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="54"/>
<source>&lt;h1&gt;All done.&lt;/h1&gt;&lt;br/&gt;%1 has been set up on your computer.&lt;br/&gt;You may now start using your new system.</source>
<translation type="unfinished"/>
<translation>&lt;h1&gt;Todo listo.&lt;/h1&gt;&lt;br/&gt;% 1 se ha configurado en su computadora. &lt;br/&gt;Ahora puede comenzar a usar su nuevo sistema.</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="58"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When this box is checked, your system will restart immediately when you click on &lt;span style=&quot;font-style:italic;&quot;&gt;Done&lt;/span&gt; or close the setup program.&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;Cuando esta casilla está marcada, su sistema se reiniciará inmediatamente cuando haga clic en &lt;span style=&quot;font-style:italic;&quot;&gt;Listo&lt;/span&gt; o cierre el programa de instalación.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="66"/>

View File

@ -63,7 +63,7 @@
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="24"/>
<source>GlobalStorage</source>
<translation type="unfinished"/>
<translation>Globaali-tallennus</translation>
</message>
<message>
<location filename="../src/libcalamaresui/utils/DebugWindow.ui" line="34"/>
@ -1392,63 +1392,63 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</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 type="unfinished"/>
<translation>&lt;strong&gt;%1 ajuri&lt;/strong&gt;&lt;br/&gt;- %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 type="unfinished"/>
<translation>&lt;strong&gt;%1 näytönohjaimet&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;- %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 type="unfinished"/>
<translation>&lt;strong&gt;%1 selaimen laajennus&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;- %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 type="unfinished"/>
<translation>&lt;strong&gt;%1 kodekki&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;- %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 type="unfinished"/>
<translation>&lt;strong&gt;%1 paketti&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;- %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="153"/>
<source>&lt;strong&gt;%1&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;by %2&lt;/font&gt;</source>
<translation type="unfinished"/>
<translation>&lt;strong&gt;%1&lt;/strong&gt;&lt;br/&gt;&lt;font color=&quot;Grey&quot;&gt;- %2&lt;/font&gt;</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="191"/>
<source>Shows the complete license text</source>
<translation type="unfinished"/>
<translation>Näyttää täydellisen lisenssin tekstin</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="192"/>
<source>Hide license text</source>
<translation type="unfinished"/>
<translation>Piilota lisenssin teksti</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="196"/>
<source>Show license agreement</source>
<translation type="unfinished"/>
<translation>Näytä lisenssisopimus</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="197"/>
<source>Hide license agreement</source>
<translation type="unfinished"/>
<translation>Piilota lisenssisopimus</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="201"/>
<source>Opens the license agreement in a browser window.</source>
<translation type="unfinished"/>
<translation>Avaa lisenssisopimus selaimessa.</translation>
</message>
<message>
<location filename="../src/modules/license/LicenseWidget.cpp" line="202"/>
<source>&lt;a href=&quot;%1&quot;&gt;View license agreement&lt;/a&gt;</source>
<translation type="unfinished"/>
<translation>&lt;a href=&quot;%1&quot;&gt;Näytä lisenssisopimus&lt;/a&gt;</translation>
</message>
</context>
<context>
@ -1456,12 +1456,12 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/locale/LocalePage.cpp" line="396"/>
<source>The system language will be set to %1.</source>
<translation type="unfinished"/>
<translation>Järjestelmän kielen asetuksena on %1.</translation>
</message>
<message>
<location filename="../src/modules/locale/LocalePage.cpp" line="397"/>
<source>The numbers and dates locale will be set to %1.</source>
<translation type="unfinished"/>
<translation>Numerot ja päivämäärät, paikallinen asetus on %1.</translation>
</message>
<message>
<location filename="../src/modules/locale/LocalePage.cpp" line="219"/>
@ -1513,12 +1513,12 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/netinstall/NetInstallPage.cpp" line="84"/>
<source>Network Installation. (Disabled: Unable to fetch package lists, check your network connection)</source>
<translation type="unfinished"/>
<translation>Verkkoasennus. (Ei käytössä: Pakettiluetteloita ei voi hakea, tarkista verkkoyhteys)</translation>
</message>
<message>
<location filename="../src/modules/netinstall/NetInstallPage.cpp" line="94"/>
<source>Network Installation. (Disabled: Received invalid groups data)</source>
<translation type="unfinished"/>
<translation>Verkkoasennus. (Ei käytössä: Vastaanotettiin virheellisiä ryhmän tietoja)</translation>
</message>
</context>
<context>
@ -1534,17 +1534,17 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/oemid/OEMPage.ui" line="28"/>
<source>Ba&amp;tch:</source>
<translation type="unfinished"/>
<translation>Ba&amp;tch:</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;Syötä erän tunniste tähän. Tämä tallennetaan kohdejärjestelmään.&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 asetukset&lt;/h1&gt;&lt;p&gt;Calamares käyttää OEM-asetuksia määritettäessä kohdejärjestelmää.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>
@ -1557,7 +1557,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/oemid/OEMViewStep.cpp" line="120"/>
<source>Set the OEM Batch Identifier to &lt;code&gt;%1&lt;/code&gt;.</source>
<translation type="unfinished"/>
<translation>Aseta OEM valmistajan erän tunnus &lt;code&gt;%1&lt;/code&gt;.</translation>
</message>
</context>
<context>
@ -1580,92 +1580,92 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="176"/>
<source>Memory allocation error when setting &apos;%1&apos;</source>
<translation type="unfinished"/>
<translation>Muistin varausvirhe asetettaessa &apos;%1&apos;</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="180"/>
<source>Memory allocation error</source>
<translation type="unfinished"/>
<translation>Muistin varausvirhe</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="182"/>
<source>The password is the same as the old one</source>
<translation type="unfinished"/>
<translation>Salasana on sama kuin vanha</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="184"/>
<source>The password is a palindrome</source>
<translation type="unfinished"/>
<translation>Salasana on palindromi</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="186"/>
<source>The password differs with case changes only</source>
<translation type="unfinished"/>
<translation>Salasana eroaa vain vähäisin muutoksin</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="188"/>
<source>The password is too similar to the old one</source>
<translation type="unfinished"/>
<translation>Salasana on liian samanlainen kuin vanha</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="190"/>
<source>The password contains the user name in some form</source>
<translation type="unfinished"/>
<translation>Salasana sisältää jonkin käyttäjänimen</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="192"/>
<source>The password contains words from the real name of the user in some form</source>
<translation type="unfinished"/>
<translation>Salasana sisältää sanoja käyttäjän todellisesta nimestä jossain muodossa</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="194"/>
<source>The password contains forbidden words in some form</source>
<translation type="unfinished"/>
<translation>Salasana sisältää kiellettyjä sanoja</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="197"/>
<source>The password contains less than %1 digits</source>
<translation type="unfinished"/>
<translation>Salasana sisältää vähemmän kuin %1 numeroa</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="198"/>
<source>The password contains too few digits</source>
<translation type="unfinished"/>
<translation>Salasana sisältää liian vähän numeroita</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="201"/>
<source>The password contains less than %1 uppercase letters</source>
<translation type="unfinished"/>
<translation>Salasana sisältää vähemmän kuin %1 isoja kirjaimia</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="202"/>
<source>The password contains too few uppercase letters</source>
<translation type="unfinished"/>
<translation>Salasana sisältää liian vähän isoja kirjaimia</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="205"/>
<source>The password contains less than %1 lowercase letters</source>
<translation type="unfinished"/>
<translation>Salasana sisältää vähemmän kuin %1 pieniä kirjaimia</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="206"/>
<source>The password contains too few lowercase letters</source>
<translation type="unfinished"/>
<translation>Salasana sisältää liian vähän pieniä kirjaimia</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="209"/>
<source>The password contains less than %1 non-alphanumeric characters</source>
<translation type="unfinished"/>
<translation>Salasanassa on vähemmän kuin %1 erikoismerkkiä</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="210"/>
<source>The password contains too few non-alphanumeric characters</source>
<translation type="unfinished"/>
<translation>Salasana sisältää liian vähän erikoismerkkejä</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="213"/>
<source>The password is shorter than %1 characters</source>
<translation type="unfinished"/>
<translation>Salasana on lyhyempi kuin %1 merkkiä</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="214"/>
@ -1675,47 +1675,47 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="216"/>
<source>The password is just rotated old one</source>
<translation type="unfinished"/>
<translation>Salasana on vain vanhan pyöritystä</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="219"/>
<source>The password contains less than %1 character classes</source>
<translation type="unfinished"/>
<translation>Salasana sisältää vähemmän kuin %1 merkkiluokkaa</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="220"/>
<source>The password does not contain enough character classes</source>
<translation type="unfinished"/>
<translation>Salasana ei sisällä tarpeeksi merkkiluokkia</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="223"/>
<source>The password contains more than %1 same characters consecutively</source>
<translation type="unfinished"/>
<translation>Salasana sisältää enemmän kuin %1 samaa merkkiä peräkkäin</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="224"/>
<source>The password contains too many same characters consecutively</source>
<translation type="unfinished"/>
<translation>Salasana sisältää liian monta samaa merkkiä peräkkäin</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="227"/>
<source>The password contains more than %1 characters of the same class consecutively</source>
<translation type="unfinished"/>
<translation>Salasana sisältää enemmän kuin %1 merkkiä samasta luokasta peräkkäin</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="228"/>
<source>The password contains too many characters of the same class consecutively</source>
<translation type="unfinished"/>
<translation>Salasana sisältää liian monta saman luokan merkkiä peräkkäin</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="231"/>
<source>The password contains monotonic sequence longer than %1 characters</source>
<translation type="unfinished"/>
<translation>Salasana sisältää monotonisen merkkijonon, joka on pidempi kuin %1 merkkiä</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="232"/>
<source>The password contains too long of a monotonic character sequence</source>
<translation type="unfinished"/>
<translation>Salasanassa on liian pitkä monotoninen merkkijono</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="234"/>
@ -1725,72 +1725,72 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="236"/>
<source>Cannot obtain random numbers from the RNG device</source>
<translation type="unfinished"/>
<translation>Satunnaislukuja ei voi saada RNG-laitteesta</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="238"/>
<source>Password generation failed - required entropy too low for settings</source>
<translation type="unfinished"/>
<translation>Salasanojen luonti epäonnistui - pakollinen vähimmäistaso liian alhainen asetuksia varten</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="243"/>
<source>The password fails the dictionary check - %1</source>
<translation type="unfinished"/>
<translation>Salasana epäonnistui sanaston tarkistuksessa -%1</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="245"/>
<source>The password fails the dictionary check</source>
<translation type="unfinished"/>
<translation>Salasana epäonnistui sanaston tarkistuksessa</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="249"/>
<source>Unknown setting - %1</source>
<translation type="unfinished"/>
<translation>Tuntematon asetus - %1</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="253"/>
<source>Unknown setting</source>
<translation type="unfinished"/>
<translation>Tuntematon asetus</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="257"/>
<source>Bad integer value of setting - %1</source>
<translation type="unfinished"/>
<translation>Asetuksen virheellinen kokonaisluku - %1</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="261"/>
<source>Bad integer value</source>
<translation type="unfinished"/>
<translation>Virheellinen kokonaisluku</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="265"/>
<source>Setting %1 is not of integer type</source>
<translation type="unfinished"/>
<translation>Asetus %1 ei ole kokonaisluku</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="269"/>
<source>Setting is not of integer type</source>
<translation type="unfinished"/>
<translation>Asetus ei ole kokonaisluku</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="273"/>
<source>Setting %1 is not of string type</source>
<translation type="unfinished"/>
<translation>Asetus %1 ei ole merkkijono</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="277"/>
<source>Setting is not of string type</source>
<translation type="unfinished"/>
<translation>Asetus ei ole merkkijono</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="279"/>
<source>Opening the configuration file failed</source>
<translation type="unfinished"/>
<translation>Määritystiedoston avaaminen epäonnistui</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="281"/>
<source>The configuration file is malformed</source>
<translation type="unfinished"/>
<translation>Määritystiedosto on väärin muotoiltu</translation>
</message>
<message>
<location filename="../src/modules/users/CheckPWQuality.cpp" line="283"/>
@ -1861,12 +1861,12 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="466"/>
<source>Log in automatically without asking for the password.</source>
<translation type="unfinished"/>
<translation>Kirjaudu automaattisesti ilman salasanaa.</translation>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="473"/>
<source>Use the same password for the administrator account.</source>
<translation type="unfinished"/>
<translation>Käytä pääkäyttäjän tilillä samaa salasanaa.</translation>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="496"/>
@ -1968,7 +1968,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="22"/>
<source>Storage de&amp;vice:</source>
<translation type="unfinished"/>
<translation>Tallennus&amp;laite:</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="51"/>
@ -1983,7 +1983,7 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="107"/>
<source>Cre&amp;ate</source>
<translation type="unfinished"/>
<translation>Luo&amp;</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="114"/>
@ -1998,27 +1998,27 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="132"/>
<source>New Volume Group</source>
<translation type="unfinished"/>
<translation>Uusi aseman ryhmä</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="139"/>
<source>Resize Volume Group</source>
<translation type="unfinished"/>
<translation>Muuta kokoa aseman-ryhmässä</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="146"/>
<source>Deactivate Volume Group</source>
<translation type="unfinished"/>
<translation>Poista asemaryhmä käytöstä</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="153"/>
<source>Remove Volume Group</source>
<translation type="unfinished"/>
<translation>Poista asemaryhmä</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="180"/>
<source>I&amp;nstall boot loader on:</source>
<translation type="unfinished"/>
<translation>A&amp;senna käynnistyslatain:</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="209"/>
@ -2028,12 +2028,12 @@ Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="238"/>
<source>Can not create new partition</source>
<translation type="unfinished"/>
<translation>Ei voi luoda uutta osiota</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="239"/>
<source>The partition table on %1 already has %2 primary partitions, and no more can be added. Please remove one primary partition and add an extended partition, instead.</source>
<translation type="unfinished"/>
<translation>%1 osio-taulukossa on jo %2 ensisijaista osiota, eikä sitä voi lisätä. Poista yksi ensisijainen osio ja lisää laajennettu osio.</translation>
</message>
</context>
<context>
@ -2518,7 +2518,7 @@ Ulostulo:
<message>
<location filename="../src/modules/partition/gui/ResizeVolumeGroupDialog.cpp" line="39"/>
<source>Resize Volume Group</source>
<translation type="unfinished"/>
<translation>Muuta kokoa aseman-ryhmässä</translation>
</message>
</context>
<context>

View File

@ -120,7 +120,7 @@ msgstr ""
#: src/modules/unpackfs/main.py:326
msgid "Bad mount point for root partition"
msgstr ""
msgstr "Huono kiinnityspiste root-osioon"
#: src/modules/unpackfs/main.py:327
msgid "rootMountPoint is \"{}\", which does not exist, doing nothing"
@ -129,7 +129,7 @@ msgstr ""
#: src/modules/unpackfs/main.py:340 src/modules/unpackfs/main.py:347
#: src/modules/unpackfs/main.py:352
msgid "Bad unsquash configuration"
msgstr ""
msgstr "Huono epäpuhdas kokoonpano"
#: src/modules/unpackfs/main.py:341
msgid "The filesystem for \"{}\" ({}) is not supported"
@ -169,19 +169,19 @@ msgstr ""
#: src/modules/displaymanager/main.py:602
msgid "Cannot configure LightDM"
msgstr ""
msgstr "LightDM määritysvirhe"
#: src/modules/displaymanager/main.py:603
msgid "No LightDM greeter installed."
msgstr ""
msgstr "LightDM ei ole asennettu."
#: src/modules/displaymanager/main.py:634
msgid "Cannot write SLIM configuration file"
msgstr ""
msgstr "SLIM-määritystiedostoa ei voi kirjoittaa"
#: src/modules/displaymanager/main.py:635
msgid "SLIM config file {!s} does not exist"
msgstr ""
msgstr "SLIM-määritystiedostoa {!s} ei ole olemassa"
#: src/modules/displaymanager/main.py:750
msgid "No display managers selected for the displaymanager module."
@ -195,11 +195,11 @@ msgstr ""
#: src/modules/displaymanager/main.py:831
msgid "Display manager configuration was incomplete"
msgstr ""
msgstr "Näytönhallinnan kokoonpano oli puutteellinen"
#: src/modules/initcpiocfg/main.py:36
msgid "Configuring mkinitcpio."
msgstr ""
msgstr "Määritetään mkinitcpio."
#: src/modules/initcpiocfg/main.py:192
#: src/modules/luksopenswaphookcfg/main.py:100
@ -215,7 +215,7 @@ msgstr ""
#: src/modules/initcpio/main.py:47
msgid "Process Failed"
msgstr ""
msgstr "Prosessi epäonnistui"
#: src/modules/initcpio/main.py:48
msgid ""
@ -229,7 +229,7 @@ msgstr ""
#: src/modules/rawfs/main.py:35
msgid "Installing data."
msgstr ""
msgstr "Asennetaan tietoja."
#: src/modules/services-openrc/main.py:38
msgid "Configure OpenRC services"

View File

@ -157,6 +157,14 @@ JobQueue::JobQueue( QObject* parent )
JobQueue::~JobQueue()
{
if ( m_thread->isRunning() )
{
m_thread->terminate();
if ( !m_thread->wait(300) )
cError() << "Could not terminate job thread (expect a crash now).";
delete m_thread;
}
delete m_storage;
}

View File

@ -48,10 +48,8 @@ ProcessJob::~ProcessJob()
QString
ProcessJob::prettyName() const
{
//TODO: show something more meaningful
return tr( "Run command %1 %2" )
.arg( m_command )
.arg( m_runInChroot ? "in chroot." : " ." );
return ( m_runInChroot ? tr( "Run command '%1' in target system." ) : tr( " Run command '%1'." ) )
.arg( m_command );
}
@ -67,83 +65,23 @@ ProcessJob::prettyStatusMessage() const
JobResult
ProcessJob::exec()
{
int ec = 0;
QString output;
using CalamaresUtils::System;
if ( m_runInChroot )
ec = CalamaresUtils::System::instance()->
targetEnvOutput( m_command,
output,
return CalamaresUtils::System::instance()->
targetEnvCommand( { m_command },
m_workingPath,
QString(),
m_timeoutSec );
m_timeoutSec )
.explainProcess( m_command, m_timeoutSec );
else
ec = callOutput( m_command,
output,
return
System::runCommand( System::RunLocation::RunInHost,
{ "/bin/sh", "-c", m_command },
m_workingPath,
QString(),
m_timeoutSec );
return CalamaresUtils::ProcessResult::explainProcess( ec, m_command, output, m_timeoutSec );
}
int
ProcessJob::callOutput( const QString& command,
QString& output,
const QString& workingPath,
const QString& stdInput,
int timeoutSec )
{
output.clear();
QProcess process;
process.setProgram( "/bin/sh" );
process.setArguments( { "-c", command } );
process.setProcessChannelMode( QProcess::MergedChannels );
if ( !workingPath.isEmpty() )
{
if ( QDir( workingPath ).exists() )
process.setWorkingDirectory( QDir( workingPath ).absolutePath() );
else
{
cWarning() << "Invalid working directory:" << workingPath;
return -3;
}
}
cDebug() << "Running" << command;
process.start();
if ( !process.waitForStarted() )
{
cWarning() << "Process failed to start" << process.error();
return -2;
}
if ( !stdInput.isEmpty() )
{
process.write( stdInput.toLocal8Bit() );
process.closeWriteChannel();
}
if ( !process.waitForFinished( timeoutSec ? ( timeoutSec * 1000 ) : -1 ) )
{
cWarning() << "Timed out. output so far:";
output.append( QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed() );
cWarning() << output;
return -4;
}
output.append( QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed() );
if ( process.exitStatus() == QProcess::CrashExit )
{
cWarning() << "Process crashed";
return -1;
}
cDebug() << "Finished. Exit code:" << process.exitCode();
return process.exitCode();
m_timeoutSec )
.explainProcess( m_command, m_timeoutSec );
}
} // namespace Calamares

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2019, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -40,11 +40,6 @@ public:
JobResult exec() override;
private:
int callOutput( const QString& command,
QString& output,
const QString& workingPath = QString(),
const QString& stdInput = QString(),
int timeoutSec = 0 );
QString m_command;
QString m_workingPath;
bool m_runInChroot;

View File

@ -18,9 +18,12 @@
#include "Tests.h"
#include "utils/CalamaresUtilsSystem.h"
#include "utils/Logger.h"
#include "utils/Yaml.h"
#include <QTemporaryFile>
#include <QtTest/QtTest>
QTEST_GUILESS_MAIN( LibCalamaresTests )
@ -113,3 +116,45 @@ LibCalamaresTests::testLoadSaveYamlExtended()
}
QFile::remove( "out.yaml" );
}
void
LibCalamaresTests::testCommands()
{
using CalamaresUtils::System;
auto r = System::runCommand(
System::RunLocation::RunInHost,
{ "/bin/ls", "/tmp" }
);
QVERIFY( r.getExitCode() == 0 );
QTemporaryFile tf( "/tmp/calamares-test-XXXXXX" );
QVERIFY( tf.open() );
QVERIFY( !tf.fileName().isEmpty() );
QFileInfo tfn( tf.fileName() );
QVERIFY( !r.getOutput().contains( tfn.fileName() ) );
// Run ls again, now that the file exists
r = System::runCommand(
System::RunLocation::RunInHost,
{ "/bin/ls", "/tmp" }
);
QVERIFY( r.getOutput().contains( tfn.fileName() ) );
// .. and without a working directory set, assume builddir != /tmp
r = System::runCommand(
System::RunLocation::RunInHost,
{ "/bin/ls" }
);
QVERIFY( !r.getOutput().contains( tfn.fileName() ) );
r = System::runCommand(
System::RunLocation::RunInHost,
{ "/bin/ls" },
"/tmp"
);
QVERIFY( r.getOutput().contains( tfn.fileName() ) );
}

View File

@ -34,6 +34,8 @@ private Q_SLOTS:
void testLoadSaveYaml(); // Just settings.conf
void testLoadSaveYamlExtended(); // Do a find() in the src dir
void testCommands();
};
#endif

View File

@ -114,14 +114,24 @@ System::mount( const QString& devicePath,
const QString& options )
{
if ( devicePath.isEmpty() || mountPoint.isEmpty() )
return -3;
{
if ( devicePath.isEmpty() )
cWarning() << "Can't mount an empty device.";
if ( mountPoint.isEmpty() )
cWarning() << "Can't mount on an empty mountpoint.";
return static_cast<int>(ProcessResult::Code::NoWorkingDirectory);
}
QDir mountPointDir( mountPoint );
if ( !mountPointDir.exists() )
{
bool ok = mountPointDir.mkpath( mountPoint );
if ( !ok )
return -3;
{
cWarning() << "Could not create mountpoint" << mountPoint;
return static_cast<int>(ProcessResult::Code::NoWorkingDirectory);
}
}
QString program( "mount" );
@ -146,15 +156,13 @@ System::runCommand(
{
QString output;
if ( !Calamares::JobQueue::instance() )
return -3;
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr;
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
if ( ( location == System::RunLocation::RunInTarget ) &&
( !gs || !gs->contains( "rootMountPoint" ) ) )
{
cWarning() << "No rootMountPoint in global storage";
return -3;
return ProcessResult::Code::NoWorkingDirectory;
}
QProcess process;
@ -167,7 +175,7 @@ System::runCommand(
if ( !QDir( destDir ).exists() )
{
cWarning() << "rootMountPoint points to a dir which does not exist";
return -3;
return ProcessResult::Code::NoWorkingDirectory;
}
program = "chroot";
@ -189,8 +197,10 @@ System::runCommand(
if ( QDir( workingPath ).exists() )
process.setWorkingDirectory( QDir( workingPath ).absolutePath() );
else
{
cWarning() << "Invalid working directory:" << workingPath;
return -3;
return ProcessResult::Code::NoWorkingDirectory;
}
}
cDebug() << "Running" << program << RedactedList( arguments );
@ -198,20 +208,20 @@ System::runCommand(
if ( !process.waitForStarted() )
{
cWarning() << "Process failed to start" << process.error();
return -2;
return ProcessResult::Code::FailedToStart;
}
if ( !stdInput.isEmpty() )
{
process.write( stdInput.toLocal8Bit() );
process.closeWriteChannel();
}
process.closeWriteChannel();
if ( !process.waitForFinished( timeoutSec ? ( timeoutSec * 1000 ) : -1 ) )
{
cWarning().noquote().nospace() << "Timed out. Output so far:\n" <<
process.readAllStandardOutput();
return -4;
return ProcessResult::Code::TimedOut;
}
output.append( QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed() );
@ -219,12 +229,13 @@ System::runCommand(
if ( process.exitStatus() == QProcess::CrashExit )
{
cWarning().noquote().nospace() << "Process crashed. Output so far:\n" << output;
return -1;
return ProcessResult::Code::Crashed;
}
auto r = process.exitCode();
cDebug() << "Finished. Exit code:" << r;
if ( ( r != 0 ) || Calamares::Settings::instance()->debugMode() )
bool showDebug = ( !Calamares::Settings::instance() ) || ( Calamares::Settings::instance()->debugMode() );
if ( ( r != 0 ) || showDebug )
{
cDebug() << "Target cmd:" << RedactedList( args );
cDebug().noquote().nospace() << "Target output:\n" << output;
@ -306,22 +317,22 @@ ProcessResult::explainProcess( int ec, const QString& command, const QString& ou
? QCoreApplication::translate( "ProcessResult", "\nThere was no output from the command.")
: (QCoreApplication::translate( "ProcessResult", "\nOutput:\n") + output);
if ( ec == -1 ) //Crash!
if ( ec == static_cast<int>(ProcessResult::Code::Crashed) ) //Crash!
return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command crashed." ),
QCoreApplication::translate( "ProcessResult", "Command <i>%1</i> crashed." )
.arg( command )
+ outputMessage );
if ( ec == -2 )
if ( ec == static_cast<int>(ProcessResult::Code::FailedToStart) )
return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command failed to start." ),
QCoreApplication::translate( "ProcessResult", "Command <i>%1</i> failed to start." )
.arg( command ) );
if ( ec == -3 )
if ( ec == static_cast<int>(ProcessResult::Code::NoWorkingDirectory) )
return JobResult::error( QCoreApplication::translate( "ProcessResult", "Internal error when starting command." ),
QCoreApplication::translate( "ProcessResult", "Bad parameters for process job call." ) );
if ( ec == -4 )
if ( ec == static_cast<int>(ProcessResult::Code::TimedOut) )
return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command failed to finish." ),
QCoreApplication::translate( "ProcessResult", "Command <i>%1</i> failed to finish in %2 seconds." )
.arg( command )

View File

@ -32,8 +32,16 @@ namespace CalamaresUtils
class ProcessResult : public QPair< int, QString >
{
public:
enum class Code : int
{
Crashed = -1, // Must match special return values from QProcess
FailedToStart = -2, // Must match special return values from QProcess
NoWorkingDirectory = -3,
TimedOut = -4
} ;
/** @brief Implicit one-argument constructor has no output, only a return code */
ProcessResult( int r ) : QPair< int, QString >( r, QString() ) {}
ProcessResult( Code r ) : QPair< int, QString >( static_cast<int>(r), QString() ) {}
ProcessResult( int r, QString s ) : QPair< int, QString >( r, s ) {}
int getExitCode() const { return first; }
@ -93,9 +101,9 @@ public:
* @param filesystemName the name of the filesystem (optional).
* @param options any additional options as passed to mount -o (optional).
* @returns the program's exit code, or:
* -1 = QProcess crash
* -2 = QProcess cannot start
* -3 = bad arguments
* Crashed = QProcess crash
* FailedToStart = QProcess cannot start
* NoWorkingDirectory = bad arguments
*/
DLLEXPORT int mount( const QString& devicePath,
const QString& mountPoint,
@ -120,10 +128,10 @@ public:
*
* @returns the program's exit code and its output (if any). Special
* exit codes (which will never have any output) are:
* -1 = QProcess crash
* -2 = QProcess cannot start
* -3 = bad arguments
* -4 = QProcess timeout
* Crashed = QProcess crash
* FailedToStart = QProcess cannot start
* NoWorkingDirectory = bad arguments
* TimedOut = QProcess timeout
*/
static DLLEXPORT ProcessResult runCommand(
RunLocation location,

View File

@ -283,18 +283,35 @@ ViewManager::next()
}
m_currentStep++;
m_stack->setCurrentIndex( m_currentStep );
m_stack->setCurrentIndex( m_currentStep ); // Does nothing if out of range
step->onLeave();
if ( m_currentStep < m_steps.count() )
{
m_steps.at( m_currentStep )->onActivate();
executing = qobject_cast< ExecutionViewStep* >( m_steps.at( m_currentStep ) ) != nullptr;
emit currentStepChanged();
}
else
{
// Reached the end in a weird state (e.g. no finished step after an exec)
executing = false;
m_next->setEnabled( false );
m_back->setEnabled( false );
}
updateCancelEnabled( !settings->disableCancel() && !(executing && settings->disableCancelDuringExec() ) );
}
else
{
step->next();
}
if ( m_currentStep < m_steps.count() )
{
m_next->setEnabled( !executing && m_steps.at( m_currentStep )->isNextEnabled() );
m_back->setEnabled( !executing && m_steps.at( m_currentStep )->isBackEnabled() );
}
updateButtonLabels();
}
@ -320,7 +337,7 @@ ViewManager::updateButtonLabels()
else
m_next->setText( tr( "&Next" ) );
if ( m_currentStep == m_steps.count() -1 && m_steps.last()->isAtEnd() )
if ( isAtVeryEnd() )
{
m_quit->setText( tr( "&Done" ) );
m_quit->setToolTip( complete );
@ -368,7 +385,7 @@ bool ViewManager::confirmCancelInstallation()
const auto* const settings = Calamares::Settings::instance();
// When we're at the very end, then it's always OK to exit.
if ( m_currentStep == m_steps.count() -1 && m_steps.last()->isAtEnd() )
if ( isAtVeryEnd() )
return true;
// Not at the very end, cancel/quit might be disabled

View File

@ -131,6 +131,11 @@ private:
void updateButtonLabels();
void updateCancelEnabled( bool enabled );
bool isAtVeryEnd() const
{
return ( m_currentStep >= m_steps.count() ) || ( m_currentStep == m_steps.count() - 1 && m_steps.last()->isAtEnd() );
}
static ViewManager* s_instance;
ViewStepList m_steps;

View File

@ -4,16 +4,16 @@
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Zmicer Turok <zmicerturok@gmail.com>, 2018
# Zmicer Turok <nashtlumach@gmail.com>, 2018
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-05 11:34-0400\n"
"POT-Creation-Date: 2019-05-10 19:18-0400\n"
"PO-Revision-Date: 2016-12-16 12:18+0000\n"
"Last-Translator: Zmicer Turok <zmicerturok@gmail.com>, 2018\n"
"Last-Translator: Zmicer Turok <nashtlumach@gmail.com>, 2018\n"
"Language-Team: Belarusian (https://www.transifex.com/calamares/teams/20061/be/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"